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, 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 CommonParams, StandardResponse router = APIRouter() @router.get("", response_model=StandardResponse[AcquisitionCostDataPagination]) async def get_yeardatas( db_session: DbSession, common: CommonParameters, params: Annotated[ListQueryParams, Query()], ): """Get all acquisition_cost_data pagination.""" get_acquisition_cost_data = await get_all( db_session=db_session, items_per_page=params.items_per_page, search=params.search, common=common, ) # return return StandardResponse( data=get_acquisition_cost_data, message="Data retrieved successfully", ) @router.get("/export-all", response_model=StandardResponse[AcquisitionCostDataPagination]) async def get_yeardatas_export_all( db_session: DbSession, common: CommonParameters, ): """Get all acquisition_cost_data for export.""" common["all"] = True get_acquisition_cost_data = await get_all( db_session=db_session, items_per_page=-1, common=common, ) return StandardResponse( data=get_acquisition_cost_data, message="All Acquisition Cost Data retrieved successfully", ) @router.get("/{acquisition_cost_data_id}", response_model=StandardResponse[AcquisitionCostDataRead]) async def get_acquisition_cost_data(db_session: DbSession, acquisition_cost_data_id: str): acquisition_cost_data = await get(db_session=db_session, acquisition_cost_data_id=acquisition_cost_data_id) if not acquisition_cost_data: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="A data with this id does not exist.", ) return StandardResponse(data=acquisition_cost_data, message="Data retrieved successfully") @router.post("", response_model=StandardResponse[AcquisitionCostDataRead]) async def create_acquisition_cost_data( db_session: DbSession, acquisition_cost_data_in: AcquisitionCostDataCreate, current_user: CurrentUser ): acquisition_cost_data_in.created_by = current_user.name acquisition_cost_data = await create(db_session=db_session, acquisition_data_in=acquisition_cost_data_in) return StandardResponse(data=acquisition_cost_data, message="Data created successfully") @router.post("/update/{acquisition_cost_data_id}", response_model=StandardResponse[AcquisitionCostDataRead]) async def update_acquisition_cost_data( db_session: DbSession, acquisition_cost_data_id: str, acquisition_cost_data_in: AcquisitionCostDataUpdate, current_user: CurrentUser, ): acquisition_cost_data = await get(db_session=db_session, acquisition_cost_data_id=acquisition_cost_data_id) if not acquisition_cost_data: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="A data with this id does not exist.", ) acquisition_cost_data_in.updated_by = current_user.name return StandardResponse( data=await update( db_session=db_session, acquisition_data=acquisition_cost_data, acquisition_data_in=acquisition_cost_data_in ), message="Data updated successfully", ) @router.post("/delete/{acquisition_cost_data_id}", response_model=StandardResponse[AcquisitionCostDataRead]) async def delete_acquisition_cost_data(db_session: DbSession, acquisition_cost_data_id: str): acquisition_cost_data = await get(db_session=db_session, acquisition_cost_data_id=acquisition_cost_data_id) if not acquisition_cost_data: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=[{"msg": "A data with this id does not exist."}], ) await delete(db_session=db_session, acquisition_cost_data_id=acquisition_cost_data_id) return StandardResponse(message="Data deleted successfully", data=acquisition_cost_data)