From 2d54f595dba135eda275c61beb11fd041154e392 Mon Sep 17 00:00:00 2001 From: IluaAir Date: Sun, 24 Aug 2025 21:55:42 +0300 Subject: [PATCH] add date from and date to --- src/repository/users.py | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/repository/users.py b/src/repository/users.py index 7d13789..4fed989 100644 --- a/src/repository/users.py +++ b/src/repository/users.py @@ -1,3 +1,4 @@ +from datetime import date from typing import Optional from sqlalchemy import select, update @@ -23,21 +24,24 @@ class UsersRepo(BaseRepo): return model async def get_one_with_load( - self, - user_id: int, - tasks_limit: Optional[int] = None, - tasks_offset: int = 0 + self, + user_id: int, + tasks_limit: Optional[int] = None, + tasks_offset: int = 0, + date_to: Optional[date] = None, + date_from: Optional[date] = None, ) -> UsersORM | None: - tasks_subquery = ( - select(TasksORM.id) - .where(TasksORM.user_id == user_id) - ) - + tasks_subquery = select(TasksORM.id).where(TasksORM.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: tasks_subquery = tasks_subquery.limit(tasks_limit) if tasks_offset > 0: tasks_subquery = tasks_subquery.offset(tasks_offset) - query = ( select(self.model) .where(self.model.id == user_id) @@ -48,8 +52,18 @@ class UsersRepo(BaseRepo): TasksORM.id, TasksORM.title, TasksORM.due_date, TasksORM.priority ) ) - ) result = await self.session.execute(query) obj = result.scalar_one_or_none() + if obj and obj.tasks: + obj.tasks.sort( + key=lambda task: ( + task.due_date or date.max, + -self._priority(task.priority), + ) + ) return obj + + def _priority(self, priority: str): + priority_map = {"low": 1, "medium": 2, "high": 3, "critical": 4} + return priority_map.get(priority, 0)