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 HousesListResponse 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]) async 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)})