from typing import Optional from fastapi import APIRouter, HTTPException, status, Query from .model import Yeardata from .schema import YeardataPagination, YeardataRead, YeardataCreate, YeardataUpdate from .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 router = APIRouter() @router.get("", response_model=StandardResponse[YeardataPagination]) 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=year_data, message="Data retrieved successfully", ) @router.get("/{yeardata_id}", response_model=StandardResponse[YeardataRead]) async def get_yeardata(db_session: DbSession, yeardata_id: str): yeardata = await get(db_session=db_session, yeardata_id=yeardata_id) if not yeardata: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="A data with this id does not exist.", ) return StandardResponse(data=yeardata, message="Data retrieved successfully") @router.post("", response_model=StandardResponse[YeardataRead]) 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) return StandardResponse(data=yeardata, message="Data created successfully") @router.post("/update/{yeardata_id}", response_model=StandardResponse[YeardataRead]) 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: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="A data with this id does not exist.", ) 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", ) @router.post("/delete/{yeardata_id}", response_model=StandardResponse[YeardataRead]) async def delete_yeardata(db_session: DbSession, yeardata_id: str): yeardata = await get(db_session=db_session, yeardata_id=yeardata_id) if not yeardata: 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, yeardata_id=yeardata_id) return StandardResponse(message="Data deleted successfully", data=yeardata)