Files
BiahadHakatonProject/db_repository/apartment_repository.py
Dmitri Shimanski e12fd15e71 סיימתי את זה
Signed-off-by: Dmitri Shimanski <dshiafeed@gmail.com>
2025-04-08 17:09:27 +03:00

68 lines
2.2 KiB
Python

import array
from typing import Optional, List
from db_repository.BaseRepositories import BaseCRUDRepository
from db_repository.schemas.apartment import ApartmentSchema
import json
class ApartmentRepository(BaseCRUDRepository):
table_name = "apartments"
schema = ApartmentSchema
def _get_columns_definition(self) -> str:
base_columns = super()._get_columns_definition()
# Добавляем кастомные поля, которые не обрабатываются автоматически
return (
"owner TEXT NOT NULL, "
"location TEXT NOT NULL, "
"rooms INTEGER NOT NULL, "
"has_mamad TEXT NOT NULL, "
"price TEXT NOT NULL, "
"accepted_regions TEXT NOT NULL, "
"is_available INTEGER NOT NULL"
)
def create(self, item: ApartmentSchema) -> int:
item_dict = item.model_dump()
return super().create(self.schema(**item_dict))
def get(self, item_id: int) -> Optional[ApartmentSchema]:
result = super().get(item_id)
if result:
result_dict = result.dict()
result_dict["accepted_regions"] = result_dict["accepted_regions"]
return ApartmentSchema(**result_dict)
return None
def search_available(
self,
region: str,
min_rooms: int = 0,
) -> List[ApartmentSchema]:
query = f"""
SELECT * FROM {self.table_name}
WHERE is_available = 1
AND rooms >= ?
"""
params = (min_rooms,)
results = self._execute(query, params, fetch=True)
return [
self._parse_result(row)
for row in results
if (region in row["accepted_regions"] or "all" in row["accepted_regions"])
]
def _parse_result(self, row: tuple) -> ApartmentSchema:
return ApartmentSchema(
id=row["id"],
owner=row["owner"],
location=row["location"],
rooms=row["rooms"],
has_mamad=row["has_mamad"],
price=row["price"],
accepted_regions=row["accepted_regions"],
is_available=bool(row["is_available"]),
)