/
syncora
/
auth_service
Обзор
Документация
Войти
/
syncora
/
auth_service
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/application/usecases/deactivate/deactivate_usecase.py
64 строки
3 KB
ikarg
replace deletion with deactivation
14 окт 2025, 17:05
14 окт 2025, 17:05
97aec9f
Код
Авторство
О чём код?
from fastapi import HTTPException from app.application.interfaces.repositories.user_uow import IUserUOW from app.domain.dtos import DeactivateInputDTO, ResponseDTO from app.api.http_status import HttpStatus from app.core.config import config from app.core.const import RedisConst class DeactivateUsecase: def __init__(self, uow: IUserUOW, redis_util, email_util, jwt_util, vault_util): self.uow = uow self.redis_util = redis_util self.email_util = email_util self.jwt_util = jwt_util self.vault_util = vault_util async def execute(self, data: DeactivateInputDTO, token: str): async with self.uow: user_id = await self.jwt_util.get_user_id(token) config.logger.info(f"usecase: DeactivateUsecase | id: {user_id}") user = await self.uow.user_repository.get_by_id(user_id) if user is None: config.logger.warn(f"usecase: DeactivateUsecase | message: Аккаунт с id '{user_id}' не найден") raise HTTPException( status_code=HttpStatus.NOT_FOUND, detail="Пользователь не найден" ) confirmation_code = await self.redis_util.get_email_code(user.email, RedisConst.CONFIRMATION_CODE_DEACTIVATE) if data.confirmation_code != confirmation_code: config.logger.warn(f"usecase: DeactivateUsecase | message: Неверный код подтверждения деактивации аккаунта") raise HTTPException( status_code=HttpStatus.BAD_REQUEST, detail="Неверный код подтверждения деактивации аккаунта" ) path = f"users/user_{user_id}" secret = await self.vault_util.get_secret(path) if secret is None: secret_data = { "deactivated": True } await self.vault_util.set_secret(path, secret_data) else: secret["deactivated"] = True await self.vault_util.update_secret(path, secret) user.deactivated = True await self.uow.user_repository.update(user) await self.redis_util.remove_email_code(user.email, RedisConst.CONFIRMATION_CODE_DEACTIVATE) await self.email_util.send_email( user.email, "Syncora | Деактивация аккаунта", "Ваш аккаунт был только что деактивирован. Если это сделали не вы, пожалуйста, немедленно свяжитесь с технической поддержкой <email> или восстановите доступ к аккаунту" ) return ResponseDTO.validate({ "message": "Аккаунт успешно деактивирован" })