feat: passport images for user
This commit is contained in:
		@@ -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))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user