You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.1 KiB
Python

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)