diff --git a/src/__pycache__/__init__.cpython-311.pyc b/src/__pycache__/__init__.cpython-311.pyc index 426c248..e77fc34 100644 Binary files a/src/__pycache__/__init__.cpython-311.pyc and b/src/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/__pycache__/api.cpython-311.pyc b/src/__pycache__/api.cpython-311.pyc index dc55969..fc81f15 100644 Binary files a/src/__pycache__/api.cpython-311.pyc and b/src/__pycache__/api.cpython-311.pyc differ diff --git a/src/__pycache__/config.cpython-311.pyc b/src/__pycache__/config.cpython-311.pyc index 75cf140..3b7dbb1 100644 Binary files a/src/__pycache__/config.cpython-311.pyc and b/src/__pycache__/config.cpython-311.pyc differ diff --git a/src/__pycache__/enums.cpython-311.pyc b/src/__pycache__/enums.cpython-311.pyc index 1c7f55d..abe88c6 100644 Binary files a/src/__pycache__/enums.cpython-311.pyc and b/src/__pycache__/enums.cpython-311.pyc differ diff --git a/src/__pycache__/exceptions.cpython-311.pyc b/src/__pycache__/exceptions.cpython-311.pyc index 7d64020..ababe77 100644 Binary files a/src/__pycache__/exceptions.cpython-311.pyc and b/src/__pycache__/exceptions.cpython-311.pyc differ diff --git a/src/__pycache__/logging.cpython-311.pyc b/src/__pycache__/logging.cpython-311.pyc index d73f73c..bf15d54 100644 Binary files a/src/__pycache__/logging.cpython-311.pyc and b/src/__pycache__/logging.cpython-311.pyc differ diff --git a/src/__pycache__/main.cpython-311.pyc b/src/__pycache__/main.cpython-311.pyc index 5a613df..35f95a3 100644 Binary files a/src/__pycache__/main.cpython-311.pyc and b/src/__pycache__/main.cpython-311.pyc differ diff --git a/src/__pycache__/models.cpython-311.pyc b/src/__pycache__/models.cpython-311.pyc index a9da149..2fa6859 100644 Binary files a/src/__pycache__/models.cpython-311.pyc and b/src/__pycache__/models.cpython-311.pyc differ diff --git a/src/__pycache__/rate_limiter.cpython-311.pyc b/src/__pycache__/rate_limiter.cpython-311.pyc index 75029b1..edd79a5 100644 Binary files a/src/__pycache__/rate_limiter.cpython-311.pyc and b/src/__pycache__/rate_limiter.cpython-311.pyc differ diff --git a/src/acquisition_cost/router.py b/src/acquisition_cost/router.py index 86e201d..3e9c4cb 100644 --- a/src/acquisition_cost/router.py +++ b/src/acquisition_cost/router.py @@ -1,14 +1,15 @@ -from typing import Optional -from fastapi import APIRouter, HTTPException, status, Query +from typing import Annotated, Optional +from fastapi import APIRouter, Depends, HTTPException, status, Query +from pydantic import ValidationError from src.acquisition_cost.model import AcquisitionData -from src.acquisition_cost.schema import AcquisitionCostDataPagination, AcquisitionCostDataRead, AcquisitionCostDataCreate, AcquisitionCostDataUpdate +from src.acquisition_cost.schema import AcquisitionCostDataPagination, AcquisitionCostDataRead, AcquisitionCostDataCreate, AcquisitionCostDataUpdate, ListQueryParams from src.acquisition_cost.service import get, get_all, create, update, delete from src.database.service import CommonParameters, search_filter_sort_paginate from src.database.core import DbSession from src.auth.service import CurrentUser -from src.models import StandardResponse +from src.models import CommonParams, StandardResponse router = APIRouter() @@ -17,14 +18,13 @@ router = APIRouter() async def get_yeardatas( db_session: DbSession, common: CommonParameters, - items_per_page: Optional[int] = Query(5), - search: Optional[str] = Query(None), + params: Annotated[ListQueryParams, Query()], ): - """Get all acquisition_cost_data pagination.""" + """Get all acquisition_cost_data pagination.""" get_acquisition_cost_data = await get_all( db_session=db_session, - items_per_page=items_per_page, - search=search, + items_per_page=params.items_per_page, + search=params.search, common=common, ) # return diff --git a/src/acquisition_cost/schema.py b/src/acquisition_cost/schema.py index 4c80f8a..ec995a3 100644 --- a/src/acquisition_cost/schema.py +++ b/src/acquisition_cost/schema.py @@ -3,7 +3,7 @@ from typing import List, Optional from uuid import UUID from pydantic import Field -from src.models import DefaultBase, Pagination +from src.models import CommonParams, DefaultBase, Pagination class AcquisitionCostDataBase(DefaultBase): @@ -31,3 +31,16 @@ class AcquisitionCostDataRead(AcquisitionCostDataBase): class AcquisitionCostDataPagination(Pagination): items: List[AcquisitionCostDataRead] = [] + + +class ListQueryParams(CommonParams): + items_per_page: Optional[int] = Field( + default=5, + ge=1, + le=1000, + description="Number of items per page" + ) + search: Optional[str] = Field( + default=None, + description="Search keyword" + ) \ No newline at end of file diff --git a/src/auth/__pycache__/__init__.cpython-311.pyc b/src/auth/__pycache__/__init__.cpython-311.pyc index e42b5d5..1f96561 100644 Binary files a/src/auth/__pycache__/__init__.cpython-311.pyc and b/src/auth/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/auth/__pycache__/model.cpython-311.pyc b/src/auth/__pycache__/model.cpython-311.pyc index 628300a..6ed8b44 100644 Binary files a/src/auth/__pycache__/model.cpython-311.pyc and b/src/auth/__pycache__/model.cpython-311.pyc differ diff --git a/src/auth/__pycache__/service.cpython-311.pyc b/src/auth/__pycache__/service.cpython-311.pyc index daf1c83..80b0e7b 100644 Binary files a/src/auth/__pycache__/service.cpython-311.pyc and b/src/auth/__pycache__/service.cpython-311.pyc differ diff --git a/src/database/__pycache__/__init__.cpython-311.pyc b/src/database/__pycache__/__init__.cpython-311.pyc index 72fb57c..9e47e16 100644 Binary files a/src/database/__pycache__/__init__.cpython-311.pyc and b/src/database/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/database/__pycache__/core.cpython-311.pyc b/src/database/__pycache__/core.cpython-311.pyc index 565023f..27b7124 100644 Binary files a/src/database/__pycache__/core.cpython-311.pyc and b/src/database/__pycache__/core.cpython-311.pyc differ diff --git a/src/database/__pycache__/service.cpython-311.pyc b/src/database/__pycache__/service.cpython-311.pyc index 1744fcc..460ed97 100644 Binary files a/src/database/__pycache__/service.cpython-311.pyc and b/src/database/__pycache__/service.cpython-311.pyc differ diff --git a/src/equipment/__pycache__/__init__.cpython-311.pyc b/src/equipment/__pycache__/__init__.cpython-311.pyc index 419a16b..b02635a 100644 Binary files a/src/equipment/__pycache__/__init__.cpython-311.pyc and b/src/equipment/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/equipment/__pycache__/model.cpython-311.pyc b/src/equipment/__pycache__/model.cpython-311.pyc index 7b84e7e..b3f5ccb 100644 Binary files a/src/equipment/__pycache__/model.cpython-311.pyc and b/src/equipment/__pycache__/model.cpython-311.pyc differ diff --git a/src/equipment/__pycache__/router.cpython-311.pyc b/src/equipment/__pycache__/router.cpython-311.pyc index 5ba274e..bf2c1d1 100644 Binary files a/src/equipment/__pycache__/router.cpython-311.pyc and b/src/equipment/__pycache__/router.cpython-311.pyc differ diff --git a/src/equipment/__pycache__/schema.cpython-311.pyc b/src/equipment/__pycache__/schema.cpython-311.pyc index d9cb800..298c4d9 100644 Binary files a/src/equipment/__pycache__/schema.cpython-311.pyc and b/src/equipment/__pycache__/schema.cpython-311.pyc differ diff --git a/src/equipment/__pycache__/service.cpython-311.pyc b/src/equipment/__pycache__/service.cpython-311.pyc index c619640..e36c7b9 100644 Binary files a/src/equipment/__pycache__/service.cpython-311.pyc and b/src/equipment/__pycache__/service.cpython-311.pyc differ diff --git a/src/equipment/router.py b/src/equipment/router.py index 962643f..b4da517 100644 --- a/src/equipment/router.py +++ b/src/equipment/router.py @@ -1,4 +1,4 @@ -from typing import List, Optional +from typing import Annotated, List, Optional from fastapi import APIRouter, HTTPException, status, Query from fastapi.responses import StreamingResponse import json @@ -13,6 +13,7 @@ from src.equipment.schema import ( EquipmentTop10Pagination, EquipmentUpdate, CountRemainingLifeResponse, + ListQueryParams, ) from src.equipment.service import ( get_master_by_assetnum, @@ -34,7 +35,7 @@ from src.modules.equipment.Eac import Eac from src.database.service import CommonParameters, search_filter_sort_paginate from src.database.core import DbSession, CollectorDbSession from src.auth.service import CurrentUser, Token -from src.models import StandardResponse +from src.models import CommonParams, StandardResponse router = APIRouter() @@ -43,15 +44,14 @@ router = APIRouter() async def get_equipments( db_session: DbSession, common: CommonParameters, - items_per_page: Optional[int] = Query(5), - search: Optional[str] = Query(None), + params: Annotated[ListQueryParams, Query()], ): """Get all equipment pagination.""" # return equipment_data = await get_all( db_session=db_session, - items_per_page=items_per_page, - search=search, + items_per_page=params.items_per_page, + search=params.search, common=common, ) return StandardResponse( @@ -119,7 +119,7 @@ async def simulate_equipment(db_session: DbSession, assetnum: str): "/count-remaining-life", response_model=StandardResponse[CountRemainingLifeResponse], ) -async def get_count_remaining_life_equipment(db_session: DbSession, common: CommonParameters): +async def get_count_remaining_life_equipment(db_session: DbSession, common: CommonParameters, params: Annotated[CommonParams, Query()]): count = await get_count_remaining_life(db_session=db_session, common=common) return StandardResponse( data=count, @@ -130,7 +130,7 @@ async def get_count_remaining_life_equipment(db_session: DbSession, common: Comm "/top-10-replacement-priorities", response_model=StandardResponse[EquipmentTop10Pagination], ) -async def get_calculated_top_10_replacement_priorities(db_session: DbSession, common: CommonParameters): +async def get_calculated_top_10_replacement_priorities(db_session: DbSession, common: CommonParameters, params: Annotated[CommonParams, Query()]): equipment_data = await get_top_10_replacement_priorities(db_session=db_session, common=common) return StandardResponse( data=equipment_data, @@ -141,7 +141,7 @@ async def get_calculated_top_10_replacement_priorities(db_session: DbSession, co "/top-10-economic-life", response_model=StandardResponse[EquipmentTop10Pagination], ) -async def get_calculated_top_10_economic_life(db_session: DbSession, common: CommonParameters): +async def get_calculated_top_10_economic_life(db_session: DbSession, common: CommonParameters, params: Annotated[CommonParams, Query()]): equipment_data = await get_top_10_economic_life(db_session=db_session, common=common) return StandardResponse( data=equipment_data, diff --git a/src/equipment/schema.py b/src/equipment/schema.py index d6a6a30..897fdf3 100644 --- a/src/equipment/schema.py +++ b/src/equipment/schema.py @@ -3,7 +3,7 @@ from typing import List, Optional from uuid import UUID from pydantic import Field -from src.models import DefaultBase, Pagination +from src.models import CommonParams, DefaultBase, Pagination MAX_PRICE = 1_000_000_000_000_000 # thousands of trillion @@ -150,3 +150,16 @@ class CountRemainingLifeResponse(DefaultBase): safe: int warning: int critical: int + +class ListQueryParams(CommonParams): + items_per_page: Optional[int] = Field( + default=5, + ge=1, + le=1000, + description="Number of items per page" + ) + search: Optional[str] = Field( + default=None, + description="Search keyword" + ) + diff --git a/src/equipment_master/__pycache__/__init__.cpython-311.pyc b/src/equipment_master/__pycache__/__init__.cpython-311.pyc index 96296b7..3b9c39e 100644 Binary files a/src/equipment_master/__pycache__/__init__.cpython-311.pyc and b/src/equipment_master/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/equipment_master/__pycache__/model.cpython-311.pyc b/src/equipment_master/__pycache__/model.cpython-311.pyc index 96af68b..ab67e13 100644 Binary files a/src/equipment_master/__pycache__/model.cpython-311.pyc and b/src/equipment_master/__pycache__/model.cpython-311.pyc differ diff --git a/src/equipment_master/__pycache__/router.cpython-311.pyc b/src/equipment_master/__pycache__/router.cpython-311.pyc index 4a8bc0b..213dc4d 100644 Binary files a/src/equipment_master/__pycache__/router.cpython-311.pyc and b/src/equipment_master/__pycache__/router.cpython-311.pyc differ diff --git a/src/equipment_master/__pycache__/schema.cpython-311.pyc b/src/equipment_master/__pycache__/schema.cpython-311.pyc index f165132..92bb2e6 100644 Binary files a/src/equipment_master/__pycache__/schema.cpython-311.pyc and b/src/equipment_master/__pycache__/schema.cpython-311.pyc differ diff --git a/src/equipment_master/__pycache__/service.cpython-311.pyc b/src/equipment_master/__pycache__/service.cpython-311.pyc index 34463fa..6860b21 100644 Binary files a/src/equipment_master/__pycache__/service.cpython-311.pyc and b/src/equipment_master/__pycache__/service.cpython-311.pyc differ diff --git a/src/equipment_master/router.py b/src/equipment_master/router.py index a9844ae..a201d76 100644 --- a/src/equipment_master/router.py +++ b/src/equipment_master/router.py @@ -3,7 +3,7 @@ from typing import Annotated, List, Optional from src.models import StandardResponse from .service import get_all_master, get_master from fastapi import APIRouter, HTTPException, Query, status -from .schema import EquipmentMasterPaginated, EquipmentMasterRead +from .schema import EquipmentMasterPaginated, EquipmentMasterQuery, EquipmentMasterRead from src.database.service import search_filter_sort_paginate, CommonParameters from src.database.core import DbSession @@ -14,14 +14,12 @@ router = APIRouter() async def get_all_equipment_master_tree( db_session: DbSession, common: CommonParameters, - parent_id: Annotated[Optional[str], Query(description="Parent ID")] = None, - search: Optional[str] = Query(None), - items_per_page: Optional[int] = Query(5), + params: Annotated[EquipmentMasterQuery, Query()], ): equipment_masters = await get_all_master( - parent_id=parent_id, - search=search, - items_per_page=items_per_page, + parent_id=params.parent_id, + search=params.search, + items_per_page=params.items_per_page, db_session=db_session, common=common, ) diff --git a/src/equipment_master/schema.py b/src/equipment_master/schema.py index ed7baf1..50f3247 100644 --- a/src/equipment_master/schema.py +++ b/src/equipment_master/schema.py @@ -3,7 +3,7 @@ from typing import ForwardRef, List, Optional from uuid import UUID from pydantic import Field -from src.models import DefaultBase, Pagination +from src.models import CommonParams, DefaultBase, Pagination class EquipmentMasterBase(DefaultBase): @@ -42,3 +42,9 @@ class EquipmentMasterRead(EquipmentMasterBase): class EquipmentMasterPaginated(Pagination): items: List[EquipmentMasterRead] = [] + + +class EquipmentMasterQuery(CommonParams): + parent_id : Optional[str] = None + items_per_page : Optional[int] = 5 + search : Optional[str] = None \ No newline at end of file diff --git a/src/manpower_cost/router.py b/src/manpower_cost/router.py index 45c4d8d..6cd01ac 100644 --- a/src/manpower_cost/router.py +++ b/src/manpower_cost/router.py @@ -1,8 +1,8 @@ -from typing import Optional +from typing import Annotated, Optional from fastapi import APIRouter, HTTPException, status, Query from src.manpower_cost.model import ManpowerCost -from src.manpower_cost.schema import ManpowerCostPagination, ManpowerCostRead, ManpowerCostCreate, ManpowerCostUpdate +from src.manpower_cost.schema import ManpowerCostPagination, ManpowerCostRead, ManpowerCostCreate, ManpowerCostUpdate, QueryParams from src.manpower_cost.service import get, get_all, create, update, delete from src.database.service import CommonParameters, search_filter_sort_paginate @@ -17,14 +17,13 @@ router = APIRouter() async def get_yeardatas( db_session: DbSession, common: CommonParameters, - items_per_page: Optional[int] = Query(5), - search: Optional[str] = Query(None), + params: Annotated[QueryParams, Query()], ): """Get all acquisition_cost_data pagination.""" get_acquisition_cost_data = await get_all( db_session=db_session, - items_per_page=items_per_page, - search=search, + items_per_page=params.items_per_page, + search=params.search, common=common, ) # return diff --git a/src/manpower_cost/schema.py b/src/manpower_cost/schema.py index 0c56142..293936d 100644 --- a/src/manpower_cost/schema.py +++ b/src/manpower_cost/schema.py @@ -3,7 +3,7 @@ from typing import List, Optional from uuid import UUID from pydantic import Field -from src.models import DefaultBase, Pagination +from src.models import CommonParams, DefaultBase, Pagination class ManpowerCostBase(DefaultBase): @@ -31,3 +31,8 @@ class ManpowerCostRead(ManpowerCostBase): class ManpowerCostPagination(Pagination): items: List[ManpowerCostRead] = [] + + +class QueryParams(CommonParams): + items_per_page: Optional[int] = Field(5) + search: Optional[str] = Field(None) \ No newline at end of file diff --git a/src/manpower_master/router.py b/src/manpower_master/router.py index 45c4d8d..6cd01ac 100644 --- a/src/manpower_master/router.py +++ b/src/manpower_master/router.py @@ -1,8 +1,8 @@ -from typing import Optional +from typing import Annotated, Optional from fastapi import APIRouter, HTTPException, status, Query from src.manpower_cost.model import ManpowerCost -from src.manpower_cost.schema import ManpowerCostPagination, ManpowerCostRead, ManpowerCostCreate, ManpowerCostUpdate +from src.manpower_cost.schema import ManpowerCostPagination, ManpowerCostRead, ManpowerCostCreate, ManpowerCostUpdate, QueryParams from src.manpower_cost.service import get, get_all, create, update, delete from src.database.service import CommonParameters, search_filter_sort_paginate @@ -17,14 +17,13 @@ router = APIRouter() async def get_yeardatas( db_session: DbSession, common: CommonParameters, - items_per_page: Optional[int] = Query(5), - search: Optional[str] = Query(None), + params: Annotated[QueryParams, Query()], ): """Get all acquisition_cost_data pagination.""" get_acquisition_cost_data = await get_all( db_session=db_session, - items_per_page=items_per_page, - search=search, + items_per_page=params.items_per_page, + search=params.search, common=common, ) # return diff --git a/src/manpower_master/schema.py b/src/manpower_master/schema.py index 0c56142..24aab80 100644 --- a/src/manpower_master/schema.py +++ b/src/manpower_master/schema.py @@ -3,7 +3,7 @@ from typing import List, Optional from uuid import UUID from pydantic import Field -from src.models import DefaultBase, Pagination +from src.models import CommonParams, DefaultBase, Pagination class ManpowerCostBase(DefaultBase): @@ -31,3 +31,7 @@ class ManpowerCostRead(ManpowerCostBase): class ManpowerCostPagination(Pagination): items: List[ManpowerCostRead] = [] + +class QueryParams(CommonParams): + items_per_page: Optional[int] = Field(5) + search: Optional[str] = Field(None) \ No newline at end of file diff --git a/src/masterdata/__pycache__/__init__.cpython-311.pyc b/src/masterdata/__pycache__/__init__.cpython-311.pyc index 3239661..dfa8392 100644 Binary files a/src/masterdata/__pycache__/__init__.cpython-311.pyc and b/src/masterdata/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/masterdata/__pycache__/model.cpython-311.pyc b/src/masterdata/__pycache__/model.cpython-311.pyc index 892b12a..33963a2 100644 Binary files a/src/masterdata/__pycache__/model.cpython-311.pyc and b/src/masterdata/__pycache__/model.cpython-311.pyc differ diff --git a/src/masterdata/__pycache__/router.cpython-311.pyc b/src/masterdata/__pycache__/router.cpython-311.pyc index e6ba131..05d7126 100644 Binary files a/src/masterdata/__pycache__/router.cpython-311.pyc and b/src/masterdata/__pycache__/router.cpython-311.pyc differ diff --git a/src/masterdata/__pycache__/schema.cpython-311.pyc b/src/masterdata/__pycache__/schema.cpython-311.pyc index 9fab240..a10aa60 100644 Binary files a/src/masterdata/__pycache__/schema.cpython-311.pyc and b/src/masterdata/__pycache__/schema.cpython-311.pyc differ diff --git a/src/masterdata/__pycache__/service.cpython-311.pyc b/src/masterdata/__pycache__/service.cpython-311.pyc index 24d5f9c..6e87b5b 100644 Binary files a/src/masterdata/__pycache__/service.cpython-311.pyc and b/src/masterdata/__pycache__/service.cpython-311.pyc differ diff --git a/src/masterdata/router.py b/src/masterdata/router.py index f10682d..0784e67 100644 --- a/src/masterdata/router.py +++ b/src/masterdata/router.py @@ -1,7 +1,9 @@ -from typing import Optional, List +from typing import Annotated, Optional, List from fastapi import APIRouter, HTTPException, status, Query from sqlalchemy import Select + +from src.manpower_cost.schema import QueryParams from .model import MasterData from .schema import ( MasterDataPagination, @@ -23,15 +25,14 @@ router = APIRouter() async def get_masterdatas( db_session: DbSession, common: CommonParameters, - items_per_page: Optional[int] = Query(5), - search: Optional[str] = Query(None), + params: Annotated[QueryParams, Query()], ): """Get all documents.""" # return master_datas = await get_all( db_session=db_session, - items_per_page=items_per_page, - search=search, + items_per_page=params.items_per_page, + search=params.search, common=common, ) return StandardResponse( diff --git a/src/masterdata/schema.py b/src/masterdata/schema.py index a18df1d..015cda5 100644 --- a/src/masterdata/schema.py +++ b/src/masterdata/schema.py @@ -2,7 +2,7 @@ from datetime import datetime from typing import List, Optional from uuid import UUID -from pydantic import Field +from pydantic import BaseModel, Field from src.models import DefaultBase, Pagination from src.auth.service import CurrentUser @@ -50,3 +50,15 @@ class MasterDataRead(MasterdataBase): class MasterDataPagination(Pagination): items: List[MasterDataRead] = [] + + +class QueryParams(BaseModel): + items_per_page: Optional[int] = Field( + 5, + ge=1, + description="Items per page" + ) + search: Optional[str] = Field( + None, + description="Search keyword" + ) diff --git a/src/masterdata_simulations/router.py b/src/masterdata_simulations/router.py index b3b9661..3aae5fe 100644 --- a/src/masterdata_simulations/router.py +++ b/src/masterdata_simulations/router.py @@ -1,4 +1,4 @@ -from typing import List, Optional +from typing import Annotated, List, Optional from uuid import UUID from fastapi import APIRouter, HTTPException, Query, status @@ -12,6 +12,7 @@ from src.masterdata_simulations.schema import ( MasterDataSimulationPagination, MasterDataSimulationRead, MasterDataSimulationUpdate, + QueryParams, ) from src.masterdata_simulations.service import ( bulk_update, @@ -30,15 +31,13 @@ router = APIRouter() async def get_masterdata_simulations( db_session: DbSession, common: CommonParameters, - simulation_id: UUID = Query(..., description="Simulation identifier"), - items_per_page: Optional[int] = Query(5), - search: Optional[str] = Query(None), + params: Annotated[QueryParams, Query()], ): master_datas = await get_all( db_session=db_session, - items_per_page=items_per_page, - simulation_id=simulation_id, - search=search, + items_per_page=params.items_per_page, + simulation_id=params.simulation_id, + search=params.search, common=common, ) return StandardResponse(data=master_datas, message="Data retrieved successfully") diff --git a/src/masterdata_simulations/schema.py b/src/masterdata_simulations/schema.py index 0d5f89f..d3e2093 100644 --- a/src/masterdata_simulations/schema.py +++ b/src/masterdata_simulations/schema.py @@ -4,7 +4,7 @@ from uuid import UUID from pydantic import Field from src.masterdata.schema import MasterdataBase -from src.models import DefaultBase, Pagination +from src.models import CommonParams, DefaultBase, Pagination class MasterDataSimulationBase(MasterdataBase): @@ -38,3 +38,16 @@ class MasterDataSimulationRead(MasterDataSimulationBase): class MasterDataSimulationPagination(Pagination): items: List[MasterDataSimulationRead] = [] + + +class QueryParams(CommonParams): + simulation_id: UUID = Field( + ..., + description="Simulation identifier", + ) + items_per_page: Optional[int] = Field( + 5, + ge=1, + description="Items per page" + ) + search: Optional[str] = Field(None) \ No newline at end of file diff --git a/src/models.py b/src/models.py index 0941dce..c00e8dd 100644 --- a/src/models.py +++ b/src/models.py @@ -1,6 +1,6 @@ # src/common/models.py from datetime import datetime -from typing import Generic, Optional, TypeVar +from typing import Generic, List, Optional, TypeVar import uuid from pydantic import BaseModel, Field, SecretStr from sqlalchemy import Column, DateTime, String, func, event @@ -72,6 +72,8 @@ class DefaultBase(BaseModel): validate_assignment = True arbitrary_types_allowed = True str_strip_whitespace = True + extra = "forbid" + populate_by_name=True json_encoders = { # custom output conversion for datetime @@ -99,3 +101,21 @@ class StandardResponse(BaseModel, Generic[T]): data: Optional[T] = None message: str = "Success" status: ResponseStatus = ResponseStatus.SUCCESS + + +class CommonParams(DefaultBase): + # This ensures no extra query params are allowed + current_user: Optional[str] = Field(None, alias="currentUser") + page: int = Field(1, gt=0, lt=2147483647) + items_per_page: int = Field(5, gt=-2, lt=2147483647) + 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[]") + descending: List[bool] = Field(default_factory=list, alias="descending[]") + exclude: List[str] = Field(default_factory=list, alias="exclude[]") + all_params: int = Field(0, alias="all") + + # Property to mirror your original return dict's bool conversion + @property + def is_all(self) -> bool: + return bool(self.all_params) \ No newline at end of file diff --git a/src/modules/__pycache__/config.cpython-311.pyc b/src/modules/__pycache__/config.cpython-311.pyc index 23843b8..899fccb 100644 Binary files a/src/modules/__pycache__/config.cpython-311.pyc and b/src/modules/__pycache__/config.cpython-311.pyc differ diff --git a/src/modules/equipment/__pycache__/Eac.cpython-311.pyc b/src/modules/equipment/__pycache__/Eac.cpython-311.pyc index 88ac350..f995bec 100644 Binary files a/src/modules/equipment/__pycache__/Eac.cpython-311.pyc and b/src/modules/equipment/__pycache__/Eac.cpython-311.pyc differ diff --git a/src/modules/equipment/__pycache__/Prediksi.cpython-311.pyc b/src/modules/equipment/__pycache__/Prediksi.cpython-311.pyc index 4771647..f750b76 100644 Binary files a/src/modules/equipment/__pycache__/Prediksi.cpython-311.pyc and b/src/modules/equipment/__pycache__/Prediksi.cpython-311.pyc differ diff --git a/src/modules/equipment/__pycache__/insert_actual_data.cpython-311.pyc b/src/modules/equipment/__pycache__/insert_actual_data.cpython-311.pyc index 29b657d..96848a0 100644 Binary files a/src/modules/equipment/__pycache__/insert_actual_data.cpython-311.pyc and b/src/modules/equipment/__pycache__/insert_actual_data.cpython-311.pyc differ diff --git a/src/modules/equipment/__pycache__/run.cpython-311.pyc b/src/modules/equipment/__pycache__/run.cpython-311.pyc index ef5c1fd..7be3d8c 100644 Binary files a/src/modules/equipment/__pycache__/run.cpython-311.pyc and b/src/modules/equipment/__pycache__/run.cpython-311.pyc differ diff --git a/src/plant_masterdata/__pycache__/__init__.cpython-311.pyc b/src/plant_masterdata/__pycache__/__init__.cpython-311.pyc index 0dacd0e..4265a64 100644 Binary files a/src/plant_masterdata/__pycache__/__init__.cpython-311.pyc and b/src/plant_masterdata/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plant_masterdata/__pycache__/model.cpython-311.pyc b/src/plant_masterdata/__pycache__/model.cpython-311.pyc index 79a3193..99b6c2c 100644 Binary files a/src/plant_masterdata/__pycache__/model.cpython-311.pyc and b/src/plant_masterdata/__pycache__/model.cpython-311.pyc differ diff --git a/src/plant_masterdata/__pycache__/router.cpython-311.pyc b/src/plant_masterdata/__pycache__/router.cpython-311.pyc index d3fb3d3..56f8195 100644 Binary files a/src/plant_masterdata/__pycache__/router.cpython-311.pyc and b/src/plant_masterdata/__pycache__/router.cpython-311.pyc differ diff --git a/src/plant_masterdata/__pycache__/schema.cpython-311.pyc b/src/plant_masterdata/__pycache__/schema.cpython-311.pyc index 511e8aa..823d5e6 100644 Binary files a/src/plant_masterdata/__pycache__/schema.cpython-311.pyc and b/src/plant_masterdata/__pycache__/schema.cpython-311.pyc differ diff --git a/src/plant_masterdata/__pycache__/service.cpython-311.pyc b/src/plant_masterdata/__pycache__/service.cpython-311.pyc index 6c73eb8..3c35788 100644 Binary files a/src/plant_masterdata/__pycache__/service.cpython-311.pyc and b/src/plant_masterdata/__pycache__/service.cpython-311.pyc differ diff --git a/src/plant_transaction_data/__pycache__/__init__.cpython-311.pyc b/src/plant_transaction_data/__pycache__/__init__.cpython-311.pyc index 009eeee..d00d128 100644 Binary files a/src/plant_transaction_data/__pycache__/__init__.cpython-311.pyc and b/src/plant_transaction_data/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plant_transaction_data/__pycache__/model.cpython-311.pyc b/src/plant_transaction_data/__pycache__/model.cpython-311.pyc index e9468f9..85fbed0 100644 Binary files a/src/plant_transaction_data/__pycache__/model.cpython-311.pyc and b/src/plant_transaction_data/__pycache__/model.cpython-311.pyc differ diff --git a/src/plant_transaction_data/__pycache__/router.cpython-311.pyc b/src/plant_transaction_data/__pycache__/router.cpython-311.pyc index 1d09206..23d529e 100644 Binary files a/src/plant_transaction_data/__pycache__/router.cpython-311.pyc and b/src/plant_transaction_data/__pycache__/router.cpython-311.pyc differ diff --git a/src/plant_transaction_data/__pycache__/schema.cpython-311.pyc b/src/plant_transaction_data/__pycache__/schema.cpython-311.pyc index 79f43f8..a3ab9e9 100644 Binary files a/src/plant_transaction_data/__pycache__/schema.cpython-311.pyc and b/src/plant_transaction_data/__pycache__/schema.cpython-311.pyc differ diff --git a/src/plant_transaction_data/__pycache__/service.cpython-311.pyc b/src/plant_transaction_data/__pycache__/service.cpython-311.pyc index 9ececfd..db04765 100644 Binary files a/src/plant_transaction_data/__pycache__/service.cpython-311.pyc and b/src/plant_transaction_data/__pycache__/service.cpython-311.pyc differ diff --git a/src/yeardata/__pycache__/__init__.cpython-311.pyc b/src/yeardata/__pycache__/__init__.cpython-311.pyc index b39559f..da59015 100644 Binary files a/src/yeardata/__pycache__/__init__.cpython-311.pyc and b/src/yeardata/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/yeardata/__pycache__/model.cpython-311.pyc b/src/yeardata/__pycache__/model.cpython-311.pyc index b5483a1..a1a5bac 100644 Binary files a/src/yeardata/__pycache__/model.cpython-311.pyc and b/src/yeardata/__pycache__/model.cpython-311.pyc differ diff --git a/src/yeardata/__pycache__/router.cpython-311.pyc b/src/yeardata/__pycache__/router.cpython-311.pyc index 0d37231..7445011 100644 Binary files a/src/yeardata/__pycache__/router.cpython-311.pyc and b/src/yeardata/__pycache__/router.cpython-311.pyc differ diff --git a/src/yeardata/__pycache__/schema.cpython-311.pyc b/src/yeardata/__pycache__/schema.cpython-311.pyc index 3110d69..410f016 100644 Binary files a/src/yeardata/__pycache__/schema.cpython-311.pyc and b/src/yeardata/__pycache__/schema.cpython-311.pyc differ diff --git a/src/yeardata/__pycache__/service.cpython-311.pyc b/src/yeardata/__pycache__/service.cpython-311.pyc index 28704e8..e286aee 100644 Binary files a/src/yeardata/__pycache__/service.cpython-311.pyc and b/src/yeardata/__pycache__/service.cpython-311.pyc differ