add drugs db index
This commit is contained in:
parent
126dcf78c7
commit
ba9e90cd60
7 changed files with 78 additions and 12 deletions
24
src/cache/drug_cache.py
vendored
24
src/cache/drug_cache.py
vendored
|
|
@ -6,6 +6,7 @@ from src.database import Drug, Session
|
|||
from src.drug_price_parser import DrugPriceParser, DrugPriceResponse
|
||||
from src.config import settings
|
||||
from src.services.session_service import session_service
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
|
||||
class DrugFull(BaseModel):
|
||||
|
|
@ -36,25 +37,28 @@ async def convert_drug_result(drug: DrugPriceResponse) -> list[DrugFull]:
|
|||
return [DrugFull.model_validate(r) for r in response_dict["result"]]
|
||||
|
||||
|
||||
async def get_drug(drug_name: str) -> list[Drug]:
|
||||
async def get_drug(drug_name: str) -> list[DrugFull]:
|
||||
parser = DrugPriceParser()
|
||||
result = parser.get_drug_prices(drug_name)
|
||||
drugs = await convert_drug_result(result)
|
||||
|
||||
return drugs
|
||||
|
||||
|
||||
async def store_drug(drugs: list[DrugFull]):
|
||||
with Session() as session:
|
||||
for drug in drugs:
|
||||
session.add(Drug(
|
||||
name=drug.name,
|
||||
dosage=drug.dosage,
|
||||
dosage_unit=drug.dosage_unit,
|
||||
unit_price=drug.unit_price,
|
||||
description=drug.description
|
||||
))
|
||||
session.commit()
|
||||
try:
|
||||
session.add(Drug(
|
||||
name=drug.name,
|
||||
dosage=drug.dosage,
|
||||
dosage_unit=drug.dosage_unit,
|
||||
unit_price=drug.unit_price,
|
||||
description=drug.description
|
||||
))
|
||||
session.commit()
|
||||
except IntegrityError as e:
|
||||
session.rollback()
|
||||
pass
|
||||
|
||||
|
||||
async def fetch_drug_with_dosage(drug_name: str, dosage: float) -> DrugFull | None:
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ class Settings(BaseSettings):
|
|||
POSTGRES_HOST: str = "db"
|
||||
POSTGRES_PORT: int = 5432
|
||||
|
||||
DEBUG: bool = False
|
||||
|
||||
|
||||
@property
|
||||
def DATABASE_URL(self): # noqa
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from sqlalchemy import BigInteger, Column, MetaData, String, Float, Text
|
||||
from sqlalchemy import BigInteger, Column, MetaData, String, Float, Text, Index
|
||||
from sqlalchemy.orm import DeclarativeBase
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy import create_engine
|
||||
|
|
@ -17,5 +17,14 @@ class Drug(Base):
|
|||
unit_price = Column(Float, nullable=False)
|
||||
description = Column(Text, nullable=True)
|
||||
|
||||
Index(
|
||||
"ix_drugs_name_dosage_dosage_unit",
|
||||
Drug.name,
|
||||
Drug.dosage,
|
||||
Drug.dosage_unit,
|
||||
unique=True
|
||||
)
|
||||
|
||||
|
||||
engine = create_engine(settings.DATABASE_URL)
|
||||
Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ class SessionService:
|
|||
agent_id = self.agent_id or settings.TALESTORM_AGENT_ID
|
||||
|
||||
response = await client.post("/sessions/", params={"agent_id": agent_id})
|
||||
print(response.request.url)
|
||||
# print(response.request.url)
|
||||
session_data = response.json()
|
||||
return str(session_data["id"])
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue