Last Commit for solidjs

This commit is contained in:
2024-07-24 02:39:55 +00:00
parent 5eb89d3b99
commit 953edb3d0c
18 changed files with 397 additions and 93 deletions

View File

@ -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'

View File

@ -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}>"

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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)