62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
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]))
|