from fastapi import APIRouter, Query, status, Depends, Response, HTTPException from backend.code.modules.settlements.controller import SettlementController from backend.code.models.responses.settlement_detail import SettlementDetailResponse from backend.code.models.requests.settlement_register import SettlementRegisterRequest from backend.code.models.requests.settlement_edit import SettlementEditRequest from backend.code.models.requests.settlement_register_done import SettlementRegisterDoneRequest routes = APIRouter(prefix="/settlements", tags=['Settlement']) controller = SettlementController() @routes.get("", status_code = status.HTTP_200_OK, response_model = list[SettlementDetailResponse]) def ListSettlements(params: str | None = Query(default = None, alias = 'query')): settlements = controller.ListSettlements(params) if settlements is None: raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST) if len(settlements) == 0: return Response(status_code = status.HTTP_204_NO_CONTENT) return settlements @routes.get("/{id}", status_code = status.HTTP_200_OK, response_model = SettlementDetailResponse) def GetSettlement(id: int): settlement = controller.SelectSettlement(id) if settlement is None: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND) return settlement @routes.post('', status_code = status.HTTP_201_CREATED, response_model = SettlementDetailResponse) def RegisterSettlement(data: SettlementRegisterRequest): created = controller.RegisterSettlement(data.Name, data.Address, data.Active) if created is None: raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST) if created == -9: raise HTTPException(status_code = status.HTTP_409_CONFLICT, detail = 'Settlement name or address exists') return created @routes.put("/{id}", status_code = status.HTTP_204_NO_CONTENT) def EditSettlement(id: str, data: SettlementEditRequest): edited = controller.EditSettlement(id, data.Name, data.Address, data.Active) if edited is None: raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST) if deleted == -10: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND) @routes.post('/done', status_code = status.HTTP_200_OK) def RegisterSettlementDone(data: SettlementRegisterDoneRequest): registered = controller. @routes.delete("/{id}", status_code = status.HTTP_204_NO_CONTENT) def DisableSettlement(id: str): deleted = controller.DeleteSettlement(id) if deleted is None: raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST) if deleted == -10: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND)