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()
|
country: str = Field()
|
||||||
price: float = Field()
|
price: float = Field()
|
||||||
description: str = 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:
|
def __init__(self, session: Annotated[AsyncSession, Depends(get_session)]) -> None:
|
||||||
self.session = session
|
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):
|
async def get_by_id(self, owner_id: UUID):
|
||||||
statement = select(Owner).where(Owner.id == owner_id)
|
statement = select(Owner).where(Owner.id == owner_id)
|
||||||
result = await self.session.execute(statement)
|
result = await self.session.execute(statement)
|
||||||
|
|||||||
@ -2,7 +2,9 @@ from fastapi import APIRouter, Depends
|
|||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
from ..providers.auth_provider import AuthContext
|
from ..providers.auth_provider import AuthContext
|
||||||
from ..repositories.house_repository import HouseRepository
|
from ..repositories.house_repository import HouseRepository
|
||||||
|
from ..repositories.owner_repository import OwnerRepository
|
||||||
from ..models.house import House
|
from ..models.house import House
|
||||||
|
from ..models.owner import Owner
|
||||||
from ..dtos.house_create_request import HouseCreateRequest
|
from ..dtos.house_create_request import HouseCreateRequest
|
||||||
from ..dtos.house_create_response import HouseCreateResponse
|
from ..dtos.house_create_response import HouseCreateResponse
|
||||||
from ..dtos.houses_list_response import HousesListResponse, HouseResponse
|
from ..dtos.houses_list_response import HousesListResponse, HouseResponse
|
||||||
@ -10,11 +12,18 @@ from ..dtos.houses_list_response import HousesListResponse, HouseResponse
|
|||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@router.post("")
|
@router.post("")
|
||||||
async def create_house(body: HouseCreateRequest, auth: Annotated[AuthContext, Depends()], house_repository: Annotated[HouseRepository, Depends()]) -> HouseCreateResponse:
|
async def create_house(body: HouseCreateRequest, auth: Annotated[AuthContext, Depends()], house_repository: Annotated[HouseRepository, Depends()], owner_repository: Annotated[OwnerRepository, Depends()]) -> HouseCreateResponse:
|
||||||
owner = auth.user
|
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(
|
house = House(
|
||||||
owner_id=owner.id,
|
owner_id=auth.user.id,
|
||||||
address=body.address,
|
address=body.address,
|
||||||
city=body.city,
|
city=body.city,
|
||||||
country=body.country,
|
country=body.country,
|
||||||
|
|||||||
@ -1,10 +1,31 @@
|
|||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
from ..repositories.owner_repository import OwnerRepository
|
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 = 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}")
|
@router.get("/{id}")
|
||||||
async def get_owner(id: str, owner_repository: Annotated[OwnerRepository, Depends()]):
|
async def get_owner(id: str, owner_repository: Annotated[OwnerRepository, Depends()], user_repository: Annotated[UserRepository, Depends()]) -> OwnerDetailResponse:
|
||||||
return await owner_repository.get_by_id(id)
|
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