Add DTOs for owner
This commit is contained in:
parent
6f5a2f422e
commit
8c2f5acccf
7
backend/app/dtos/owner_detail_response.py
Normal file
7
backend/app/dtos/owner_detail_response.py
Normal file
@ -0,0 +1,7 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
class OwnerDetailResponse(BaseModel):
|
||||
id: str
|
||||
user_id: str
|
||||
email: str
|
||||
|
||||
9
backend/app/dtos/owner_list_response.py
Normal file
9
backend/app/dtos/owner_list_response.py
Normal file
@ -0,0 +1,9 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
class OwnerResponse(BaseModel):
|
||||
id: str
|
||||
user_id: str
|
||||
|
||||
|
||||
class OwnerListResponse(BaseModel):
|
||||
owners: list[OwnerResponse]
|
||||
@ -8,4 +8,4 @@ class House(SQLModel, table=True):
|
||||
country: str = Field()
|
||||
price: float = Field()
|
||||
description: str = Field()
|
||||
owner_id: UUID = Field(foreign_key="user.id") # TODO consider using owner.id
|
||||
owner_id: UUID = Field(foreign_key="owner.id")
|
||||
|
||||
@ -11,6 +11,11 @@ class OwnerRepository:
|
||||
def __init__(self, session: Annotated[AsyncSession, Depends(get_session)]) -> None:
|
||||
self.session = session
|
||||
|
||||
async def get_all(self, offset: int = 0, limit: int = 100):
|
||||
statement = select(Owner).offset(offset).limit(limit)
|
||||
result = await self.session.execute(statement)
|
||||
return result.scalars().all()
|
||||
|
||||
async def get_by_id(self, owner_id: UUID):
|
||||
statement = select(Owner).where(Owner.id == owner_id)
|
||||
result = await self.session.execute(statement)
|
||||
|
||||
@ -2,7 +2,9 @@ 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
|
||||
@ -10,11 +12,18 @@ 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()]) -> HouseCreateResponse:
|
||||
owner = auth.user
|
||||
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_id=owner.id,
|
||||
owner_id=auth.user.id,
|
||||
address=body.address,
|
||||
city=body.city,
|
||||
country=body.country,
|
||||
|
||||
@ -1,10 +1,31 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from typing import Annotated
|
||||
from ..repositories.owner_repository import OwnerRepository
|
||||
from ..repositories.user_repository import UserRepository
|
||||
|
||||
from ..dtos.owner_list_response import OwnerListResponse, OwnerResponse
|
||||
from ..dtos.owner_detail_response import OwnerDetailResponse
|
||||
|
||||
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()]):
|
||||
return await owner_repository.get_by_id(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
|
||||
)
|
||||
Loading…
x
Reference in New Issue
Block a user