2025-SSF/Backend/schemas/room.py
janghanul090801 76a02076c9 2025 SSF Public
2025-09-12 14:47:48 +09:00

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],
)