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 fastapi import APIRouter, HTTPException, status
from typing import List, Optional
from fastapi import APIRouter, HTTPException, status, Query
from .model import Equipment, MasterRecords
from .schema import EquipmentPagination, EquipmentRead, EquipmentCreate, EquipmentUpdate
@ -14,11 +14,22 @@ router = APIRouter()
@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."""
# return
equipment_datas = await get_all(
db_session=db_session,
items_per_page=items_per_page,
search=search,
common=common,
)
return StandardResponse(
data=await search_filter_sort_paginate(model=Equipment, **common),
data=equipment_datas,
message="Data retrieved successfully",
)

@ -81,5 +81,12 @@ class EquipmentRead(DefaultBase):
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):
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 src.database.service import search_filter_sort_paginate
from .model import Equipment, MasterRecords
from ..equipment_master.model import EquipmentMaster
from .schema import EquipmentCreate, EquipmentUpdate
@ -55,11 +57,21 @@ async def get(
# 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."""
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):

@ -1,8 +1,13 @@
from fastapi import APIRouter, HTTPException, status
from typing import Optional
from fastapi import APIRouter, HTTPException, status, Query
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 src.database.service import CommonParameters, search_filter_sort_paginate
@ -14,11 +19,22 @@ router = APIRouter()
@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."""
# return
master_datas = await get_all(
db_session=db_session,
items_per_page=items_per_page,
search=search,
common=common,
)
return StandardResponse(
data=await search_filter_sort_paginate(model=MasterData, **common),
data=master_datas,
message="Data retrieved successfully",
)
@ -36,7 +52,9 @@ async def get_masterdata(db_session: DbSession, masterdata_id: str):
@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 = 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])
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)
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
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])

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

@ -1,6 +1,6 @@
from sqlalchemy import Select, Delete
from src.database.service import search_filter_sort_paginate
from .model import MasterData
from .schema import MasterDataCreate, MasterDataUpdate
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()
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."""
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):
@ -31,7 +38,9 @@ async def create(*, db_session: DbSession, masterdata_in: MasterDataCreate):
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."""
data = masterdata_in.model_dump()

@ -1,5 +1,5 @@
from fastapi import APIRouter, HTTPException, status
from typing import Optional
from fastapi import APIRouter, HTTPException, status, Query
from .model import Yeardata
from .schema import YeardataPagination, YeardataRead, YeardataCreate, YeardataUpdate
@ -14,11 +14,22 @@ router = APIRouter()
@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."""
year_data = await get_all(
db_session=db_session,
items_per_page=items_per_page,
search=search,
common=common,
)
# return
return StandardResponse(
data=await search_filter_sort_paginate(model=Yeardata, **common),
data=year_data,
message="Data retrieved successfully",
)
@ -36,7 +47,9 @@ async def get_yeardata(db_session: DbSession, yeardata_id: str):
@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 = 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])
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)
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
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])

@ -1,8 +1,7 @@
from sqlalchemy import Select, Delete
from sqlalchemy import Select, Delete, cast, String
from .model import Yeardata
from .schema import YeardataCreate, YeardataUpdate
from src.database.service import search_filter_sort_paginate
from typing import Optional
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()
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."""
query = Select(Yeardata)
result = await db_session.execute(query)
return result.scalars().all()
if search:
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):
@ -31,7 +42,9 @@ async def create(*, db_session: DbSession, yeardata_in: YeardataCreate):
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."""
data = yeardata_in.model_dump()

Loading…
Cancel
Save