repo user with loads filters
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user