import json
iš fastapi importuoti APIRouter, Depends
iš sqlalchemy importuoti select
iš sqlalchemy.ext.asyncio importuoti AsyncSession
iš redis importuoti Redis
iš src.infrastructure.storage.db.models.product importuoti ProductDB
iš src.infrastructure.storage.db.models.factory importuoti FactoryDB
router = APIRouter()
redis = Redis.from_url("redis://localhost:6379/0")
@router.get("/products/serials")
async def get_serials_by_ids(
ids: str,
db: AsyncSession = Depends(get_db),
):
product_ids = [int(x) for x in ids.split(",")]
items = []
for product_id in product_ids:
raw = redis.get(f"serial:{product_id}")
if raw:
items.append(json.loads(raw))
continue
product = await db.get(ProductDB, product_id)
factory = (
await db.execute(select(FactoryDB).where(FactoryDB.code == product.factory))
).scalar_one()
item = {
"id": product.id,
"serial_number": product.serial_number,
"factory_number": factory.number,
}
redis.set(f"serial:{product_id}", json.dumps(item))
items.append(item)
await db.commit()
return items