2025-02-19 16:25:48 +01:00

65 lines
1.8 KiB
Python

from fastapi import APIRouter, Depends
from typing import Annotated
from ..providers.auth_provider import AuthContext
from ..repositories.house_repository import HouseRepository
from ..repositories.owner_repository import OwnerRepository
from ..models.house import House
from ..models.owner import Owner
from ..dtos.house_create_request import HouseCreateRequest
from ..dtos.house_create_response import HouseCreateResponse
from ..dtos.houses_list_response import HousesListResponse, HouseResponse
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_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,
)
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)