From 04ffc1f8d7844e98438ac4aa365bd0e05ac30405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9fano=20Troncaro?= Date: Fri, 4 Apr 2025 13:04:44 -0300 Subject: [PATCH] refactor: base_repository.list to use Select instead of deprecated Query --- app/common/repositories/base_repository.py | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/app/common/repositories/base_repository.py b/app/common/repositories/base_repository.py index 2f48c8f..9c3e075 100644 --- a/app/common/repositories/base_repository.py +++ b/app/common/repositories/base_repository.py @@ -4,9 +4,8 @@ from fastapi.encoders import jsonable_encoder from pydantic import BaseModel -from sqlalchemy import asc, desc +from sqlalchemy import asc, desc, func, select, Select from sqlalchemy.orm import Session -from sqlalchemy.orm.query import Query from app.common.schemas.pagination_schema import ListFilter, ListResponse @@ -32,12 +31,16 @@ def get(self, db: Session, model_id: UUID) -> Optional[ModelType]: return db.query(self.model).filter(self.model.id == model_id).first() def list( - self, db: Session, list_options: ListFilter, query: Query | None = None + self, + db: Session, + list_options: ListFilter, + query: Select | None = None, ) -> ListResponse: - if not query: - query = db.query(self.model) - - total = query.count() + if query is None: + query = select(self.model) + count_query = select(func.count()).select_from(self.model) + else: + count_query = select(func.count()).select_from(query.subquery()) if list_options.order_by: column = list_options.order_by @@ -47,10 +50,12 @@ def list( query = query.order_by(by(column)) query = query.offset(list_options.page_size * (list_options.page - 1)) - query = query.limit(list_options.page_size) + + total = db.execute(count_query).scalar_one() + return ListResponse( - data=query.all(), + data=db.execute(query).scalars().all(), page=list_options.page, page_size=list_options.page_size, total=total,