feat: house price prediction model integration
This commit is contained in:
@@ -2,15 +2,19 @@ from typing import Annotated, Literal
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from ..dtos.house_create_request import HouseCreateRequest
|
||||
from ..dtos.house_create_response import HouseCreateResponse
|
||||
from ..dtos.houses_list_response import HouseResponse, HousesListResponse
|
||||
from backend.app.dtos.house.house_create_request import HouseCreateRequest
|
||||
from backend.app.dtos.house.house_create_response import HouseCreateResponse
|
||||
from backend.app.dtos.house.house_features import HouseFeatures
|
||||
from backend.app.dtos.house.house_predict_request import HousePricePredictionRequest
|
||||
from backend.app.dtos.house.house_predict_response import HousePricePredictionResponse
|
||||
from backend.app.dtos.house.house_response import HouseResponse
|
||||
from backend.app.dtos.house.houses_list_response import HousesListResponse
|
||||
from ..models.house import House
|
||||
from ..models.owner import Owner
|
||||
from ..providers.auth_provider import AuthContext
|
||||
from ..repositories.house_repository import HouseRepository
|
||||
from ..repositories.owner_repository import OwnerRepository
|
||||
|
||||
from ..services.house_price_predictor import HousePricePredictor
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@@ -69,4 +73,22 @@ async def get_all_houses(
|
||||
for house in all_houses
|
||||
]
|
||||
|
||||
|
||||
return HousesListResponse(houses=house_responses)
|
||||
|
||||
@router.post("/predict-price")
|
||||
async def predict_house_price(
|
||||
body: HouseFeatures,
|
||||
price_predictor: Annotated[HousePricePredictor, Depends()],
|
||||
) -> HousePricePredictionResponse:
|
||||
"""
|
||||
Predict the price of a house based on its features.
|
||||
"""
|
||||
predicted_price = await price_predictor.predict_california(
|
||||
square_feet=body.square_feet,
|
||||
bedrooms=body.bedrooms,
|
||||
bathrooms=body.bathrooms
|
||||
)
|
||||
|
||||
return HousePricePredictionResponse(predicted_price=predicted_price)
|
||||
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
|
||||
from ..dtos.owner_detail_response import OwnerDetailResponse
|
||||
from ..dtos.owner_list_response import OwnerListResponse, OwnerResponse
|
||||
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()],
|
||||
@@ -22,7 +21,6 @@ async def get_owners(
|
||||
|
||||
return OwnerListResponse(owners=owners_response)
|
||||
|
||||
|
||||
@router.get("/{id}")
|
||||
async def get_owner(
|
||||
id: str,
|
||||
@@ -35,3 +33,22 @@ async def get_owner(
|
||||
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)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user