from typing import Optional from fastapi import APIRouter, HTTPException, status from src.auth.service import CurrentUser from src.database.core import DbSession from src.database.service import CommonParameters, search_filter_sort_paginate from src.models import StandardResponse from .model import OverhaulScope from .schema import ScopeCreate, ScopePagination, ScopeRead, ScopeUpdate from .service import create, delete, get, get_all, update router = APIRouter() @router.get("", response_model=StandardResponse[ScopePagination]) async def get_scopes(common: CommonParameters, scope_name: Optional[str] = None): """Get all scope pagination.""" # return results = await get_all(common=common, scope_name=scope_name) return StandardResponse( data=results, message="Data retrieved successfully", ) @router.get("/{overhaul_session_id}", response_model=StandardResponse[ScopeRead]) async def get_scope(db_session: DbSession, overhaul_session_id: str): scope = await get(db_session=db_session, overhaul_session_id=overhaul_session_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[ScopeRead]) async def create_scope(db_session: DbSession, scope_in: ScopeCreate): scope = await create(db_session=db_session, scope_in=scope_in) return StandardResponse(data=scope, message="Data created successfully") @router.put("/{scope_id}", response_model=StandardResponse[ScopeRead]) async def update_scope( db_session: DbSession, scope_id: str, scope_in: ScopeUpdate, current_user: CurrentUser, ): scope = await get(db_session=db_session, scope_id=scope_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=await update(db_session=db_session, scope=scope, scope_in=scope_in), message="Data updated successfully", ) @router.delete("/{scope_id}", response_model=StandardResponse[ScopeRead]) async def delete_scope(db_session: DbSession, scope_id: str): scope = await get(db_session=db_session, scope_id=scope_id) if not scope: 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_id=scope_id) return StandardResponse(message="Data deleted successfully", data=scope)