from typing import Annotated from fastapi import APIRouter, Depends, HTTPException from ..dtos.owner.owner_detail_response import OwnerDetailResponse from ..dtos.owner.owner_list_response import OwnerListResponse, OwnerResponse from ..repositories.owner_repository import OwnerRepository from ..repositories.user_repository import UserRepository router = APIRouter() @router.get("") async def get_owners( owner_repository: Annotated[OwnerRepository, Depends()], ) -> OwnerListResponse: owners = await owner_repository.get_all() owners_response = [ OwnerResponse(id=str(owner.id), user_id=str(owner.user_id)) for owner in owners ] return OwnerListResponse(owners=owners_response) @router.get("/{id}") async def get_owner( id: str, owner_repository: Annotated[OwnerRepository, Depends()], user_repository: Annotated[UserRepository, Depends()], ) -> OwnerDetailResponse: owner = await owner_repository.get_by_id(id) user = await user_repository.get_by_id(owner.user_id) return OwnerDetailResponse( id=str(owner.id), user_id=str(owner.user_id), email=user.email ) @router.get("/byhouse/{house_id}") async def get_owner_by_house_id( house_id: str, owner_repository: Annotated[OwnerRepository, Depends()], ) -> OwnerDetailResponse: result = await owner_repository.get_details_by_house_id(house_id) if result is None: raise HTTPException(status_code=404, detail="House or owner not found") owner = result["owner"] user = result["user"] return OwnerDetailResponse( id=str(owner.id), user_id=str(owner.user_id), email=str(user.email) )