add drugs db index

This commit is contained in:
ipu 2025-08-07 20:38:50 +03:00
parent 126dcf78c7
commit ba9e90cd60
7 changed files with 78 additions and 12 deletions

View file

@ -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:

View file

@ -29,6 +29,8 @@ class Settings(BaseSettings):
POSTGRES_HOST: str = "db"
POSTGRES_PORT: int = 5432
DEBUG: bool = False
@property
def DATABASE_URL(self): # noqa

View file

@ -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)

View file

@ -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"])