296 lines
12 KiB
Python
296 lines
12 KiB
Python
import enum
|
|
from pydantic import BaseModel, field_validator
|
|
from typing import Optional, List
|
|
|
|
|
|
class RoomNameUpdateRequest(BaseModel):
|
|
new_name: str
|
|
|
|
|
|
class RoomTypes(enum.Enum):
|
|
ROOM_1 = "room_1"
|
|
ROOM_2 = "room_2"
|
|
|
|
|
|
class UpdateRoomTypeRequest(BaseModel):
|
|
type: RoomTypes
|
|
|
|
|
|
class RoomTypeResponse(BaseModel):
|
|
type: str
|
|
image_path: str
|
|
|
|
|
|
class RoomResponse(BaseModel):
|
|
id: int
|
|
user_id: int
|
|
room_name: str
|
|
room_type: RoomTypes
|
|
room_image_path: str
|
|
|
|
|
|
room_path = {
|
|
"room_1": "public/room/room_1.png",
|
|
"room_2": "public/room/room_2.png",
|
|
}
|
|
|
|
|
|
class FurnitureItem(BaseModel):
|
|
name: str
|
|
image_path: str
|
|
width: int
|
|
|
|
|
|
class Furniture(str, enum.Enum):
|
|
BLACK_LAPTOP1_0 = "검정 노트북1-01"
|
|
BLACK_LAPTOP1_180 = "검정 노트북1-1801"
|
|
BLACK_LAPTOP1_270 = "검정 노트북1-2701"
|
|
BLACK_LAPTOP1_90 = "검정 노트북1-901"
|
|
BLACK_LAPTOP2_0 = "검정 노트북2-01"
|
|
BLACK_LAPTOP2_180 = "검정 노트북2-1801"
|
|
BLACK_LAPTOP2_270 = "검정 노트북2-2701"
|
|
BLACK_LAPTOP2_90 = "검정 노트북2-901"
|
|
BLACK_LAPTOP3_0 = "검정 노트북3-01"
|
|
BLACK_LAPTOP3_180 = "검정 노트북3-1801"
|
|
BLACK_LAPTOP3_270 = "검정 노트북3-2701"
|
|
BLACK_LAPTOP3_90 = "검정 노트북3-901"
|
|
WOODEN_TABLE_90 = "나무 탁자-901"
|
|
WOODEN_TABLE_0 = "나무 탁자-01"
|
|
LAPTOP1_0 = "노트북1-01"
|
|
LAPTOP1_180 = "노트북1-1801"
|
|
LAPTOP1_270 = "노트북1-2701"
|
|
LAPTOP1_90 = "노트북1-901"
|
|
LAPTOP2_0 = "노트북2-01"
|
|
LAPTOP2_180 = "노트북2-1801"
|
|
LAPTOP2_270 = "노트북2-2701"
|
|
LAPTOP2_90 = "노트북2-901"
|
|
LAPTOP3_0 = "노트북3-01"
|
|
LAPTOP3_180 = "노트북3-1801"
|
|
LAPTOP3_270 = "노트북3-2701"
|
|
LAPTOP3_90 = "노트북3-901"
|
|
GREEN_TABLE = "녹색 탁자1"
|
|
MINI_FRIDGE_0 = "미니 냉장고-01"
|
|
MINI_FRIDGE_180 = "미니 냉장고-1801"
|
|
MINI_FRIDGE_90 = "미니 냉장고-901"
|
|
BOX_0 = "박스-01"
|
|
BOX_90 = "박스-901"
|
|
PINK_TABLE = "분홍색 탁자1"
|
|
SHELF_0 = "선반-01"
|
|
SHELF_180 = "선반-1801"
|
|
SHELF_270 = "선반-2701"
|
|
SHELF_90 = "선반-901"
|
|
TRASH_CAN_CLOSED = "쓰레기통 닫힘1"
|
|
TRASH_CAN_OPEN = "쓰레기통 열림1"
|
|
FISHBOWL_0 = "어항-01"
|
|
FISHBOWL_180 = "어항-1801"
|
|
FISHBOWL_270 = "어항-2701"
|
|
FISHBOWL_90 = "어항-901"
|
|
BEVERAGE_FRIDGE_0 = "음료 냉장고-01"
|
|
BEVERAGE_FRIDGE_180 = "음료 냉장고-1801"
|
|
BEVERAGE_FRIDGE_270 = "음료 냉장고-2701"
|
|
BEVERAGE_FRIDGE_90 = "음료 냉장고-901"
|
|
CHAIR_0 = "의자-01"
|
|
CHAIR_180 = "의자-1801"
|
|
CHAIR_270 = "의자-2701"
|
|
CHAIR_90 = "의자-901"
|
|
SMALL_SHELF_0 = "작은 선반-01"
|
|
SMALL_SHELF_180 = "작은 선반-1801"
|
|
SMALL_SHELF_270 = "작은 선반-2701"
|
|
SMALL_SHELF_90 = "작은 선반-901"
|
|
SMALL_PLANT = "작은 식물1"
|
|
BOOKSHELF_0 = "책장-01"
|
|
BOOKSHELF_180 = "책장-1801"
|
|
BOOKSHELF_270 = "책장-2701"
|
|
BOOKSHELF_90 = "책장-901"
|
|
LARGE_PLANT = "큰 식물1"
|
|
TV_0 = "티비-01"
|
|
TV_180 = "티비-1801"
|
|
TV_270 = "티비-2701"
|
|
TV_90 = "티비-901"
|
|
BLUE_TABLE = "파란색 탁자1"
|
|
GRAY_TABLE = "회색 탁자1"
|
|
WHITE_LAPTOP1_0 = "흰 노트북1-01"
|
|
WHITE_LAPTOP1_180 = "흰 노트북1-1801"
|
|
WHITE_LAPTOP1_270 = "흰 노트북1-2701"
|
|
WHITE_LAPTOP1_90 = "흰 노트북1-901"
|
|
WHITE_LAPTOP2_0 = "흰 노트북2-01"
|
|
WHITE_LAPTOP2_180 = "흰 노트북2-1801"
|
|
WHITE_LAPTOP2_270 = "흰 노트북2-2701"
|
|
WHITE_LAPTOP2_90 = "흰 노트북2-901"
|
|
WHITE_LAPTOP3_0 = "흰 노트북3-01"
|
|
WHITE_LAPTOP3_180 = "흰 노트북3-1801"
|
|
WHITE_LAPTOP3_270 = "흰 노트북3-2701"
|
|
WHITE_LAPTOP3_90 = "흰 노트북3-901"
|
|
WHITE_SHELF_0 = "흰색 선반-01"
|
|
WHITE_SHELF_180 = "흰색 선반-1801"
|
|
WHITE_SHELF_270 = "흰색 선반-2701"
|
|
WHITE_SHELF_90 = "흰색 선반-901"
|
|
WHITE_SMALL_SHELF_0 = "흰색 작은 선반-01"
|
|
WHITE_SMALL_SHELF_180 = "흰색 작은 선반-1801"
|
|
WHITE_SMALL_SHELF_270 = "흰색 작은 선반-2701"
|
|
WHITE_SMALL_SHELF_90 = "흰색 작은 선반-901"
|
|
WHITE_TABLE = "흰색 탁자1"
|
|
EMPTY = "1"
|
|
|
|
|
|
class RoomFurniturePlacement(BaseModel):
|
|
id: int
|
|
room_id: int
|
|
furniture_name: Furniture
|
|
x: int
|
|
y: int
|
|
|
|
|
|
class FurniturePlacementRequest(BaseModel):
|
|
furniture_name: Furniture
|
|
x: int
|
|
y: int
|
|
|
|
@field_validator("x", "y")
|
|
@classmethod
|
|
def validate_coordinates(cls, v):
|
|
if v < 0 or v >= 10:
|
|
raise ValueError("position must be between 0 and 10")
|
|
return v
|
|
|
|
|
|
class FurniturePlacementResponse(BaseModel):
|
|
furniture_name: Furniture
|
|
x: int
|
|
y: int
|
|
image_path: str
|
|
|
|
|
|
class RoomFurnitureResponse(BaseModel):
|
|
room: RoomResponse
|
|
furniture: List[FurniturePlacementResponse]
|
|
|
|
|
|
furniture_path = {
|
|
"검정 노트북1-01": "public/funiture/검정 노트북1-0.png",
|
|
"검정 노트북1-1801": "public/funiture/검정 노트북1-180.png",
|
|
"검정 노트북1-2701": "public/funiture/검정 노트북1-270.png",
|
|
"검정 노트북1-901": "public/funiture/검정 노트북1-90.png",
|
|
"검정 노트북2-01": "public/funiture/검정 노트북2-0.png",
|
|
"검정 노트북2-1801": "public/funiture/검정 노트북2-180.png",
|
|
"검정 노트북2-2701": "public/funiture/검정 노트북2-270.png",
|
|
"검정 노트북2-901": "public/funiture/검정 노트북2-90.png",
|
|
"검정 노트북3-01": "public/funiture/검정 노트북3-0.png",
|
|
"검정 노트북3-1801": "public/funiture/검정 노트북3-180.png",
|
|
"검정 노트북3-2701": "public/funiture/검정 노트북3-270.png",
|
|
"검정 노트북3-901": "public/funiture/검정 노트북3-90.png",
|
|
"나무 탁자-901": "public/funiture/나무 탁자-90.png",
|
|
"나무 탁자-01": "public/funiture/나무탁자-0.png",
|
|
"노트북1-01": "public/funiture/노트북1-0.png",
|
|
"노트북1-1801": "public/funiture/노트북1-180.png",
|
|
"노트북1-2701": "public/funiture/노트북1-270.png",
|
|
"노트북1-901": "public/funiture/노트북1-90.png",
|
|
"노트북2-01": "public/funiture/노트북2-0.png",
|
|
"노트북2-1801": "public/funiture/노트북2-180.png",
|
|
"노트북2-2701": "public/funiture/노트북2-270.png",
|
|
"노트북2-901": "public/funiture/노트북2-90.png",
|
|
"노트북3-01": "public/funiture/노트북3-0.png",
|
|
"노트북3-1801": "public/funiture/노트북3-180.png",
|
|
"노트북3-2701": "public/funiture/노트북3-270.png",
|
|
"노트북3-901": "public/funiture/노트북3-90.png",
|
|
"녹색 침대-02": "public/funiture/녹색 침대-0.png",
|
|
"녹색 침대-1802": "public/funiture/녹색 침대-180.png",
|
|
"녹색 침대-2702": "public/funiture/녹색 침대-270.png",
|
|
"녹색 침대-902": "public/funiture/녹색 침대-90.png",
|
|
"녹색 탁자1": "public/funiture/녹색 탁자.png",
|
|
"미니 냉장고-01": "public/funiture/미니 냉장고-0.png",
|
|
"미니 냉장고-1801": "public/funiture/미니 냉장고-180.png",
|
|
"미니 냉장고-901": "public/funiture/미니 냉장고-90.png",
|
|
"박스-01": "public/funiture/박스-0.png",
|
|
"박스-901": "public/funiture/박스-90.png",
|
|
"분홍색 탁자1": "public/funiture/분홍색 탁자.png",
|
|
"빨간 침대-02": "public/funiture/빨간 침대-0.png",
|
|
"빨간 침대-1802": "public/funiture/빨간 침대-180.png",
|
|
"빨간 침대-2702": "public/funiture/빨간 침대-270.png",
|
|
"빨간 침대-902": "public/funiture/빨간 침대-90.png",
|
|
"선반-01": "public/funiture/선반-0.png",
|
|
"선반-1801": "public/funiture/선반-180.png",
|
|
"선반-2701": "public/funiture/선반-270.png",
|
|
"선반-901": "public/funiture/선반-90.png",
|
|
"소파-02": "public/funiture/소파-0.png",
|
|
"소파-1802": "public/funiture/소파-180.png",
|
|
"소파-2702": "public/funiture/소파-270.png",
|
|
"소파-902": "public/funiture/소파-90.png",
|
|
"쓰레기통 닫힘1": "public/funiture/쓰레기통닫힘.png",
|
|
"쓰레기통 열림1": "public/funiture/쓰레기통열림.png",
|
|
"어항-01": "public/funiture/어항-0.png",
|
|
"어항-1801": "public/funiture/어항-180.png",
|
|
"어항-2701": "public/funiture/어항-270.png",
|
|
"어항-901": "public/funiture/어항-90.png",
|
|
"음료 냉장고-01": "public/funiture/음료 냉장고-0.png",
|
|
"음료 냉장고-1801": "public/funiture/음료 냉장고-180.png",
|
|
"음료 냉장고-2701": "public/funiture/음료 냉장고-270.png",
|
|
"음료 냉장고-901": "public/funiture/음료 냉장고-90.png",
|
|
"의자-01": "public/funiture/의자-0.png",
|
|
"의자-1801": "public/funiture/의자-180.png",
|
|
"의자-2701": "public/funiture/의자-270.png",
|
|
"의자-901": "public/funiture/의자-90.png",
|
|
"작은 선반-01": "public/funiture/작은 선반-0.png",
|
|
"작은 선반-1801": "public/funiture/작은 선반-180.png",
|
|
"작은 선반-2701": "public/funiture/작은 선반-270.png",
|
|
"작은 선반-901": "public/funiture/작은 선반-90.png",
|
|
"작은 식물1": "public/funiture/작은 식물.png",
|
|
"주황 침대-02": "public/funiture/주황 침대-0.png",
|
|
"주황 침대-1802": "public/funiture/주황 침대-180.png",
|
|
"주황 침대-2702": "public/funiture/주황 침대-270.png",
|
|
"주황 침대-902": "public/funiture/주황 침대-90.png",
|
|
"책장-01": "public/funiture/책장-0.png",
|
|
"책장-1801": "public/funiture/책장-180.png",
|
|
"책장-2701": "public/funiture/책장-270.png",
|
|
"책장-901": "public/funiture/책장-90.png",
|
|
"큰 식물1": "public/funiture/큰 식물.png",
|
|
"티비-01": "public/funiture/티비-0.png",
|
|
"티비-1801": "public/funiture/티비-180.png",
|
|
"티비-2701": "public/funiture/티비-270.png",
|
|
"티비-901": "public/funiture/티비-90.png",
|
|
"파란 침대-02": "public/funiture/파란 침대-0.png",
|
|
"파란 침대-1802": "public/funiture/파란 침대-180.png",
|
|
"파란 침대-2702": "public/funiture/파란 침대-270.png",
|
|
"파란 침대-902": "public/funiture/파란 침대-90.png",
|
|
"파란색 탁자1": "public/funiture/파란색 탁자.png",
|
|
"회색 탁자1": "public/funiture/회색 탁자.png",
|
|
"흰 노트북1-01": "public/funiture/흰 노트북1-0.png",
|
|
"흰 노트북1-1801": "public/funiture/흰 노트북1-180.png",
|
|
"흰 노트북1-2701": "public/funiture/흰 노트북1-270.png",
|
|
"흰 노트북1-901": "public/funiture/흰 노트북1-90.png",
|
|
"흰 노트북2-01": "public/funiture/흰 노트북2-0.png",
|
|
"흰 노트북2-1801": "public/funiture/흰 노트북2-180.png",
|
|
"흰 노트북2-2701": "public/funiture/흰 노트북2-270.png",
|
|
"흰 노트북2-901": "public/funiture/흰 노트북2-90.png",
|
|
"흰 노트북3-01": "public/funiture/흰 노트북3-0.png",
|
|
"흰 노트북3-1801": "public/funiture/흰 노트북3-180.png",
|
|
"흰 노트북3-2701": "public/funiture/흰 노트북3-270.png",
|
|
"흰 노트북3-901": "public/funiture/흰 노트북3-90.png",
|
|
"흰색 선반-01": "public/funiture/흰색 선반-0.png",
|
|
"흰색 선반-1801": "public/funiture/흰색 선반-180.png",
|
|
"흰색 선반-2701": "public/funiture/흰색 선반-270.png",
|
|
"흰색 선반-901": "public/funiture/흰색 선반-90.png",
|
|
"흰색 작은 선반-01": "public/funiture/흰색 작은 선반-0.png",
|
|
"흰색 작은 선반-1801": "public/funiture/흰색 작은 선반-180.png",
|
|
"흰색 작은 선반-2701": "public/funiture/흰색 작은 선반-270.png",
|
|
"흰색 작은 선반-901": "public/funiture/흰색 작은 선반-90.png",
|
|
"흰색 탁자1": "public/funiture/흰색 탁자.png",
|
|
"1": "1",
|
|
}
|
|
|
|
|
|
class Room:
|
|
def __init__(self, id: int, user_id: int, room_name: str, room_type: RoomTypes):
|
|
self.id = id
|
|
self.user_id = user_id
|
|
self.room_name = room_name
|
|
self.room_type = room_type
|
|
|
|
def to_response(self) -> RoomResponse:
|
|
return RoomResponse(
|
|
id=self.id,
|
|
user_id=self.user_id,
|
|
room_name=self.room_name,
|
|
room_type=self.room_type,
|
|
room_image_path=room_path[self.room_type],
|
|
)
|