110 lines
No EOL
3.8 KiB
Python
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)) |