55 lines
1.6 KiB
Python

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)
)