50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from typing import List
|
|
|
|
from fastapi import APIRouter, HTTPException, Depends
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.infrastructure.database.dependencies import get_db
|
|
from app.core.entities.city import CityEntity
|
|
from app.core.usecases.city_service import CitiesService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/cities", response_model=List[CityEntity])
|
|
def read_cities(db: Session = Depends(get_db)):
|
|
service = CitiesService(db)
|
|
return service.get_all_cities()
|
|
|
|
|
|
@router.get("/cities/{city_id}", response_model=CityEntity)
|
|
def read_city(city_id: int, db: Session = Depends(get_db)):
|
|
service = CitiesService(db)
|
|
city = service.get_city_by_id(city_id)
|
|
if city is None:
|
|
raise HTTPException(status_code=404, detail="City not found")
|
|
return city
|
|
|
|
|
|
@router.post("/cities", response_model=CityEntity)
|
|
def create_city(city: CityEntity, db: Session = Depends(get_db)):
|
|
service = CitiesService(db)
|
|
return service.create_city(city)
|
|
|
|
|
|
@router.put("/cities/{city_id}", response_model=CityEntity)
|
|
def update_city(city_id: int, city: CityEntity, db: Session = Depends(get_db)):
|
|
service = CitiesService(db)
|
|
updated_city = service.update_city(city_id, city)
|
|
if updated_city is None:
|
|
raise HTTPException(status_code=404, detail="City not found")
|
|
return updated_city
|
|
|
|
|
|
@router.delete("/cities/{city_id}", response_model=bool)
|
|
def delete_city(city_id: int, db: Session = Depends(get_db)):
|
|
service = CitiesService(db)
|
|
success = service.delete_city(city_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="City not found")
|
|
return success
|