diff --git a/app/dao/user.py b/app/dao/user.py index a42b3dc..7c17b45 100644 --- a/app/dao/user.py +++ b/app/dao/user.py @@ -23,14 +23,14 @@ class UserDAO(BaseDAO): async def add(self, **data) -> SUser: try: - stmt = insert(self.model).values(**data).returning(Users.__table__.columns) + stmt = insert(Users).values(**data).returning(Users.__table__.columns) result = await self.session.execute(stmt) result = result.mappings().one() return SUser.model_validate(result) except IntegrityError: raise UserAlreadyExistsException - async def find_one_or_none(self, **filter_by) -> SUser: + async def find_one(self, **filter_by) -> SUser: try: query = select(Users.__table__.columns).filter_by(**filter_by) result = await self.session.execute(query) diff --git a/app/services/user_service.py b/app/services/user_service.py index b7fc587..d5fc19b 100644 --- a/app/services/user_service.py +++ b/app/services/user_service.py @@ -4,7 +4,7 @@ from app.users.schemas import SUser class UserService: @staticmethod - async def find_one_or_none(uow: UnitOfWork, user_id: int) -> SUser | None: + async def find_one_or_none(uow: UnitOfWork, user_id: int) -> SUser: async with uow: - user = await uow.user.find_one_or_none(id=user_id) + user = await uow.user.find_one(id=user_id) return user diff --git a/app/users/dependencies.py b/app/users/dependencies.py index 6837d50..25612b1 100644 --- a/app/users/dependencies.py +++ b/app/users/dependencies.py @@ -54,7 +54,7 @@ def get_token_ws(sec_websocket_protocol: Annotated[str | None, Header()] = None) return sec_websocket_protocol.split()[-1] -async def get_current_user_ws(token: str = Depends(get_token_ws), uow=Depends(UnitOfWork)): +async def get_current_user_ws(token: str = Depends(get_token_ws), uow=Depends(UnitOfWork)) -> SUser: try: payload = jwt.decode(token, settings.SECRET_KEY, settings.ALGORITHM) except ExpiredSignatureError: diff --git a/app/users/router.py b/app/users/router.py index 1dd6746..c4af888 100644 --- a/app/users/router.py +++ b/app/users/router.py @@ -60,7 +60,7 @@ async def get_all_users(uow=Depends(UnitOfWork)): async def check_existing_user(user_filter: SUserFilter, uow=Depends(UnitOfWork)): async with uow: try: - await uow.user.find_one_or_none(**user_filter.model_dump(exclude_none=True)) + await uow.user.find_one(**user_filter.model_dump(exclude_none=True)) raise UserAlreadyExistsException except UserNotFoundException: pass diff --git a/app/utils/auth.py b/app/utils/auth.py index 1a3fb8b..d049d3b 100644 --- a/app/utils/auth.py +++ b/app/utils/auth.py @@ -63,7 +63,7 @@ class AuthService: async def authenticate_user_by_email(uow: UnitOfWork, email: EmailStr, password: str) -> SUser | None: try: async with uow: - user = await uow.user.find_one_or_none(email=email) + user = await uow.user.find_one(email=email) if not verify_password(password, user.hashed_password): return return user @@ -74,7 +74,7 @@ class AuthService: async def authenticate_user_by_username(uow: UnitOfWork, username: str, password: str) -> SUser | None: try: async with uow: - user = await uow.user.find_one_or_none(username=username) + user = await uow.user.find_one(username=username) if not verify_password(password, user.hashed_password): return return user @@ -93,7 +93,7 @@ class AuthService: @staticmethod async def check_verificated_user(uow: UnitOfWork, user_id: int) -> bool: async with uow: - user = await uow.user.find_one_or_none(id=user_id) + user = await uow.user.find_one(id=user_id) return user.role >= settings.VERIFICATED_USER @classmethod @@ -105,7 +105,7 @@ class AuthService: async def get_user_allowed_chats_id(uow: UnitOfWork, user_id: int) -> set[int]: async with uow: user_allowed_chats = await uow.user.get_user_allowed_chats(user_id) - user_allowed_chats_id = {chat["chat_id"] for chat in user_allowed_chats.allowed_chats} + user_allowed_chats_id = {chat.chat_id for chat in user_allowed_chats.allowed_chats} return user_allowed_chats_id @classmethod diff --git a/tests/integration_tests/users_api_test.py b/tests/integration_tests/users_api_test.py index 1ef4481..a071cc8 100644 --- a/tests/integration_tests/users_api_test.py +++ b/tests/integration_tests/users_api_test.py @@ -131,29 +131,3 @@ async def test_change_password( assert response.status_code == statuscode - -@pytest.mark.parametrize( - "user_id,password1,password2,statuscode,username", - [ - (1, "12311234", "12311231", 409, "12311241"), - (1, "12311231", "12311231", 200, "string"), - (1, "12341234", "12341234", 200, "string"), - (3, "12341234", "12341234", 200, "urec"), - (3, "12341234", "1234123", 422, "urec"), - (3, "1234123", "12341234", 422, "urec"), - (3, "1234123", "1234123", 422, "urec"), - ], -) -async def test_password_recovery( - user_id: int, password1: str, password2: str, statuscode: int, username: str, ac: AsyncClient -): - response = await ac.post( - "/users/password_recovery", json={"user_id": user_id, "password1": password1, "password2": password2} - ) - - assert response.status_code == statuscode - if response.status_code == 200: - assert response.json()["username"] == username - user_data = await UserService.find_one_or_none(user_id=user_id) - hashed_password = user_data.hashed_password - assert verify_password(password1, hashed_password)