feat: passport images for user

This commit is contained in:
2024-12-04 20:20:03 +04:00
parent 9a6fc3fdd7
commit d56e292276
4 changed files with 88 additions and 2 deletions

View File

@@ -1,6 +1,8 @@
from sqlalchemy import select, update, delete, insert, and_
from models import User, user_position, user_pay_rate
from backend import config
from external.s3_uploader.uploader import S3Uploader
from models import User, user_position, user_pay_rate, PassportImage
from services.base import BaseService
from schemas.user import *
@@ -34,6 +36,7 @@ class UserService(BaseService):
try:
base_fields = request.data.model_dump_parent()
del base_fields['pay_rate']
del base_fields['passport_image_url']
user = User(**base_fields)
self.session.add(user)
await self.session.flush()
@@ -62,6 +65,8 @@ class UserService(BaseService):
return UpdateUserResponse(ok=False, message='Указанный пользователь не найден')
base_fields = request.data.model_dump_parent()
del base_fields['pay_rate']
del base_fields['passport_image_url']
del base_fields['passport_images']
stmt = update(User).values(**base_fields).where(User.id == request.data.id)
await self.session.execute(stmt)
await self.session.flush()
@@ -93,3 +98,30 @@ class UserService(BaseService):
return UpdateUserResponse(ok=True, message='Пользователь успешно обновлен')
except Exception as e:
return UpdateUserResponse(ok=False, message=str(e))
async def upload_passport_image(self, user_id: int, file_bytes: bytes) -> UploadPassportImageResponse:
try:
user: Optional[User] = await self.session.get(User, user_id)
if not user:
raise Exception("Не удалось пользователя с указанным ID")
# removing previous images
for image in user.passport_images:
await self.session.delete(image)
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("Не удалось загрузить изображение")
passport_image = PassportImage(
user_id=user_id,
image_url=response_url,
)
self.session.add(passport_image)
await self.session.commit()
return UploadPassportImageResponse(
ok=True,
message='Изображение успешно загружено',
image_url=response_url
)
except Exception as e:
return UploadPassportImageResponse(ok=False, message=str(e))