temp images on products

This commit is contained in:
2024-05-24 09:45:54 +03:00
parent 3a4f91d751
commit 88679089b6
11 changed files with 115 additions and 31 deletions

View File

@@ -3,7 +3,9 @@ from sqlalchemy import select, func, Integer, update
from sqlalchemy.orm import selectinload
import utils.barcodes
from models.product import Product, ProductBarcode
from backend import config
from external.s3_uploader.uploader import S3Uploader
from models.product import Product, ProductBarcode, ProductImage
from schemas.base import PaginationSchema
from services.base import BaseService
from schemas.product import *
@@ -146,6 +148,28 @@ class ProductService(BaseService):
raise HTTPException(status_code=404, detail='Товар не найден')
return ProductSchema.model_validate(product)
async def upload_image(self, product_id: int, file_bytes: bytes) -> ProductUploadImageResponse:
try:
product = await self.get_by_id(product_id)
if not product:
raise Exception("Неудалось найти товар с указанным ID")
s3_uploader = S3Uploader(config.S3_API_KEY)
response = await s3_uploader.upload(file_bytes)
response_url = response.get('link')
if not response_url:
raise Exception("Неудалось загрузить изображение")
product_image = ProductImage(
product_id=product_id,
image_url=response_url,
)
self.session.add(product_image)
await self.session.commit()
return ProductUploadImageResponse(ok=True,
message='Изображение успешно загружено',
image_url=response_url)
except Exception as e:
return ProductUploadImageResponse(ok=False, message=str(e))
# region Barcodes
async def add_barcode(self, request: ProductAddBarcodeRequest):
try: