Last Commit for solidjs
This commit is contained in:
@ -7,3 +7,4 @@ class MessageCode():
|
||||
REFRESH_TOKEN_EXPIRED: str = 'REFRESH_TOKEN_EXPIRED'
|
||||
CREATE_HOUSE_FAIL: str = 'CREATE_HOUSE_FAIL'
|
||||
CREATE_HOUSE_SUCCESS: str = 'CREATE_HOUSE_SUCCESS'
|
||||
HOUSE_NOT_FOUND: str = 'HOUSE_NOT_FOUND'
|
||||
|
@ -30,4 +30,4 @@ class Areas(SqlAlchemyBase, DeleteMixin):
|
||||
house: Mapped['Houses'] = relationship(back_populates="areas")
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.__class__.__name__}, name: {self.name}"
|
||||
return f"<{self.__class__.__name__} id={self.id} name={self.name} house_id={self.house_id}, desc={self.desc}>"
|
||||
|
@ -1,7 +1,7 @@
|
||||
from backend.db.models.houses import Houses, Areas
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from backend.schemas.house import HouseCreate
|
||||
from backend.schemas.house import HouseCreate, HouseUpdate, AreaUpdate
|
||||
|
||||
class RepositoryHouses:
|
||||
def __init__(self):
|
||||
@ -34,3 +34,45 @@ class RepositoryHouses:
|
||||
|
||||
db.refresh(db_house)
|
||||
return db_house
|
||||
|
||||
def update_area(self, db: Session, areas: list[AreaUpdate], house_id: str):
|
||||
db_house = self.get_by_id(house_id)
|
||||
if not db_house:
|
||||
return None
|
||||
try:
|
||||
db_areaId = [area.id for area in db_house.areas]
|
||||
area_update_id = [area.id for area in areas if area.id is not None]
|
||||
area_delete_id = [area_id for area_id in db_areaId if area_id not in area_update_id]
|
||||
if area_delete_id:
|
||||
self.areas.query.where(Areas.id.in_(area_delete_id)).delete()
|
||||
|
||||
for area in areas:
|
||||
area_obj = Areas(**area.dict(), house_id=house_id)
|
||||
db.merge(area_obj)
|
||||
|
||||
# areaList = [dict(**area.dict(), house_id=house_id) for area in areas]
|
||||
# db.execute(update(Areas), areaList)
|
||||
# self.areas.query.update(areaList)
|
||||
db.commit()
|
||||
except Exception:
|
||||
db.rollback()
|
||||
raise
|
||||
|
||||
|
||||
def update(self, db: Session, house: HouseUpdate):
|
||||
db_house = self.get_by_id(house.id)
|
||||
if not db_house:
|
||||
return None
|
||||
try:
|
||||
self.houses.query.where(Houses.id == house.id).update(house.dict(exclude={"id", 'areas'}, exclude_unset=True, exclude_none=True))
|
||||
db.commit()
|
||||
self.update_area(db, house.areas, house.id)
|
||||
except Exception:
|
||||
db.rollback()
|
||||
raise
|
||||
|
||||
db.refresh(db_house)
|
||||
return db_house
|
||||
|
||||
def delete(self, db: Session, house_id: str):
|
||||
pass
|
||||
|
@ -7,7 +7,7 @@ from backend.core.message_code import MessageCode
|
||||
from backend.db.db_setup import generate_session
|
||||
from backend.schemas.common import ReturnValue
|
||||
from backend.schemas.house import HouseCreate
|
||||
from backend.schemas.house.house import HousesListResponse
|
||||
from backend.schemas.house.house import HouseUpdate, HousesListResponse, HouseResponse
|
||||
from backend.schemas.user import ProfileResponse
|
||||
from backend.services.house import HouseService
|
||||
|
||||
@ -27,7 +27,19 @@ def create_house(house: HouseCreate, db: db_dependency, current_user: current_us
|
||||
return ReturnValue(status=200, data=MessageCode.CREATE_HOUSE_SUCCESS)
|
||||
|
||||
@public_router.get("/all", response_model=ReturnValue[HousesListResponse])
|
||||
async def get_all_house(page: int, pageSize: int, current_user: current_user_token) -> ReturnValue[HousesListResponse]:
|
||||
def get_all_house(page: int, pageSize: int, current_user: current_user_token) -> ReturnValue[HousesListResponse]:
|
||||
housesCount = house_service.get_all_count()
|
||||
houses = house_service.get_all(skip=page-1, limit=pageSize)
|
||||
return ReturnValue(status=200, data={'total': housesCount, 'list': list(houses)})
|
||||
|
||||
@public_router.get("/{house_id}", response_model=ReturnValue[HouseResponse])
|
||||
def get_house_by_id(house_id: str, current_user: current_user_token) -> ReturnValue[HouseCreate]:
|
||||
house = house_service.get_by_id(id=house_id)
|
||||
if not house:
|
||||
raise HTTPException(status_code=404, detail=MessageCode.HOUSE_NOT_FOUND)
|
||||
return ReturnValue(status=200, data=house)
|
||||
|
||||
@public_router.put("/update", response_model=ReturnValue[HouseCreate])
|
||||
def update_house(house: HouseUpdate, current_user: current_user_token, db: db_dependency) -> ReturnValue[Any]:
|
||||
db_house = house_service.update(db=db, house=house)
|
||||
return ReturnValue(status=200, data=db_house)
|
||||
|
@ -5,23 +5,33 @@ from pydantic import ConfigDict
|
||||
from backend.schemas.main_model import MainModel
|
||||
|
||||
class HouseBase(MainModel):
|
||||
pass
|
||||
|
||||
class AreaBase(MainModel):
|
||||
pass
|
||||
|
||||
class AreaCreate(AreaBase):
|
||||
name: str
|
||||
desc: str
|
||||
|
||||
class HouseCreate(HouseBase):
|
||||
icon: str
|
||||
name: str
|
||||
address: str
|
||||
areas: list[AreaCreate]
|
||||
|
||||
class AreaBase(MainModel):
|
||||
name: str
|
||||
desc: str
|
||||
|
||||
class AreaUpdate(AreaBase):
|
||||
id: UUID | None = None
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class HousesList(HouseCreate):
|
||||
class HouseCreate(HouseBase):
|
||||
areas: list[AreaBase]
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class HouseUpdate(HouseBase):
|
||||
id: UUID
|
||||
areas: list[AreaUpdate]
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class HouseResponse(HouseBase):
|
||||
id: UUID
|
||||
areas: list[AreaUpdate]
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class HousesList(HouseBase):
|
||||
id: UUID
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
@ -1,6 +1,6 @@
|
||||
from sqlalchemy.orm import Session
|
||||
from backend.repos import RepositoryHouses
|
||||
from backend.schemas import HouseCreate
|
||||
from backend.schemas import HouseCreate, HouseUpdate
|
||||
from backend.services._base_service import BaseService
|
||||
|
||||
class HouseService(BaseService):
|
||||
@ -13,5 +13,11 @@ class HouseService(BaseService):
|
||||
def get_all(self, skip: int = 0, limit: int = 100):
|
||||
return self.repos.get_all(skip=skip, limit=limit)
|
||||
|
||||
def get_all_count(self, skip: int = 0, limit: int = 100):
|
||||
def get_all_count(self):
|
||||
return self.repos.get_count_all()
|
||||
|
||||
def get_by_id(self, id: str):
|
||||
return self.repos.get_by_id(house_id=id)
|
||||
|
||||
def update(self, db: Session, house: HouseUpdate):
|
||||
return self.repos.update(db=db, house=house)
|
||||
|
Reference in New Issue
Block a user