from typing import Optional from uuid import UUID from fastapi import APIRouter, Depends, HTTPException, Query, status from src.csrf_protect import csrf_protect from src.database.core import CollectorDbSession from src.database.service import (CommonParameters, DbSession) from src.models import StandardResponse from src.auth.access_control import require_any_role, ALLOWED_ROLES from .schema import (OverhaulActivityCreate, OverhaulActivityRead) from .service import add_multiple_equipment_to_session, get, get_all, remove_equipment_from_session router = APIRouter(dependencies=[Depends(require_any_role(*ALLOWED_ROLES))]) @router.get( "/{overhaul_session}", response_model=StandardResponse[dict] ) async def get_scope_equipments( common: CommonParameters, overhaul_session: str, collector_db: CollectorDbSession, location_tag: Optional[str] = Query(None), scope_name: Optional[str] = Query(None), ): """Get all scope activity pagination.""" data = await get_all( common=common, location_tag=location_tag, scope_name=scope_name, overhaul_session_id=overhaul_session, collector_db=collector_db, ) return StandardResponse( data=data, message="Data retrieved successfully", ) @router.post("/{overhaul_session_id}", response_model=StandardResponse[None]) async def create_overhaul_equipment( db_session: DbSession, collector_db_session: CollectorDbSession, overhaul_activty_in: OverhaulActivityCreate, overhaul_session_id: UUID, ): await add_multiple_equipment_to_session( db_session=db_session, collector_db=collector_db_session, overhaul_session_id=overhaul_session_id, location_tags=overhaul_activty_in.location_tags ) return StandardResponse(data=None, message="Data created successfully") @router.get( "/{overhaul_session}/{assetnum}", response_model=StandardResponse[OverhaulActivityRead], ) async def get_overhaul_equipment( db_session: DbSession, assetnum: str, overhaul_session ): equipment = await get( db_session=db_session, assetnum=assetnum, overhaul_session_id=overhaul_session ) if not equipment: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="A data with this id does not exist.", ) return StandardResponse(data=equipment, message="Data retrieved successfully") # @router.put( # async def update_scope( # db_session: DbSession, # scope_equipment_activity_in: OverhaulActivityUpdate, # assetnum: str, # ): # if not activity: # raise HTTPException( # return StandardResponse( # ), @router.post( "/delete/{overhaul_session}/{location_tag}", response_model=StandardResponse[None], dependencies=[Depends(csrf_protect)], ) async def delete_scope(db_session: DbSession, location_tag: str, overhaul_session:UUID): await remove_equipment_from_session(db_session=db_session, overhaul_session_id=overhaul_session, location_tag=location_tag) return StandardResponse(message="Data deleted successfully", data=None)