Add all preamble

This commit is contained in:
Jacob Windsor 2025-02-19 11:59:11 +01:00
parent e7ab94491f
commit 4aba2c5619
11 changed files with 123 additions and 9 deletions

View File

@ -0,0 +1,10 @@
from sqlmodel import SQLModel, Field
from uuid import uuid4
class House(SQLModel, table=True):
id: int = Field(primary_key=True, default_factory=uuid4),
address: str
city: str
country: str
price: float
description: str = None

View File

@ -0,0 +1,7 @@
from sqlmodel import SQLModel, Field
from uuid import uuid4
class Owner(SQLModel, table=True):
id: int = Field(default_factory=uuid4, primary_key=True)
name: str
email: str

View File

@ -5,15 +5,6 @@ class HousePredictionInput(BaseModel):
square_feet: float = Field(..., gt=0, description="Square footage of the house")
bedrooms: int = Field(..., ge=1, description="Number of bedrooms")
bathrooms: float = Field(..., gt=0, description="Number of bathrooms")
class Config:
json_schema_extra = {
"example": {
"square_feet": 2000,
"bedrooms": 3,
"bathrooms": 2.5
}
}
class HousePredictionOutput(BaseModel):
predicted_price: float

View File

@ -0,0 +1,7 @@
from sqlmodel import SQLModel, Field
class User(SQLModel, table=True):
id: int = Field(default=None, primary_key=True)
username: str = Field(unique=True, nullable=False)
email: str = Field(unique=True, nullable=False)
password_hash: str = Field(nullable=False)

View File

@ -0,0 +1,30 @@
from sqlalchemy.orm import Session
from app.models import House
class HouseRepository:
def __init__(self, db: Session):
self.db = db
def get_all(self):
return self.db.query(House).all()
def get_by_id(self, house_id: int):
return self.db.query(House).filter(House.id == house_id).first()
def create(self, house: House):
self.db.add(house)
self.db.commit()
self.db.refresh(house)
return house
def update(self, house: House):
self.db.merge(house)
self.db.commit()
return house
def delete(self, house_id: int):
house = self.db.query(House).filter(House.id == house_id).first()
if house:
self.db.delete(house)
self.db.commit()
return house

View File

@ -0,0 +1,37 @@
from sqlalchemy.orm import Session
from app.models.owner import Owner
from app.schemas.owner import OwnerCreate, OwnerUpdate
class OwnerRepository:
def __init__(self, db: Session):
self.db = db
def get(self, owner_id: int) -> Owner:
return self.db.query(Owner).filter(Owner.id == owner_id).first()
def get_all(self, skip: int = 0, limit: int = 100) -> list[Owner]:
return self.db.query(Owner).offset(skip).limit(limit).all()
def create(self, owner: OwnerCreate) -> Owner:
db_owner = Owner(**owner.dict())
self.db.add(db_owner)
self.db.commit()
self.db.refresh(db_owner)
return db_owner
def update(self, owner_id: int, owner: OwnerUpdate) -> Owner:
db_owner = self.get(owner_id)
if db_owner:
for key, value in owner.dict().items():
setattr(db_owner, key, value)
self.db.commit()
self.db.refresh(db_owner)
return db_owner
def delete(self, owner_id: int) -> Owner:
db_owner = self.get(owner_id)
if db_owner:
self.db.delete(db_owner)
self.db.commit()
return db_owner

View File

@ -0,0 +1,13 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from typing import List
from .. import models, schemas, database, repositories
router = APIRouter()
@router.get("/houses", response_model=List[schemas.House])
def list_houses(db: Session = Depends(database.get_db)):
houses = repositories.house.get_all_houses(db)
return houses

View File

@ -0,0 +1,14 @@
from fastapi import APIRouter, HTTPException, Depends
from typing import List
from app.models import House # Assuming you have a House model
from app.dtos import HouseCreate # Assuming you have a HouseCreate DTO
from app.repositories.house_repository import HouseRepository # Assuming you have a HouseRepository
router = APIRouter()
@router.post("/houses", response_model=House)
async def create_house(house: HouseCreate, house_repo: HouseRepository = Depends()):
new_house = house_repo.create(house)
if not new_house:
raise HTTPException(status_code=400, detail="House creation failed")
return new_house

View File

@ -0,0 +1,5 @@
import random
class InvestorPredictor():
def is_investor(user: User) -> bool:
return random.random() < 0.5