repo user with loads filters

This commit is contained in:
IluaAir
2025-08-24 13:43:07 +03:00
parent 2dde22eb19
commit 186b497130
3 changed files with 29 additions and 4 deletions

View File

@@ -1,3 +1,5 @@
from typing import Optional
from sqlalchemy import select, update
from sqlalchemy.orm import selectinload
@@ -20,16 +22,34 @@ class UsersRepo(BaseRepo):
model = result.scalar_one()
return model
async def get_one_with_load(self, user_id: int) -> UsersORM | None:
quary = (
async def get_one_with_load(
self,
user_id: int,
tasks_limit: Optional[int] = None,
tasks_offset: int = 0
) -> UsersORM | None:
tasks_subquery = (
select(TasksORM.id)
.where(TasksORM.user_id == user_id)
)
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)
.options(
selectinload(self.model.tasks).load_only(
selectinload(
self.model.tasks.and_(TasksORM.id.in_(tasks_subquery))
).load_only(
TasksORM.id, TasksORM.title, TasksORM.due_date, TasksORM.priority
)
)
)
result = await self.session.execute(quary)
result = await self.session.execute(query)
obj = result.scalar_one_or_none()
return obj