api pagin, db _task_subquary, tasks depends

This commit is contained in:
IluaAir
2025-08-28 00:27:27 +03:00
parent cd4eb11604
commit 45c5492ff8
3 changed files with 23 additions and 7 deletions

View File

@@ -0,0 +1,12 @@
from typing import Annotated
from fastapi import Depends, Query
from pydantic import BaseModel
class Pagination(BaseModel):
page: int | None = Query(default=0, ge=0)
limit: int | None = Query(default=30, ge=0, le=50)
PaginationTasks = Annotated[Pagination, Depends()]

View File

@@ -3,6 +3,7 @@ from typing import Annotated
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends
from src.api.dependacies.db_dep import sessionDep from src.api.dependacies.db_dep import sessionDep
from src.api.dependacies.task_dep import PaginationTasks
from src.api.dependacies.user_dep import ActiveUser, TaskOwnerDep from src.api.dependacies.user_dep import ActiveUser, TaskOwnerDep
from src.schemas.tasks import TaskADDRequest from src.schemas.tasks import TaskADDRequest
from src.services.tasks import TaskService from src.services.tasks import TaskService
@@ -12,7 +13,7 @@ router = APIRouter(prefix="/tasks", tags=["Tasks"])
@router.get("/") @router.get("/")
async def get_tasks(session: sessionDep, user: ActiveUser): async def get_tasks(session: sessionDep, user: ActiveUser, page: PaginationTasks):
result = await UserService(session).get_user_with_tasks(user.id) result = await UserService(session).get_user_with_tasks(user.id)
return result return result

View File

@@ -31,12 +31,7 @@ class UsersRepo(BaseRepo):
date_to: Optional[date] = None, date_to: Optional[date] = None,
date_from: Optional[date] = None, date_from: Optional[date] = None,
) -> UsersORM | None: ) -> UsersORM | None:
tasks_subquery = select(TasksORM.id).where(TasksORM.user_id == user_id) tasks_subquery = self._tasks_subquary(date_from=date_from, date_to=date_to, user_id=user_id)
if date_from is not None:
tasks_subquery = tasks_subquery.where(TasksORM.due_date >= date_from)
if date_to is not None:
tasks_subquery = tasks_subquery.where(TasksORM.due_date <= date_to)
if tasks_limit is not None: if tasks_limit is not None:
tasks_subquery = tasks_subquery.limit(tasks_limit) tasks_subquery = tasks_subquery.limit(tasks_limit)
@@ -67,3 +62,11 @@ class UsersRepo(BaseRepo):
def _priority(self, priority: str): def _priority(self, priority: str):
priority_map = {"low": 1, "medium": 2, "high": 3, "critical": 4} priority_map = {"low": 1, "medium": 2, "high": 3, "critical": 4}
return priority_map.get(priority, 0) return priority_map.get(priority, 0)
def _tasks_subquary(self, date_from: date | None, date_to: date | None, **filter_by):
subq = select(TasksORM.id).filter_by(**filter_by)
if date_from is not None:
subq = subq.filter(TasksORM.due_date >= date_from)
if date_to is not None:
subq = subq.filter(TasksORM.due_date <= date_to)
return subq