51 lines
2.5 KiB
Python
51 lines
2.5 KiB
Python
from typing import Annotated, Any
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from backend.core.config import get_app_settings
|
|
from backend.core.dependencies import is_logged_in
|
|
from backend.core.message_code import MessageCode
|
|
from backend.db.db_setup import generate_session
|
|
from backend.schemas.common import ReturnValue
|
|
from backend.schemas.house import HouseCreate
|
|
from backend.schemas.house.house import HouseUpdate, HousesListResponse, HouseResponse
|
|
from backend.schemas.user import ProfileResponse
|
|
from backend.services.house import HouseService
|
|
|
|
public_router = APIRouter(tags=["Houses: Control"])
|
|
house_service = HouseService()
|
|
settings = get_app_settings()
|
|
|
|
db_dependency = Annotated[Session, Depends(generate_session)]
|
|
current_user_token = Annotated[ProfileResponse, Depends(is_logged_in)]
|
|
|
|
@public_router.post("/create", response_model=ReturnValue[Any])
|
|
def create_house(house: HouseCreate, db: db_dependency, current_user: current_user_token) -> ReturnValue[Any]:
|
|
try:
|
|
house_service.create(db=db, house=house)
|
|
except Exception:
|
|
raise HTTPException(status_code=400, detail=MessageCode.CREATE_HOUSE_FAIL)
|
|
return ReturnValue(status=200, data=MessageCode.CREATE_HOUSE_SUCCESS)
|
|
|
|
@public_router.get("/all", response_model=ReturnValue[HousesListResponse])
|
|
def get_all_house(page: int, pageSize: int, current_user: current_user_token) -> ReturnValue[HousesListResponse]:
|
|
housesCount = house_service.get_all_count()
|
|
houses = house_service.get_all(skip=page-1, limit=pageSize)
|
|
return ReturnValue(status=200, data={'total': housesCount, 'list': list(houses)})
|
|
|
|
@public_router.get("/{house_id}", response_model=ReturnValue[HouseResponse])
|
|
def get_house_by_id(house_id: str, current_user: current_user_token) -> ReturnValue[HouseCreate]:
|
|
house = house_service.get_by_id(id=house_id)
|
|
if not house:
|
|
raise HTTPException(status_code=404, detail=MessageCode.HOUSE_NOT_FOUND)
|
|
return ReturnValue(status=200, data=house)
|
|
|
|
@public_router.put("/update", response_model=ReturnValue[HouseCreate])
|
|
def update_house(house: HouseUpdate, current_user: current_user_token, db: db_dependency) -> ReturnValue[Any]:
|
|
db_house = house_service.update(db=db, house=house)
|
|
return ReturnValue(status=200, data=db_house)
|
|
|
|
@public_router.delete("/delete/{house_id}", response_model=ReturnValue[Any])
|
|
def delete_house(house_id: str, current_user: current_user_token, db: db_dependency) -> ReturnValue[Any]:
|
|
db_house = house_service.delete(db=db, house_id=house_id)
|
|
return ReturnValue(status=200, data="Deleted")
|