This commit is contained in:
Michal Kváček
2025-09-18 22:02:25 +02:00
parent 71911c0905
commit d794208193
29 changed files with 668 additions and 523 deletions
+13 -5
View File
@@ -26,10 +26,14 @@ class BaseDataloader:
class SingleModelByIdDataloader(BaseDataloader):
async def load(self, ids: list[int]):
ids_set = {id_ for id_ in set(ids) if id_ is not None}
if not ids_set:
return [None for _ in ids]
async with async_session() as session:
query = (
self.query_builder.get_simple_query(extra_select=[self.relationship_column], include_deleted=True)
.filter(self.relationship_column.in_(set(ids)))
.filter(self.relationship_column.in_(ids_set))
.filter(*self.filters)
)
@@ -62,13 +66,13 @@ class MultiModelsDataloader(BaseDataloader):
order_by = [model.id.desc()] # defaultne radit od nejnovejsich zaznamu
self.order_by = order_by
def get_query(self, ids: list[int]):
def get_query(self, ids: set[int]):
query = (
self.query_builder.get_simple_query(
extra_select=[self.relationship_column] + self.extra_select,
order_by=self.order_by
)
.filter(self.relationship_column.in_(set(ids)))
.filter(self.relationship_column.in_(ids))
.filter(*self.filters)
)
@@ -80,8 +84,12 @@ class MultiModelsDataloader(BaseDataloader):
return query
async def load(self, ids: list[int]):
query = self.get_query(ids)
async def load(self, ids: list[int]) -> list:
ids_set = {id_ for id_ in set(ids) if id_ is not None}
if not ids_set:
return [[] for _ in ids]
query = self.get_query(ids_set)
async with async_session() as db:
data = (await db.execute(query)).all()