33from fastapi_pagination import Page
44from fastapi_pagination .ext .sqlalchemy import paginate
55from pydantic import Field
6- from sqlalchemy import ColumnElement , Select , select
6+ from sqlalchemy import ColumnElement , Select , UnaryExpression , select
77
88from futuramaapi .repositories .models import CharacterModel
99from futuramaapi .routers .services import BaseSessionService
@@ -28,8 +28,7 @@ class ListCharactersService(BaseSessionService[Page[ListCharactersResponse]]):
2828 )
2929
3030 @property
31- def statement (self ) -> Select [tuple [CharacterModel ]]:
32- statement : Select [tuple [CharacterModel ]] = select (CharacterModel )
31+ def __where (self ) -> list [ColumnElement [bool ]]:
3332 where : list [ColumnElement [bool ]] = []
3433
3534 if self .gender is not None :
@@ -53,13 +52,20 @@ def statement(self) -> Select[tuple[CharacterModel]]:
5352 if self .query is not None :
5453 where .append (CharacterModel .name .ilike (self .query ))
5554
55+ return where
56+
57+ @property
58+ def __order_by (self ) -> UnaryExpression [CharacterModel ]:
5659 order_by = CharacterModel .str_to_field (self .order_by )
5760 if self .direction == "asc" :
58- order_by = order_by .asc ()
59- else :
60- order_by = order_by .desc ()
61+ return order_by .asc ()
6162
62- return statement .where (* where ).order_by (order_by )
63+ return order_by .desc ()
64+
65+ @property
66+ def statement (self ) -> Select [tuple [CharacterModel ]]:
67+ statement : Select [tuple [CharacterModel ]] = select (CharacterModel )
68+ return statement .where (* self .__where ).order_by (self .__order_by )
6369
6470 async def process (self , * args , ** kwargs ) -> Page [ListCharactersResponse ]:
6571 return await paginate (
0 commit comments