sumaq/backend/app/api/v1/endpoints/contractors.py

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)