51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
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)
|