add date from and date to

This commit is contained in:
IluaAir
2025-08-24 21:55:42 +03:00
parent 186b497130
commit 2d54f595db

View File

@@ -1,3 +1,4 @@
from datetime import date
from typing import Optional from typing import Optional
from sqlalchemy import select, update from sqlalchemy import select, update
@@ -23,21 +24,24 @@ class UsersRepo(BaseRepo):
return model return model
async def get_one_with_load( async def get_one_with_load(
self, self,
user_id: int, user_id: int,
tasks_limit: Optional[int] = None, tasks_limit: Optional[int] = None,
tasks_offset: int = 0 tasks_offset: int = 0,
date_to: Optional[date] = None,
date_from: Optional[date] = None,
) -> UsersORM | None: ) -> UsersORM | None:
tasks_subquery = ( tasks_subquery = select(TasksORM.id).where(TasksORM.user_id == user_id)
select(TasksORM.id) if date_from is not None:
.where(TasksORM.user_id == user_id) 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)
if tasks_offset > 0: if tasks_offset > 0:
tasks_subquery = tasks_subquery.offset(tasks_offset) tasks_subquery = tasks_subquery.offset(tasks_offset)
query = ( query = (
select(self.model) select(self.model)
.where(self.model.id == user_id) .where(self.model.id == user_id)
@@ -48,8 +52,18 @@ class UsersRepo(BaseRepo):
TasksORM.id, TasksORM.title, TasksORM.due_date, TasksORM.priority TasksORM.id, TasksORM.title, TasksORM.due_date, TasksORM.priority
) )
) )
) )
result = await self.session.execute(query) result = await self.session.execute(query)
obj = result.scalar_one_or_none() 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 return obj
def _priority(self, priority: str):
priority_map = {"low": 1, "medium": 2, "high": 3, "critical": 4}
return priority_map.get(priority, 0)