diff --git a/pom.xml b/pom.xml
index d716a75..7431833 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,6 +28,7 @@
3.5.4
+ 2.5.0
1.2.1
@@ -62,6 +63,11 @@
lombok
provided
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ ${openapi.version}
+
diff --git a/readme.md b/readme.md
index e4c4278..f2ce86f 100644
--- a/readme.md
+++ b/readme.md
@@ -79,7 +79,6 @@ Prosty mikroserwis stworzony na potrzeby rekrutacji
"type": "string"
},
"currencies": {
- "$comment": "TODO: Map -> List",
"type": "array",
"items": {
"$ref": "#/def/currency"
diff --git a/src/main/java/eu/ztsh/wymiana/util/UserMapper.java b/src/main/java/eu/ztsh/wymiana/util/UserMapper.java
index 09ad887..31c2a20 100644
--- a/src/main/java/eu/ztsh/wymiana/util/UserMapper.java
+++ b/src/main/java/eu/ztsh/wymiana/util/UserMapper.java
@@ -4,6 +4,7 @@ import eu.ztsh.wymiana.data.entity.CurrencyEntity;
import eu.ztsh.wymiana.data.entity.UserEntity;
import eu.ztsh.wymiana.model.User;
import eu.ztsh.wymiana.model.UserCreateRequestConfiguredWrapper;
+import eu.ztsh.wymiana.web.model.UserResponse;
import java.util.List;
@@ -19,6 +20,10 @@ public class UserMapper {
CurrencyMapper.pojoMapToEntities(pojo.currencies(), pojo.pesel()));
}
+ public static UserResponse pojoToResponse(User pojo) {
+ return new UserResponse(pojo.name(), pojo.surname(), pojo.pesel(), pojo.currencies().values().stream().toList());
+ }
+
public static UserEntity requestToEntity(UserCreateRequestConfiguredWrapper request) {
return new UserEntity(request.pesel(), request.name(), request.surname(),
List.of(new CurrencyEntity(request.pesel(), request.initialSymbol(), request.initial())));
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..39c635d 100644
--- a/src/main/java/eu/ztsh/wymiana/web/controller/ExchangeController.java
+++ b/src/main/java/eu/ztsh/wymiana/web/controller/ExchangeController.java
@@ -4,9 +4,16 @@ import eu.ztsh.wymiana.exception.InsufficientFundsException;
import eu.ztsh.wymiana.exception.UserNotFoundException;
import eu.ztsh.wymiana.service.CurrencyService;
import eu.ztsh.wymiana.web.model.CurrencyExchangeRequest;
+import eu.ztsh.wymiana.web.model.UserResponse;
+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,22 @@ 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 = UserResponse.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