from backend.db.models.houses import Houses, Areas from sqlalchemy.orm import Session from backend.schemas.house import HouseCreate class RepositoryHouses: def __init__(self): self.houses = Houses() self.areas = Areas() def get_all(self, skip: int = 0, limit: int = 100): return self.houses.query.filter_by(deleted_at=None).offset(skip).limit(limit).all() def get_all_areas(self, house_id: str, skip: int = 0, limit: int = 100): return self.areas.query.filter_by(deleted_at=None, house_id=house_id).offset(skip).limit(limit).all() def get_count_all(self, skip: int = 0, limit: int = 100): return self.houses.query.filter_by(deleted_at=None).offset(skip).limit(limit).count() def get_by_id(self, house_id: str): return self.houses.query.filter_by(id=house_id).one() def create(self, db: Session, house: HouseCreate): try: areas = getattr(house, "areas") db_house = Houses(**house.dict(exclude={"areas"})) for area in areas: db_house.areas.append(Areas(**area.dict())) db.add(db_house) db.commit() except Exception: db.rollback() raise db.refresh(db_house) return db_house