from fastapi import APIRouter, Depends, status from sqlalchemy.orm import Session from typing import List, Optional from app.db.database import get_db from app.services.contractors import ContractorService from app.schemas.contractor import Contractor, ContractorCreate, ContractorUpdate router = APIRouter() def get_contractor_service(db: Session = Depends(get_db)) -> ContractorService: return ContractorService(db) @router.post("/", response_model=Contractor) def create_contractor( contractor: ContractorCreate, service: ContractorService = Depends(get_contractor_service) ): return service.create_contractor(contractor) @router.get("/", response_model=List[Contractor]) def read_contractors( parent_id: Optional[int] = None, only_parents: bool = False, is_active: Optional[bool] = None, service: ContractorService = Depends(get_contractor_service) ): return service.get_contractors(parent_id, only_parents, is_active) @router.get("/{contractor_id}", response_model=Contractor) def read_contractor( contractor_id: int, service: ContractorService = Depends(get_contractor_service) ): return service.get_contractor(contractor_id) @router.put("/{contractor_id}", response_model=Contractor) @router.patch("/{contractor_id}", response_model=Contractor) def update_contractor( contractor_id: int, contractor: ContractorUpdate, service: ContractorService = Depends(get_contractor_service) ): return service.update_contractor(contractor_id, contractor) @router.delete("/{contractor_id}", status_code=status.HTTP_204_NO_CONTENT) def delete_contractor( contractor_id: int, service: ContractorService = Depends(get_contractor_service) ): return service.delete_contractor(contractor_id)