58 lines
2.0 KiB
Java
58 lines
2.0 KiB
Java
package com.xuezhanmaster.room.controller;
|
|
|
|
import com.xuezhanmaster.common.api.ApiResponse;
|
|
import com.xuezhanmaster.room.dto.CreateRoomRequest;
|
|
import com.xuezhanmaster.room.dto.JoinRoomRequest;
|
|
import com.xuezhanmaster.room.dto.RoomSummaryResponse;
|
|
import com.xuezhanmaster.room.dto.ToggleReadyRequest;
|
|
import com.xuezhanmaster.room.service.RoomService;
|
|
import jakarta.validation.Valid;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
|
|
|
@RestController
|
|
@RequestMapping("/api/rooms")
|
|
public class RoomController {
|
|
|
|
private final RoomService roomService;
|
|
|
|
public RoomController(RoomService roomService) {
|
|
this.roomService = roomService;
|
|
}
|
|
|
|
@PostMapping
|
|
public ApiResponse<RoomSummaryResponse> create(@Valid @RequestBody CreateRoomRequest request) {
|
|
return ApiResponse.success(roomService.createRoom(request));
|
|
}
|
|
|
|
@GetMapping("/{roomId}")
|
|
public ApiResponse<RoomSummaryResponse> detail(@PathVariable String roomId) {
|
|
return ApiResponse.success(roomService.getRoomSummary(roomId));
|
|
}
|
|
|
|
@PostMapping("/{roomId}/join")
|
|
public ApiResponse<RoomSummaryResponse> join(
|
|
@PathVariable String roomId,
|
|
@Valid @RequestBody JoinRoomRequest request
|
|
) {
|
|
return ApiResponse.success(roomService.joinRoom(roomId, request));
|
|
}
|
|
|
|
@PostMapping("/{roomId}/ready")
|
|
public ApiResponse<RoomSummaryResponse> ready(
|
|
@PathVariable String roomId,
|
|
@Valid @RequestBody ToggleReadyRequest request
|
|
) {
|
|
return ApiResponse.success(roomService.toggleReady(roomId, request));
|
|
}
|
|
|
|
@GetMapping("/demo")
|
|
public ApiResponse<RoomSummaryResponse> demo() {
|
|
return ApiResponse.success(roomService.createDemoRoom());
|
|
}
|
|
}
|