From a37f1c28341823f6029b8a49498fe19ec0b674a4 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Thu, 27 Jun 2024 01:06:33 +0200 Subject: [PATCH] feat: OpenAPI --- .../web/controller/ExchangeController.java | 22 +++++++++++++++++++ .../web/controller/UserController.java | 21 ++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/main/java/eu/ztsh/wymiana/web/controller/ExchangeController.java b/src/main/java/eu/ztsh/wymiana/web/controller/ExchangeController.java index fb0ee13..6025a9d 100644 --- a/src/main/java/eu/ztsh/wymiana/web/controller/ExchangeController.java +++ b/src/main/java/eu/ztsh/wymiana/web/controller/ExchangeController.java @@ -2,11 +2,18 @@ package eu.ztsh.wymiana.web.controller; import eu.ztsh.wymiana.exception.InsufficientFundsException; import eu.ztsh.wymiana.exception.UserNotFoundException; +import eu.ztsh.wymiana.model.User; import eu.ztsh.wymiana.service.CurrencyService; import eu.ztsh.wymiana.web.model.CurrencyExchangeRequest; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +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 jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -22,6 +29,21 @@ public class ExchangeController { private final CurrencyService currencyService; + @Operation(summary = "Perform exchange") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", + description = "Exchange performed successfully", + content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = User.class))), + @ApiResponse(responseCode = "400", + description = "Insufficient funds", + content = @Content(mediaType = MediaType.TEXT_PLAIN_VALUE)), + @ApiResponse(responseCode = "404", + description = "User not found", + content = @Content(mediaType = MediaType.TEXT_PLAIN_VALUE)), + @ApiResponse(responseCode = "500", + description = "Another error has occurred", + content = @Content(mediaType = MediaType.TEXT_PLAIN_VALUE)) + }) @PostMapping public ResponseEntity exchange(@Valid @RequestBody CurrencyExchangeRequest request) { try { diff --git a/src/main/java/eu/ztsh/wymiana/web/controller/UserController.java b/src/main/java/eu/ztsh/wymiana/web/controller/UserController.java index bca74ce..1004803 100644 --- a/src/main/java/eu/ztsh/wymiana/web/controller/UserController.java +++ b/src/main/java/eu/ztsh/wymiana/web/controller/UserController.java @@ -6,10 +6,16 @@ import eu.ztsh.wymiana.model.User; import eu.ztsh.wymiana.service.UserService; import eu.ztsh.wymiana.validation.ValidationFailedException; import eu.ztsh.wymiana.web.model.UserCreateRequest; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +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 jakarta.validation.ValidationException; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -23,10 +29,18 @@ import org.springframework.web.bind.annotation.RestController; @Validated @RestController @RequestMapping(path = "/api/user", produces = "application/json") +@Tag(name="User management", description = "Create or get user") public class UserController { private final UserService userService; + @Operation(summary = "Get user by PESEL") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "User found"), + @ApiResponse(responseCode = "400", description = "Request not valid", content = @Content), + @ApiResponse(responseCode = "404", description = "User not found", content = @Content), + @ApiResponse(responseCode = "500", description = "Another error has occurred", content = @Content) + }) @GetMapping("{pesel}") public ResponseEntity get(@PathVariable("pesel") String pesel) { try { @@ -42,6 +56,13 @@ public class UserController { } } + @Operation(summary = "Create user") + @ApiResponses(value = { + @ApiResponse(responseCode = "204", description = "User created", content = @Content), + @ApiResponse(responseCode = "400", description = "Request not valid", content = @Content(mediaType = MediaType.TEXT_PLAIN_VALUE)), + @ApiResponse(responseCode = "409", description = "User already exists", content = @Content(mediaType = MediaType.TEXT_PLAIN_VALUE)), + @ApiResponse(responseCode = "500", description = "Another error has occurred", content = @Content(mediaType = MediaType.TEXT_PLAIN_VALUE)) + }) @PostMapping public ResponseEntity create(@Valid @RequestBody UserCreateRequest request) { try {