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

110 lines
No EOL
3.8 KiB
Python

from fastapi import APIRouter, Depends, HTTPException
from typing import List
from Backend.schemas.room import (
FurnitureItem,
RoomFurniturePlacement,
FurniturePlacementRequest,
RoomNameUpdateRequest,
UpdateRoomTypeRequest,
RoomResponse,
RoomTypeResponse,
RoomFurnitureResponse,
)
from Backend.schemas.user import User
from Backend.core.security import get_current_user
from Backend.services.room_service import RoomService
router = APIRouter(prefix="/room", tags=["room"])
room_service = RoomService()
@router.get("/catalog", response_model=List[FurnitureItem])
async def get_furniture_catalog() -> List[FurnitureItem]:
return await room_service.get_furniture_catalog()
@router.get("/layout", response_model=RoomFurnitureResponse)
async def get_my_room_layout(current_user: User = Depends(get_current_user)):
room_id = await room_service.get_or_create_room(current_user.id)
return await room_service.get_room_furnitures(room_id)
@router.get("/layout/{user_id}", response_model=RoomFurnitureResponse)
async def get_user_room_layout(user_id: int) -> RoomFurnitureResponse:
room_id = await room_service.get_or_create_room(user_id)
return await room_service.get_room_furnitures(room_id)
@router.post("/furniture")
async def place_furniture(
request: FurniturePlacementRequest, current_user: User = Depends(get_current_user)
):
room_id = await room_service.get_or_create_room(current_user.id)
try:
await room_service.place_furniture(room_id, request)
return {"message": "Furniture placed successfully"}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@router.delete("/furniture")
async def remove_furniture(
x: int, y: int, furniture_name: str, current_user: User = Depends(get_current_user)
):
room_id = await room_service.get_or_create_room(current_user.id)
await room_service.remove_furniture(room_id, x, y, furniture_name)
return {"message": "Furniture removed successfully"}
@router.put("/")
async def update_room_name(
data: RoomNameUpdateRequest, current_user: User = Depends(get_current_user)
):
try:
room_id = await room_service.get_or_create_room(current_user.id)
await room_service.update_room_name(room_id, data.new_name)
return {"message": "Room name updated successfully"}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@router.get("/")
async def get_my_room(current_user: User = Depends(get_current_user)) -> RoomResponse:
try:
room_id = await room_service.get_or_create_room(current_user.id)
return (await room_service.get_room_by_id(room_id)).to_response()
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@router.get("/types")
async def get_room_types() -> List[RoomTypeResponse]:
return await room_service.get_room_types()
@router.patch("/")
async def update_room_type(
data: UpdateRoomTypeRequest, current_user: User = Depends(get_current_user)
) -> RoomResponse:
try:
room_id = await room_service.get_or_create_room(current_user.id)
return (await room_service.update_room_type(room_id, data.type)).to_response()
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@router.get("/my")
async def get_my_furniture(current_user: User = Depends(get_current_user)):
try:
list_ = await room_service.get_user_furniture(current_user.id)
return list_
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@router.get("/{user_id}", response_model=RoomResponse)
async def get_room_by_userId(user_id: int) -> RoomResponse:
try:
room = await room_service.get_room_by_userId(user_id)
return room.to_response()
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))