from typing import List from fastapi import APIRouter, HTTPException, status from fastapi.params import Query from .model import ScopeEquipment from .schema import ScopeEquipmentCreate, ScopeEquipmentPagination, ScopeEquipmentRead, ScopeEquipmentUpdate from .service import get, get_all, create, update, delete, get_by_scope_name, get_exculed_scope_name 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[ScopeEquipmentPagination]) async def get_scope_equipments(common: CommonParameters, scope_name:str = Query(None), exclude: bool = Query(False)): """Get all scope pagination.""" # return data = await get_all(db_session=common["db_session"], common=common, scope_name=scope_name, exclude=exclude) return StandardResponse( data=data, message="Data retrieved successfully", ) @router.get("/scope/{scope_name}", response_model=StandardResponse[List[ScopeEquipmentRead]]) async def get_scope_name(db_session: DbSession, scope_name: str, exclude: bool = Query(False)): if exclude: return StandardResponse(data=await get_exculed_scope_name(db_session=db_session, scope_name=scope_name), message="Data retrieved successfully") return StandardResponse(data=await get_by_scope_name(db_session=db_session, scope_name=scope_name), message="Data retrieved successfully") @router.get("/{scope_equipment_id}", response_model=StandardResponse[ScopeEquipmentRead]) async def get_scope_equipment(db_session: DbSession, scope_equipment_id: str): scope = await get(db_session=db_session, scope_equipment_id=scope_equipment_id) if not scope: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="A data with this id does not exist.", ) return StandardResponse(data=scope, message="Data retrieved successfully") @router.post("", response_model=StandardResponse[ScopeEquipmentRead]) async def create_scope_equipment(db_session: DbSession, scope__equipment_in: ScopeEquipmentCreate): scope = await create(db_session=db_session, scope__equipment_in=scope__equipment_in) return StandardResponse(data=scope, message="Data created successfully") @router.put("/{scope_equipment_id}", response_model=StandardResponse[ScopeEquipmentRead]) async def update_scope_equipment(db_session: DbSession, scope_equipment_id: str, scope__equipment_in: ScopeEquipmentUpdate): scope_equipment = await get(db_session=db_session, scope_equipment_id=scope_equipment_id) if not scope_equipment: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="A data with this id does not exist.", ) return StandardResponse(data=await update(db_session=db_session, scope_equipment=scope_equipment, scope__equipment_in=scope__equipment_in), message="Data updated successfully") @router.delete("/{scope_equipment_id}", response_model=StandardResponse[ScopeEquipmentRead]) async def delete_scope_equipment(db_session: DbSession, scope_equipment_id: str): scope_equipment = await get(db_session=db_session, scope_equipment_id=scope_equipment_id) if not scope_equipment: 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, scope_equipment_id=scope_equipment_id) return StandardResponse(message="Data deleted successfully", data=scope_equipment)