add date from and date to
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user