From ac28f9b420038c2204d1c84e5a1fabe8b4a0ef87 Mon Sep 17 00:00:00 2001 From: IluaAir Date: Tue, 30 Sep 2025 00:01:13 +0300 Subject: [PATCH] add limit page date to date from --- src/api/dependacies/task_dep.py | 11 ++++++++++- src/api/v1/users.py | 9 +++++---- src/services/users.py | 24 ++++++++++-------------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/api/dependacies/task_dep.py b/src/api/dependacies/task_dep.py index 3b24769..a516d7b 100644 --- a/src/api/dependacies/task_dep.py +++ b/src/api/dependacies/task_dep.py @@ -23,4 +23,13 @@ class Date(BaseModel): return self -DateDep = Annotated[Date, Depends()] +class Page(BaseModel): + limit: int | None = Query(default=30, ge=1, le=100) + page: int | None = Query(default=0, ge=0) + + +class Filters(Page, Date): + pass + + +FilterDep = Annotated[Filters, Depends()] diff --git a/src/api/v1/users.py b/src/api/v1/users.py index c0da29e..53b5384 100644 --- a/src/api/v1/users.py +++ b/src/api/v1/users.py @@ -1,6 +1,7 @@ from fastapi import APIRouter, Body, HTTPException from src.api.dependacies.db_dep import sessionDep +from src.api.dependacies.task_dep import FilterDep from src.api.dependacies.user_dep import ( ActiveUser, AdminUser, @@ -25,12 +26,12 @@ async def get_user_by_id(session: sessionDep, id: int, _: AdminUser): @router.get("/{id}/tasks") -async def get_user_tasks(session: sessionDep, id: int, user: ActiveUser): +async def get_user_tasks( + session: sessionDep, id: int, user: ActiveUser, filters: FilterDep +): if user.id != id and user.is_superuser is False: raise HTTPException(status_code=403, detail="Forbidden") - tasks = await UserService(session).get_user_with_tasks( - user_id=id, status=None, limit=None, offset=None, date_to=None, date_from=None - ) + tasks = await UserService(session).get_user_with_tasks(id, **filters.model_dump()) return tasks.tasks diff --git a/src/services/users.py b/src/services/users.py index cd425fd..4bb78fd 100644 --- a/src/services/users.py +++ b/src/services/users.py @@ -41,22 +41,18 @@ class UserService(BaseService): await self.session.commit() return User.model_validate(user) - async def get_user_with_tasks( - self, - user_id: int, - status: str | None, - limit: int | None, - offset: int | None, - date_to: date | None, - date_from: date | None, - ): + async def get_user_with_tasks(self, user_id: int, **attrs): + if attrs.get("page") and attrs.get("limit"): + tasks_offset = attrs.get("page", 0) * attrs.get("limit") + else: + tasks_offset = None user = await self.session.user.get_one_with_load( user_id=user_id, - status=status, - tasks_limit=limit, - tasks_offset=offset, - date_from=date_from, - date_to=date_to, + status=attrs.get("status"), + tasks_limit=attrs.get("limit"), + tasks_offset=tasks_offset, + date_from=attrs.get("date_from"), + date_to=attrs.get("date_to"), ) if user is None: raise HTTPException(status_code=404, detail="User not found.")