from typing import Annotated from fastapi import APIRouter, Depends from ..dtos.house_create_request import HouseCreateRequest from ..dtos.house_create_response import HouseCreateResponse from ..dtos.houses_list_response import HouseResponse, HousesListResponse from ..models.house import House from ..models.owner import Owner from ..providers.auth_provider import AuthContext from ..repositories.house_repository import HouseRepository from ..repositories.owner_repository import OwnerRepository router = APIRouter() @router.post("") async def create_house( body: HouseCreateRequest, auth: Annotated[AuthContext, Depends()], house_repository: Annotated[HouseRepository, Depends()], owner_repository: Annotated[OwnerRepository, Depends()], ) -> HouseCreateResponse: owner = await owner_repository.get_by_user_id(auth.user.id) if not owner: new_owner = Owner(user_id=auth.user.id) await owner_repository.save(new_owner) house = House( owner_user_id=auth.user.id, address=body.address, city=body.city, country=body.country, price=body.price, description=body.description, square_feet=body.square_feet, bedrooms=body.bedrooms, bathrooms=body.bathrooms, ) await house_repository.save(house) return HouseCreateResponse(id=str(house.id)) @router.get("") async def get_all_houses( house_repository: Annotated[HouseRepository, Depends()], limit: int = 100, offset: int = 0, ) -> HousesListResponse: all_houses = await house_repository.get_all(offset=offset, limit=limit) house_responses = [ HouseResponse( id=str(house.id), description=house.description, address=house.address, city=house.city, country=house.country, price=house.price, ) for house in all_houses ] print(house_responses) return HousesListResponse(houses=house_responses)