fix items_per_page problem

main^2
MrWaradana 3 days ago
parent 33e85cface
commit fca4d18d2b

@ -18,9 +18,11 @@ QueryStr = constr(pattern=r"^[ -~]+$", min_length=1)
def common_parameters(
db_session: DbSession, # type: ignore
current_user: QueryStr = Query(None, alias="currentUser"), # type: ignore
current_user: Optional[str] = Query(None, alias="currentUser"), # type: ignore
current_user_snake: Optional[str] = Query(None, alias="current_user"), # type: ignore
page: int = Query(1, gt=0, lt=2147483647),
items_per_page: int = Query(5, alias="itemsPerPage", gt=-2, lt=2147483647),
items_per_page: Optional[int] = Query(None, alias="items_per_page", gt=-2, lt=2147483647),
items_per_page_camel: Optional[int] = Query(None, alias="itemsPerPage", gt=-2, lt=2147483647),
query_str: QueryStr = Query(None, alias="q"), # type: ignore
filter_spec: QueryStr = Query(None, alias="filter"), # type: ignore
sort_by: List[str] = Query([], alias="sortBy[]"),
@ -28,15 +30,23 @@ def common_parameters(
all: int = Query(0),
# role: QueryStr = Depends(get_current_role),
):
# Support both snake_case and camelCase for pagination size
final_items_per_page = items_per_page_camel if items_per_page_camel is not None else (
items_per_page if items_per_page is not None else 5
)
# Support both snake_case and camelCase for current user
final_current_user = current_user or current_user_snake
return {
"db_session": db_session,
"page": page,
"items_per_page": items_per_page,
"items_per_page": final_items_per_page,
"query_str": query_str,
"filter_spec": filter_spec,
"sort_by": sort_by,
"descending": descending,
"current_user": current_user,
"current_user": final_current_user,
# "role": role,
"all": bool(all),
}

@ -46,5 +46,4 @@ class EquipmentMasterPaginated(Pagination):
class EquipmentMasterQuery(CommonParams):
parent_id : Optional[str] = None
items_per_page : Optional[int] = 5
search : Optional[str] = None

@ -33,5 +33,4 @@ class ManpowerCostPagination(Pagination):
items: List[ManpowerCostRead] = []
class QueryParams(CommonParams):
items_per_page: Optional[int] = Field(5)
search: Optional[str] = Field(None)

@ -2,7 +2,7 @@ from datetime import datetime
from typing import List, Optional
from uuid import UUID
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, model_validator
from src.models import DefaultBase, Pagination
from src.auth.service import CurrentUser
@ -53,13 +53,26 @@ class MasterDataPagination(Pagination):
class QueryParams(DefaultBase):
items_per_page: Optional[int] = Field(
items_per_page: int = Field(
5,
ge=1,
alias="itemsPerPage",
alias="items_per_page",
description="Items per page"
)
itemsPerPage: Optional[int] = Field(
None,
ge=1,
description="Alias for items_per_page"
)
search: Optional[str] = Field(
None,
description="Search keyword"
)
@model_validator(mode="before")
@classmethod
def resolve_aliases(cls, data: any) -> any:
if isinstance(data, dict):
if "itemsPerPage" in data and data["itemsPerPage"] is not None:
data.setdefault("items_per_page", data["itemsPerPage"])
return data

@ -2,7 +2,7 @@
from datetime import datetime
from typing import Generic, List, Optional, TypeVar
import uuid
from pydantic import BaseModel, Field, SecretStr, ConfigDict
from pydantic import BaseModel, Field, SecretStr, ConfigDict, model_validator
from sqlalchemy import Column, DateTime, String, func, event
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column
@ -100,9 +100,11 @@ class StandardResponse(BaseModel, Generic[T]):
class CommonParams(DefaultBase):
# This ensures no extra query params are allowed
current_user: Optional[str] = Field(None, alias="currentUser")
current_user: Optional[str] = Field(None, alias="current_user")
currentUser: Optional[str] = Field(None, description="Alias for current_user")
page: int = Field(1, gt=0, lt=2147483647)
items_per_page: int = Field(5, gt=-2, lt=2147483647, alias="itemsPerPage")
items_per_page: int = Field(5, gt=-2, lt=2147483647, alias="items_per_page")
itemsPerPage: Optional[int] = Field(None, description="Alias for items_per_page")
query_str: Optional[str] = Field(None, alias="q")
filter_spec: Optional[str] = Field(None, alias="filter")
sort_by: List[str] = Field(default_factory=list, alias="sortBy[]")
@ -110,6 +112,16 @@ class CommonParams(DefaultBase):
exclude: List[str] = Field(default_factory=list, alias="exclude[]")
all_params: int = Field(0, alias="all")
@model_validator(mode="before")
@classmethod
def resolve_aliases(cls, data: any) -> any:
if isinstance(data, dict):
if "itemsPerPage" in data and data["itemsPerPage"] is not None:
data.setdefault("items_per_page", data["itemsPerPage"])
if "currentUser" in data and data["currentUser"] is not None:
data.setdefault("current_user", data["currentUser"])
return data
# Property to mirror your original return dict's bool conversion
@property
def is_all(self) -> bool:

@ -102,13 +102,6 @@ class PlantFSChartData(DefaultBase):
class ListQueryParams(CommonParams):
items_per_page: Optional[int] = Field(
default=5,
ge=1,
le=1000,
description="Number of items per page",
alias="itemsPerPage",
)
search: Optional[str] = Field(
default=None,
description="Search keyword",

@ -88,13 +88,6 @@ class PlantMasterDataPagination(Pagination):
class ListQueryParams(CommonParams):
items_per_page: Optional[int] = Field(
default=5,
ge=1,
le=1000,
description="Number of items per page",
alias="itemsPerPage",
)
search: Optional[str] = Field(
default=None,
description="Search keyword",

@ -54,13 +54,6 @@ class SimulationRunPayload(DefaultBase):
class ListQueryParams(CommonParams):
items_per_page: Optional[int] = Field(
default=5,
ge=1,
le=1000,
description="Number of items per page",
alias="itemsPerPage",
)
search: Optional[str] = Field(
default=None,
description="Search keyword",

Loading…
Cancel
Save