/
java56
/
Minesweeper
Обзор
Документация
Войти
/
java56
/
Minesweeper
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/mikhail/minesweeper/controller/GameController.java
68 строк
4 KB
Mikhail Gorbatenkov
29 - add validation to the data transfer object in the controller
17 фев 2025, 16:49
17 фев 2025, 16:49
fa638d3
Код
Авторство
О чём код?
package com.mikhail.minesweeper.controller; import com.mikhail.minesweeper.dto.request.GameTurnRequest; import com.mikhail.minesweeper.dto.request.NewGameRequest; import com.mikhail.minesweeper.dto.response.GameInfoResponse; import com.mikhail.minesweeper.service.GameService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @Tag(name = "Minesweeper", description = "Обработка запросов от пользователя") @Slf4j @RestController @RequestMapping("/api/v1/minesweeper") @CrossOrigin(origins = "*") public class GameController { private final GameService gameService; public GameController(GameService gameService) { this.gameService = gameService; } @Operation(summary = "Новая игра", description = "Начало новой игры") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Игра успешно создана", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = GameInfoResponse.class))}), @ApiResponse(responseCode = "400", description = "Ошибка запроса или некорректное действие", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = "{\"error\": \"Произошла непредвиденная ошибка\"}")} )}) }) @PostMapping("/new") public ResponseEntity<GameInfoResponse> createNewGame(@Valid @RequestBody NewGameRequest newGameRequest) { log.debug("Получен запрос на создание новой игры, dto = {}", newGameRequest); GameInfoResponse response = gameService.createGame(newGameRequest); log.debug("Игра создана, ответ от сервера = {}", response); return ResponseEntity.ok().body(response); } @Operation(summary = "Ход пользователя", description = "Открытие ячейки, указанной пользователем") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Ячейка успешно открыта", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = GameInfoResponse.class))}), @ApiResponse(responseCode = "400", description = "Ошибка запроса или некорректное действие", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value = "{\"error\": \"Произошла непредвиденная ошибка\"}"))}) }) @PostMapping("/turn") public ResponseEntity<GameInfoResponse> makeTurn(@Valid @RequestBody GameTurnRequest request) { log.debug("Получен запрос на открытие ячейки пользователем, dto = {}", request); GameInfoResponse response = gameService.makeMove(request); log.debug("POST-запрос успешно обработан сервером."); return ResponseEntity.ok(response); } }