import uuid from io import BytesIO from typing import List import brewman.schemas.voucher as output from fastapi import APIRouter, Depends, Security from fastapi.responses import StreamingResponse from sqlalchemy.orm import Session from ..core.security import get_user from ..db.session import SessionLocal from ..models.voucher import DbImage from ..schemas.auth import UserToken router = APIRouter() # Dependency def get_db() -> Session: try: db = SessionLocal() yield db finally: db.close() @router.get("/{id_}/{type_}") def db_image(id_: uuid.UUID, type_: str, db: Session = Depends(get_db)): item = db.query(DbImage).filter(DbImage.id == id_).first() if type_ == "thumbnail": item = BytesIO(item.thumbnail) else: item = BytesIO(item.image) return StreamingResponse(item, media_type="image/jpeg") def save_files(voucher_id: uuid.UUID, i: List[bytes], t: List[bytes], db: Session): i = i or [] t = t or [] for index, value in enumerate(i): db.add(DbImage(voucher_id, "voucher", i[index], t[index])) def update_files( voucher_id: uuid.UUID, data: List[output.ImageUpload], i: List[bytes], t: List[bytes], db: Session, ): i = i or [] t = t or [] old = [f.id_ for f in data if f.id_] images = db.query(DbImage).filter(DbImage.resource_id == voucher_id).all() for image in [i for i in images if i.id not in old]: db.delete(image) for index, value in enumerate(i): db.add(DbImage(voucher_id, "voucher", i[index], t[index]))