feat: search and items per page get all master, year and equipment data

main
MrWaradana 1 year ago
parent 2bcf55ea7f
commit bf50a26605

@ -1,5 +1,5 @@
from typing import List from typing import List, Optional
from fastapi import APIRouter, HTTPException, status from fastapi import APIRouter, HTTPException, status, Query
from .model import Equipment, MasterRecords from .model import Equipment, MasterRecords
from .schema import EquipmentPagination, EquipmentRead, EquipmentCreate, EquipmentUpdate from .schema import EquipmentPagination, EquipmentRead, EquipmentCreate, EquipmentUpdate
@ -14,11 +14,22 @@ router = APIRouter()
@router.get("", response_model=StandardResponse[EquipmentPagination]) @router.get("", response_model=StandardResponse[EquipmentPagination])
async def get_equipments(common: CommonParameters): async def get_equipments(
db_session: DbSession,
common: CommonParameters,
items_per_page: Optional[int] = Query(5),
search: Optional[str] = Query(None),
):
"""Get all equipment pagination.""" """Get all equipment pagination."""
# return # return
equipment_datas = await get_all(
db_session=db_session,
items_per_page=items_per_page,
search=search,
common=common,
)
return StandardResponse( return StandardResponse(
data=await search_filter_sort_paginate(model=Equipment, **common), data=equipment_datas,
message="Data retrieved successfully", message="Data retrieved successfully",
) )

@ -81,5 +81,12 @@ class EquipmentRead(DefaultBase):
min_seq: Optional[float] = Field(None, nullable=True) min_seq: Optional[float] = Field(None, nullable=True)
class EquipmentDataMaster(EquipmentBase):
assetnum: Optional[str] = Field(None, nullable=True)
forecasting_target_year: Optional[int] = Field(None, nullable=True)
min_eac_info: Optional[str] = Field(None, nullable=True)
harga_saat_ini: Optional[float] = Field(None, nullable=True)
class EquipmentPagination(Pagination): class EquipmentPagination(Pagination):
items: List[EquipmentRead] = [] items: List[EquipmentDataMaster] = []

@ -1,5 +1,7 @@
from sqlalchemy import Select, Delete, Float, func from sqlalchemy import Select, Delete, Float, func, cast, String
from sqlalchemy.orm import selectinload from sqlalchemy.orm import selectinload
from src.database.service import search_filter_sort_paginate
from .model import Equipment, MasterRecords from .model import Equipment, MasterRecords
from ..equipment_master.model import EquipmentMaster from ..equipment_master.model import EquipmentMaster
from .schema import EquipmentCreate, EquipmentUpdate from .schema import EquipmentCreate, EquipmentUpdate
@ -55,11 +57,21 @@ async def get(
# return result.scalars().all() # return result.scalars().all()
async def get_all(*, db_session: DbSession): async def get_all(
*, db_session: DbSession, items_per_page: int, search: str = None, common
) -> list[Equipment]:
"""Returns all documents.""" """Returns all documents."""
query = Select(Equipment) query = Select(Equipment)
result = await db_session.execute(query)
return result.scalars().all() if search:
query = query.filter(
cast(Equipment.acquisition_year, String).ilike(f"%{search}%")
| cast(Equipment.assetnum, String).ilike(f"%{search}%")
)
common["items_per_page"] = items_per_page
result = await search_filter_sort_paginate(model=query, **common)
return result
async def create(*, db_session: DbSession, equipment_in: EquipmentCreate): async def create(*, db_session: DbSession, equipment_in: EquipmentCreate):

@ -1,8 +1,13 @@
from typing import Optional
from fastapi import APIRouter, HTTPException, status from fastapi import APIRouter, HTTPException, status, Query
from .model import MasterData from .model import MasterData
from .schema import MasterDataPagination, MasterDataRead, MasterDataCreate, MasterDataUpdate from .schema import (
MasterDataPagination,
MasterDataRead,
MasterDataCreate,
MasterDataUpdate,
)
from .service import get, get_all, create, update, delete from .service import get, get_all, create, update, delete
from src.database.service import CommonParameters, search_filter_sort_paginate from src.database.service import CommonParameters, search_filter_sort_paginate
@ -14,11 +19,22 @@ router = APIRouter()
@router.get("", response_model=StandardResponse[MasterDataPagination]) @router.get("", response_model=StandardResponse[MasterDataPagination])
async def get_masterdatas(common: CommonParameters): async def get_masterdatas(
db_session: DbSession,
common: CommonParameters,
items_per_page: Optional[int] = Query(5),
search: Optional[str] = Query(None),
):
"""Get all documents.""" """Get all documents."""
# return # return
master_datas = await get_all(
db_session=db_session,
items_per_page=items_per_page,
search=search,
common=common,
)
return StandardResponse( return StandardResponse(
data=await search_filter_sort_paginate(model=MasterData, **common), data=master_datas,
message="Data retrieved successfully", message="Data retrieved successfully",
) )
@ -36,7 +52,9 @@ async def get_masterdata(db_session: DbSession, masterdata_id: str):
@router.post("", response_model=StandardResponse[MasterDataRead]) @router.post("", response_model=StandardResponse[MasterDataRead])
async def create_masterdata(db_session: DbSession, masterdata_in: MasterDataCreate, current_user: CurrentUser): async def create_masterdata(
db_session: DbSession, masterdata_in: MasterDataCreate, current_user: CurrentUser
):
masterdata_in.created_by = current_user.name masterdata_in.created_by = current_user.name
masterdata = await create(db_session=db_session, masterdata_in=masterdata_in) masterdata = await create(db_session=db_session, masterdata_in=masterdata_in)
@ -44,7 +62,12 @@ async def create_masterdata(db_session: DbSession, masterdata_in: MasterDataCrea
@router.put("/{masterdata_id}", response_model=StandardResponse[MasterDataRead]) @router.put("/{masterdata_id}", response_model=StandardResponse[MasterDataRead])
async def update_masterdata(db_session: DbSession, masterdata_id: str, masterdata_in: MasterDataUpdate, current_user: CurrentUser): async def update_masterdata(
db_session: DbSession,
masterdata_id: str,
masterdata_in: MasterDataUpdate,
current_user: CurrentUser,
):
masterdata = await get(db_session=db_session, masterdata_id=masterdata_id) masterdata = await get(db_session=db_session, masterdata_id=masterdata_id)
if not masterdata: if not masterdata:
@ -54,7 +77,12 @@ async def update_masterdata(db_session: DbSession, masterdata_id: str, masterdat
) )
masterdata_in.updated_by = current_user.name masterdata_in.updated_by = current_user.name
return StandardResponse(data=await update(db_session=db_session, masterdata=masterdata, masterdata_in=masterdata_in), message="Data updated successfully") return StandardResponse(
data=await update(
db_session=db_session, masterdata=masterdata, masterdata_in=masterdata_in
),
message="Data updated successfully",
)
@router.delete("/{masterdata_id}", response_model=StandardResponse[MasterDataRead]) @router.delete("/{masterdata_id}", response_model=StandardResponse[MasterDataRead])

@ -21,7 +21,9 @@ class MasterdataBase(DefaultBase):
class MasterDataCreate(MasterdataBase): class MasterDataCreate(MasterdataBase):
pass name: str = Field(..., nullable=True)
value_num: float= Field(..., nullable=True)
value_str: str = Field(..., nullable=True)
class MasterDataUpdate(MasterdataBase): class MasterDataUpdate(MasterdataBase):

@ -1,6 +1,6 @@
from sqlalchemy import Select, Delete from sqlalchemy import Select, Delete
from src.database.service import search_filter_sort_paginate
from .model import MasterData from .model import MasterData
from .schema import MasterDataCreate, MasterDataUpdate from .schema import MasterDataCreate, MasterDataUpdate
from typing import Optional from typing import Optional
@ -16,11 +16,18 @@ async def get(*, db_session: DbSession, masterdata_id: str) -> Optional[MasterDa
return result.scalars().one_or_none() return result.scalars().one_or_none()
async def get_all(*, db_session: DbSession): async def get_all(
*, db_session: DbSession, items_per_page: int, search: str = None, common
) -> list[MasterData]:
"""Returns all documents.""" """Returns all documents."""
query = Select(MasterData) query = Select(MasterData)
result = await db_session.execute(query)
return result.scalars().all() if search:
query = query.filter(MasterData.name.ilike(f"%{search}%"))
common["items_per_page"] = items_per_page
result = await search_filter_sort_paginate(model=query, **common)
return result
async def create(*, db_session: DbSession, masterdata_in: MasterDataCreate): async def create(*, db_session: DbSession, masterdata_in: MasterDataCreate):
@ -31,7 +38,9 @@ async def create(*, db_session: DbSession, masterdata_in: MasterDataCreate):
return masterdata return masterdata
async def update(*, db_session: DbSession, masterdata: MasterData, masterdata_in: MasterDataUpdate): async def update(
*, db_session: DbSession, masterdata: MasterData, masterdata_in: MasterDataUpdate
):
"""Updates a document.""" """Updates a document."""
data = masterdata_in.model_dump() data = masterdata_in.model_dump()

@ -1,5 +1,5 @@
from typing import Optional
from fastapi import APIRouter, HTTPException, status from fastapi import APIRouter, HTTPException, status, Query
from .model import Yeardata from .model import Yeardata
from .schema import YeardataPagination, YeardataRead, YeardataCreate, YeardataUpdate from .schema import YeardataPagination, YeardataRead, YeardataCreate, YeardataUpdate
@ -14,11 +14,22 @@ router = APIRouter()
@router.get("", response_model=StandardResponse[YeardataPagination]) @router.get("", response_model=StandardResponse[YeardataPagination])
async def get_yeardatas(common: CommonParameters): async def get_yeardatas(
db_session: DbSession,
common: CommonParameters,
items_per_page: Optional[int] = Query(5),
search: Optional[str] = Query(None),
):
"""Get all yeardata pagination.""" """Get all yeardata pagination."""
year_data = await get_all(
db_session=db_session,
items_per_page=items_per_page,
search=search,
common=common,
)
# return # return
return StandardResponse( return StandardResponse(
data=await search_filter_sort_paginate(model=Yeardata, **common), data=year_data,
message="Data retrieved successfully", message="Data retrieved successfully",
) )
@ -36,7 +47,9 @@ async def get_yeardata(db_session: DbSession, yeardata_id: str):
@router.post("", response_model=StandardResponse[YeardataRead]) @router.post("", response_model=StandardResponse[YeardataRead])
async def create_yeardata(db_session: DbSession, yeardata_in: YeardataCreate, current_user: CurrentUser): async def create_yeardata(
db_session: DbSession, yeardata_in: YeardataCreate, current_user: CurrentUser
):
yeardata_in.created_by = current_user.name yeardata_in.created_by = current_user.name
yeardata = await create(db_session=db_session, yeardata_in=yeardata_in) yeardata = await create(db_session=db_session, yeardata_in=yeardata_in)
@ -44,7 +57,12 @@ async def create_yeardata(db_session: DbSession, yeardata_in: YeardataCreate, cu
@router.put("/{yeardata_id}", response_model=StandardResponse[YeardataRead]) @router.put("/{yeardata_id}", response_model=StandardResponse[YeardataRead])
async def update_yeardata(db_session: DbSession, yeardata_id: str, yeardata_in: YeardataUpdate, current_user: CurrentUser): async def update_yeardata(
db_session: DbSession,
yeardata_id: str,
yeardata_in: YeardataUpdate,
current_user: CurrentUser,
):
yeardata = await get(db_session=db_session, yeardata_id=yeardata_id) yeardata = await get(db_session=db_session, yeardata_id=yeardata_id)
if not yeardata: if not yeardata:
@ -54,7 +72,12 @@ async def update_yeardata(db_session: DbSession, yeardata_id: str, yeardata_in:
) )
yeardata_in.updated_by = current_user.name yeardata_in.updated_by = current_user.name
return StandardResponse(data=await update(db_session=db_session, yeardata=yeardata, yeardata_in=yeardata_in), message="Data updated successfully") return StandardResponse(
data=await update(
db_session=db_session, yeardata=yeardata, yeardata_in=yeardata_in
),
message="Data updated successfully",
)
@router.delete("/{yeardata_id}", response_model=StandardResponse[YeardataRead]) @router.delete("/{yeardata_id}", response_model=StandardResponse[YeardataRead])

@ -1,8 +1,7 @@
from sqlalchemy import Select, Delete, cast, String
from sqlalchemy import Select, Delete
from .model import Yeardata from .model import Yeardata
from .schema import YeardataCreate, YeardataUpdate from .schema import YeardataCreate, YeardataUpdate
from src.database.service import search_filter_sort_paginate
from typing import Optional from typing import Optional
from src.database.core import DbSession from src.database.core import DbSession
@ -16,11 +15,23 @@ async def get(*, db_session: DbSession, yeardata_id: str) -> Optional[Yeardata]:
return result.scalars().one_or_none() return result.scalars().one_or_none()
async def get_all(*, db_session: DbSession): async def get_all(
*,
db_session: DbSession,
items_per_page: Optional[int],
search: Optional[str] = None,
common,
):
"""Returns all documents.""" """Returns all documents."""
query = Select(Yeardata) query = Select(Yeardata)
result = await db_session.execute(query) if search:
return result.scalars().all() query = query.filter(cast(Yeardata.year, String).ilike(f"%{search}%"))
common["items_per_page"] = items_per_page
results = await search_filter_sort_paginate(model=query, **common)
# return results.scalars().all()
return results
async def create(*, db_session: DbSession, yeardata_in: YeardataCreate): async def create(*, db_session: DbSession, yeardata_in: YeardataCreate):
@ -31,7 +42,9 @@ async def create(*, db_session: DbSession, yeardata_in: YeardataCreate):
return yeardata return yeardata
async def update(*, db_session: DbSession, yeardata: Yeardata, yeardata_in: YeardataUpdate): async def update(
*, db_session: DbSession, yeardata: Yeardata, yeardata_in: YeardataUpdate
):
"""Updates a document.""" """Updates a document."""
data = yeardata_in.model_dump() data = yeardata_in.model_dump()

Loading…
Cancel
Save