diff --git a/java/pom.xml b/java/pom.xml index 97b1ccf4..6a6f1a92 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -20,7 +20,7 @@ Demo project for Java - 1.0.0 + 1.0.2.2-RELEASE 1.0.3 11 diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CategoryController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CategoryController.java new file mode 100644 index 00000000..6314a874 --- /dev/null +++ b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CategoryController.java @@ -0,0 +1,81 @@ +package com.amido.stacks.workloads.menu.api.v1; + +import static org.springframework.http.HttpStatus.OK; + +import com.amido.stacks.core.api.annotations.CreateAPIResponses; +import com.amido.stacks.core.api.annotations.DeleteAPIResponses; +import com.amido.stacks.core.api.annotations.UpdateAPIResponses; +import com.amido.stacks.core.api.dto.response.ResourceCreatedResponse; +import com.amido.stacks.core.api.dto.response.ResourceUpdatedResponse; +import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateCategoryRequest; +import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateCategoryRequest; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import java.util.UUID; +import javax.validation.Valid; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestAttribute; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping( + path = "/v1/menu/{id}/category", + produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8") +@RestController +public class CategoryController { + + @PostMapping + @Operation( + tags = "Category", + summary = "Create a category in the menu", + description = "Adds a category to menu", + operationId = "AddMenuCategory") + @CreateAPIResponses + ResponseEntity addMenuCategory( + @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, + @Valid @RequestBody CreateCategoryRequest body, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(new ResourceCreatedResponse(UUID.randomUUID()), HttpStatus.CREATED); + } + + @PutMapping("/{categoryId}") + @Operation( + tags = "Category", + summary = "Update a category in the menu", + description = "Update a category to menu", + operationId = "UpdateMenuCategory") + @UpdateAPIResponses + ResponseEntity updateMenuCategory( + @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, + @Parameter(description = "Category id", required = true) @PathVariable("categoryId") + UUID categoryId, + @Valid @RequestBody UpdateCategoryRequest body, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(new ResourceUpdatedResponse(UUID.randomUUID()), OK); + } + + @DeleteMapping("/{categoryId}") + @Operation( + tags = "Category", + summary = "Removes a category and its items from menu", + description = "Removes a category and its items from menu", + operationId = "DeleteCategory") + @DeleteAPIResponses + ResponseEntity deleteCategory( + @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, + @Parameter(description = "Category id", required = true) @PathVariable("categoryId") + UUID categoryId, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(OK); + } +} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateCategoryController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateCategoryController.java deleted file mode 100644 index 297debd2..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateCategoryController.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateCategoryRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -@RequestMapping("/v1/menu/{id}/category") -public interface CreateCategoryController { - - @PostMapping(consumes = "application/json", produces = "application/json; charset=utf-8") - @Operation( - tags = "Category", - summary = "Create a category in the menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Adds a category to menu", - operationId = "AddMenuCategory", - responses = { - @ApiResponse( - responseCode = "201", - description = "Resource created", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ResourceCreatedResponse.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "409", - description = "Conflict, an item already exists", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity addMenuCategory( - @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, - @Valid @RequestBody CreateCategoryRequest body, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateItemController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateItemController.java deleted file mode 100644 index 78c52c3e..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateItemController.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateItemRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -@RequestMapping("/v1/menu/{id}/category/{categoryId}/items") -public interface CreateItemController { - - @PostMapping(consumes = "application/json", produces = "application/json; charset=utf-8") - @Operation( - tags = "Item", - summary = "Add an item to an existing category in a menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Adds a menu item", - operationId = "AddMenuItem", - responses = { - @ApiResponse( - responseCode = "201", - description = "Resource created", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ResourceCreatedResponse.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "409", - description = "Conflict, an item already exists", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity addMenuItem( - @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, - @Parameter(description = "Category id", required = true) @PathVariable("categoryId") - UUID categoryId, - @Valid @RequestBody CreateItemRequest body, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateMenuController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateMenuController.java deleted file mode 100644 index c36124a1..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/CreateMenuController.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateMenuRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import javax.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -@RequestMapping("/v1/menu") -public interface CreateMenuController { - - @PostMapping(consumes = "application/json", produces = "application/json; charset=utf-8") - @Operation( - tags = "Menu", - summary = "Create a menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Adds a menu", - operationId = "CreateMenu", - responses = { - @ApiResponse( - responseCode = "201", - description = "Resource created", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ResourceCreatedResponse.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "409", - description = "Conflict, an item already exists", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity createMenu( - @Valid @RequestBody CreateMenuRequest body, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteCategoryController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteCategoryController.java deleted file mode 100644 index b0bb5961..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteCategoryController.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestMapping; - -/** @author ArathyKrishna */ -@RequestMapping("/v1/menu/{id}/category/{categoryId}") -public interface DeleteCategoryController { - - @DeleteMapping(produces = "application/json; charset=utf-8") - @Operation( - tags = "Category", - summary = "Removes a category and its items from menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Removes a category and its items from menu", - operationId = "DeleteCategory", - responses = { - @ApiResponse( - responseCode = "200", - description = "Success", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse( - responseCode = "204", - description = "No Content", - content = @Content(schema = @Schema(hidden = true))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "409", - description = "Conflict, an item already exists", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity deleteCategory( - @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, - @Parameter(description = "Category id", required = true) @PathVariable("categoryId") - UUID categoryId, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteItemController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteItemController.java deleted file mode 100644 index 538b986d..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteItemController.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestMapping; - -/** @author ArathyKrishna */ -@RequestMapping("/v1/menu/{id}/category/{categoryId}/items/{itemId}") -public interface DeleteItemController { - - @DeleteMapping(produces = "application/json; charset=utf-8") - @Operation( - tags = "Item", - summary = "Removes an item from menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Removes an item from menu", - operationId = "DeleteMenuItem", - responses = { - @ApiResponse( - responseCode = "200", - description = "Success", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse( - responseCode = "204", - description = "No Content", - content = @Content(schema = @Schema(hidden = true))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "Resource not found", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity deleteItem( - @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, - @Parameter(description = "Category id", required = true) @PathVariable("categoryId") - UUID categoryId, - @Parameter(description = "Item id", required = true) @PathVariable("itemId") UUID itemId, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteMenuController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteMenuController.java deleted file mode 100644 index 70226a67..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/DeleteMenuController.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestMapping; - -/** - * Controller for Deleting a menu - * - * @author ArathyKrishna - */ -@RequestMapping("/v1/menu/{id}") -public interface DeleteMenuController { - - @DeleteMapping(produces = "application/json; charset=utf-8") - @Operation( - tags = "Menu", - summary = "Removes a Menu with all it's Categories and Items", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Remove a menu from a restaurant", - operationId = "DeleteMenu", - responses = { - @ApiResponse( - responseCode = "200", - description = "Success", - content = @Content(mediaType = "application/json", schema = @Schema(hidden = true))), - @ApiResponse( - responseCode = "204", - description = "No Content", - content = @Content(schema = @Schema(hidden = true))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "Resource not found", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity deleteMenu( - @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/ItemController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/ItemController.java new file mode 100644 index 00000000..836be767 --- /dev/null +++ b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/ItemController.java @@ -0,0 +1,85 @@ +package com.amido.stacks.workloads.menu.api.v1; + +import static org.springframework.http.HttpStatus.OK; + +import com.amido.stacks.core.api.annotations.CreateAPIResponses; +import com.amido.stacks.core.api.annotations.DeleteAPIResponses; +import com.amido.stacks.core.api.annotations.UpdateAPIResponses; +import com.amido.stacks.core.api.dto.response.ResourceCreatedResponse; +import com.amido.stacks.core.api.dto.response.ResourceUpdatedResponse; +import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateItemRequest; +import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateItemRequest; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import java.util.UUID; +import javax.validation.Valid; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestAttribute; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping( + path = "/v1/menu/{id}/category/{categoryId}/items", + produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8") +@RestController +public class ItemController { + + @PostMapping + @Operation( + tags = "Item", + summary = "Add an item to an existing category in a menu", + description = "Adds a menu item", + operationId = "AddMenuItem") + @CreateAPIResponses + ResponseEntity addMenuItem( + @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, + @Parameter(description = "Category id", required = true) @PathVariable("categoryId") + UUID categoryId, + @Valid @RequestBody CreateItemRequest body, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(new ResourceCreatedResponse(UUID.randomUUID()), HttpStatus.CREATED); + } + + @PutMapping("/{itemId}") + @Operation( + tags = "Item", + summary = "Update an item in the menu", + description = "Update an item in the menu", + operationId = "UpdateMenuItem") + @UpdateAPIResponses + ResponseEntity updateItem( + @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, + @Parameter(description = "Category id", required = true) @PathVariable("categoryId") + UUID categoryId, + @Parameter(description = "Item id", required = true) @PathVariable("itemId") UUID itemId, + @Valid @RequestBody UpdateItemRequest body, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(new ResourceUpdatedResponse(UUID.randomUUID()), HttpStatus.OK); + } + + @DeleteMapping("/{itemId}") + @Operation( + tags = "Item", + summary = "Removes an item from menu", + description = "Removes an item from menu", + operationId = "DeleteMenuItem") + @DeleteAPIResponses + ResponseEntity deleteItem( + @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, + @Parameter(description = "Category id", required = true) @PathVariable("categoryId") + UUID categoryId, + @Parameter(description = "Item id", required = true) @PathVariable("itemId") UUID itemId, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(OK); + } +} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/MenuController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/MenuController.java new file mode 100644 index 00000000..760ef69f --- /dev/null +++ b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/MenuController.java @@ -0,0 +1,181 @@ +package com.amido.stacks.workloads.menu.api.v1; + +import static org.springframework.http.HttpStatus.OK; + +import com.amido.stacks.core.api.annotations.CreateAPIResponses; +import com.amido.stacks.core.api.annotations.DeleteAPIResponses; +import com.amido.stacks.core.api.annotations.ReadAPIResponses; +import com.amido.stacks.core.api.annotations.SearchAPIResponses; +import com.amido.stacks.core.api.annotations.UpdateAPIResponses; +import com.amido.stacks.core.api.dto.response.ResourceCreatedResponse; +import com.amido.stacks.core.api.dto.response.ResourceUpdatedResponse; +import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateMenuRequest; +import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateMenuRequest; +import com.amido.stacks.workloads.menu.api.v1.dto.response.MenuDTO; +import com.amido.stacks.workloads.menu.api.v1.dto.response.SearchMenuResult; +import com.amido.stacks.workloads.menu.domain.Category; +import com.amido.stacks.workloads.menu.domain.Item; +import com.amido.stacks.workloads.menu.domain.Menu; +import com.amido.stacks.workloads.menu.mappers.MenuMapper; +import com.amido.stacks.workloads.menu.mappers.SearchMenuResultItemMapper; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +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 java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; +import javax.validation.Valid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestAttribute; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(path = "/v1/menu", produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8") +@RestController +public class MenuController { + + Logger logger = LoggerFactory.getLogger(MenuController.class); + + @Autowired private MenuMapper menuMapper; + + @Autowired private SearchMenuResultItemMapper searchMenuResultItemMapper; + + @PostMapping + @Operation( + tags = "Menu", + summary = "Create a menu", + description = "Adds a menu", + operationId = "CreateMenu") + @CreateAPIResponses + ResponseEntity createMenu( + @Valid @RequestBody CreateMenuRequest body, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(new ResourceCreatedResponse(UUID.randomUUID()), HttpStatus.CREATED); + } + + @GetMapping + @Operation( + tags = "Menu", + summary = "Get or search a list of menus", + description = + "By passing in the appropriate options, you can search for available menus in the system") + @ApiResponse( + responseCode = "200", + description = "Search results matching criteria", + content = + @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(implementation = SearchMenuResult.class))) + @SearchAPIResponses + ResponseEntity searchMenu( + @RequestParam(value = "searchTerm", required = false) String searchTerm, + @RequestParam(value = "restaurantId", required = false) UUID restaurantId, + @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize, + @RequestParam(value = "pageNumber", required = false, defaultValue = "1") + Integer pageNumber) { + + List menuList = new ArrayList<>(); + + final String menuId = "d5785e28-306b-4e23-add0-3f9092d395f8"; + + Menu mockMenu; + if (restaurantId == null) { + mockMenu = + new Menu( + menuId, + "58a1df85-6bdc-412a-a118-0f0e394c1342", + "name", + "description", + new ArrayList<>(), + true); + } else { + mockMenu = + new Menu(menuId, restaurantId.toString(), "name", "description", new ArrayList<>(), true); + } + + menuList.add(mockMenu); + + return ResponseEntity.ok( + new SearchMenuResult( + pageSize, + pageNumber, + menuList.stream() + .map(m -> searchMenuResultItemMapper.toDto(m)) + .collect(Collectors.toList()))); + } + + @GetMapping(value = "/{id}") + @Operation( + tags = "Menu", + summary = "Get a menu", + description = + "By passing the menu id, you can get access to available categories and items in the menu") + @ApiResponse( + responseCode = "200", + description = "Menu", + content = + @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(implementation = MenuDTO.class))) + @ReadAPIResponses + ResponseEntity getMenu( + @PathVariable(name = "id") UUID id, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + final String restaurantId = "58a1df85-6bdc-412a-a118-0f0e394c1342"; + final String categoryId = "2c43dbda-7d4d-46fb-b246-bec2bd348ca1"; + final String itemId = "7e46a698-080b-45e6-a529-2c196d00791c"; + + Menu menu = + new Menu(id.toString(), restaurantId, "name", "description", new ArrayList<>(), true); + Item item = new Item(itemId, "item name", "item description", 5.99d, true); + Category category = new Category(categoryId, "cat name", "cat description", List.of(item)); + menu.addOrUpdateCategory(category); + + return ResponseEntity.ok(menuMapper.toDto(menu)); + } + + @PutMapping(value = "/{id}") + @Operation( + tags = "Menu", + summary = "Update a menu", + description = "Update a menu with new information") + @UpdateAPIResponses + ResponseEntity updateMenu( + @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, + @Valid @RequestBody UpdateMenuRequest body, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(new ResourceUpdatedResponse(UUID.randomUUID()), HttpStatus.OK); + } + + @DeleteMapping(value = "/{id}") + @Operation( + tags = "Menu", + summary = "Removes a Menu with all it's Categories and Items", + description = "Remove a menu from a restaurant", + operationId = "DeleteMenu") + @DeleteAPIResponses + ResponseEntity deleteMenu( + @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + return new ResponseEntity<>(OK); + } +} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/QueryMenuController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/QueryMenuController.java deleted file mode 100644 index 856dc2a0..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/QueryMenuController.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.response.MenuDTO; -import com.amido.stacks.workloads.menu.api.v1.dto.response.SearchMenuResult; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.io.IOException; -import java.util.UUID; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; - -@RequestMapping("/v1/menu") -public interface QueryMenuController { - - @GetMapping(produces = "application/json; charset=utf-8") - @Operation( - tags = "Menu", - summary = "Get or search a list of menus", - security = @SecurityRequirement(name = "bearerAuth"), - description = - "By passing in the appropriate options, you can search for available menus in the system", - responses = { - @ApiResponse( - responseCode = "200", - description = "Search results matching criteria", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = SearchMenuResult.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity searchMenu( - @RequestParam(value = "searchTerm", required = false) String searchTerm, - @RequestParam(value = "restaurantId", required = false) UUID restaurantId, - @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize, - @RequestParam(value = "pageNumber", required = false, defaultValue = "1") Integer pageNumber) - throws IOException; - - @GetMapping(value = "/{id}", produces = "application/json; charset=utf-8") - @Operation( - tags = "Menu", - summary = "Get a menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = - "By passing the menu id, you can get access to available categories and items in the menu", - responses = { - @ApiResponse( - responseCode = "200", - description = "Menu", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = MenuDTO.class))), - @ApiResponse( - responseCode = "404", - description = "Menu Not Found", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity getMenu( - @PathVariable(name = "id") UUID id, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateCategoryController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateCategoryController.java deleted file mode 100644 index 89005424..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateCategoryController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateCategoryRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -/** @author ArathyKrishna */ -@RequestMapping("/v1/menu/{id}/category/{categoryId}") -public interface UpdateCategoryController { - - @PutMapping(consumes = "application/json", produces = "application/json; charset=utf-8") - @Operation( - tags = "Category", - summary = "Update a category in the menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Update a category to menu", - operationId = "UpdateMenuCategory", - responses = { - @ApiResponse( - responseCode = "200", - description = "Success", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ResourceUpdatedResponse.class))), - @ApiResponse( - responseCode = "204", - description = "No Content", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "409", - description = "Conflict, an item already exists", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity updateMenuCategory( - @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, - @Parameter(description = "Category id", required = true) @PathVariable("categoryId") - UUID categoryId, - @Valid @RequestBody UpdateCategoryRequest body, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateItemController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateItemController.java deleted file mode 100644 index 1a9bf3cd..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateItemController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateItemRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -/** @author ArathyKrishna */ -@RequestMapping("/v1/menu/{id}/category/{categoryId}/items/{itemId}") -public interface UpdateItemController { - @PutMapping(consumes = "application/json", produces = "application/json; charset=utf-8") - @Operation( - tags = "Item", - summary = "Update an item in the menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Update an item in the menu", - operationId = "UpdateMenuItem", - responses = { - @ApiResponse( - responseCode = "200", - description = "Success", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ResourceUpdatedResponse.class))), - @ApiResponse( - responseCode = "204", - description = "No Content", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "404", - description = "Resource not found", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity updateItem( - @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, - @Parameter(description = "Category id", required = true) @PathVariable("categoryId") - UUID categoryId, - @Parameter(description = "Item id", required = true) @PathVariable("itemId") UUID itemId, - @Valid @RequestBody UpdateItemRequest body, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateMenuController.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateMenuController.java deleted file mode 100644 index aa3788aa..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/UpdateMenuController.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateMenuRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -@RequestMapping("/v1/menu/{id}") -public interface UpdateMenuController { - - @PutMapping(consumes = "application/json", produces = "application/json; charset=utf-8") - @Operation( - tags = "Menu", - summary = "Update a menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = "Update a menu with new information", - responses = { - @ApiResponse( - responseCode = "200", - description = "Success", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ResourceUpdatedResponse.class))), - @ApiResponse( - responseCode = "204", - description = "No Content", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "401", - description = "Unauthorized, Access token is missing or invalid", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "403", - description = "Forbidden, the user does not have permission to execute this operation", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "409", - description = "Conflict, an item already exists", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity updateMenu( - @Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId, - @Valid @RequestBody UpdateMenuRequest body, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/GenerateTokenResponse.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/GenerateTokenResponse.java deleted file mode 100644 index dd165c65..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/GenerateTokenResponse.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.dto.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GenerateTokenResponse { - - @JsonProperty("access_token") - private String access_token = null; - - @JsonProperty("expires_in") - private String expires_in = null; - - @JsonProperty("token_type") - private String token_type = null; -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/ResourceCreatedResponse.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/ResourceCreatedResponse.java deleted file mode 100644 index 093b2842..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/ResourceCreatedResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.dto.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.UUID; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ResourceCreatedResponse { - - @JsonProperty("id") - private UUID id = null; -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/ResourceUpdatedResponse.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/ResourceUpdatedResponse.java deleted file mode 100644 index ced72f6e..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/dto/response/ResourceUpdatedResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.dto.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.UUID; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** @author ArathyKrishna */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ResourceUpdatedResponse { - @JsonProperty("id") - private UUID id = null; -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateCategoryControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateCategoryControllerImpl.java deleted file mode 100644 index ab77c641..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateCategoryControllerImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import com.amido.stacks.workloads.menu.api.v1.CreateCategoryController; -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateCategoryRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class CreateCategoryControllerImpl implements CreateCategoryController { - - public CreateCategoryControllerImpl() {} - - @Override - public ResponseEntity addMenuCategory( - UUID menuId, @Valid CreateCategoryRequest body, String correlationId) { - - return new ResponseEntity<>(new ResourceCreatedResponse(UUID.randomUUID()), HttpStatus.CREATED); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateItemControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateItemControllerImpl.java deleted file mode 100644 index f8376474..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateItemControllerImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import com.amido.stacks.workloads.menu.api.v1.CreateItemController; -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateItemRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class CreateItemControllerImpl implements CreateItemController { - - public CreateItemControllerImpl() {} - - @Override - public ResponseEntity addMenuItem( - UUID menuId, UUID categoryId, @Valid CreateItemRequest body, String correlationId) { - return new ResponseEntity<>(new ResourceCreatedResponse(UUID.randomUUID()), HttpStatus.CREATED); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateMenuControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateMenuControllerImpl.java deleted file mode 100644 index 5efb0933..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateMenuControllerImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import com.amido.stacks.workloads.menu.api.v1.CreateMenuController; -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateMenuRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class CreateMenuControllerImpl implements CreateMenuController { - - public CreateMenuControllerImpl() {} - - @Override - public ResponseEntity createMenu( - @Valid CreateMenuRequest body, String correlationId) { - return new ResponseEntity<>(new ResourceCreatedResponse(UUID.randomUUID()), HttpStatus.CREATED); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteCategoryControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteCategoryControllerImpl.java deleted file mode 100644 index 52ba4e40..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteCategoryControllerImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static org.springframework.http.HttpStatus.OK; - -import com.amido.stacks.workloads.menu.api.v1.DeleteCategoryController; -import java.util.UUID; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -/** @author ArathyKrishna */ -@RestController -public class DeleteCategoryControllerImpl implements DeleteCategoryController { - - public DeleteCategoryControllerImpl() {} - - @Override - public ResponseEntity deleteCategory(UUID menuId, UUID categoryId, String correlationId) { - return new ResponseEntity<>(OK); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteItemControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteItemControllerImpl.java deleted file mode 100644 index 4e7647d8..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteItemControllerImpl.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static org.springframework.http.HttpStatus.OK; - -import com.amido.stacks.workloads.menu.api.v1.DeleteItemController; -import java.util.UUID; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -/** @author ArathyKrishna */ -@RestController -public class DeleteItemControllerImpl implements DeleteItemController { - - public DeleteItemControllerImpl() {} - - @Override - public ResponseEntity deleteItem( - UUID menuId, UUID categoryId, UUID itemId, String correlationId) { - return new ResponseEntity<>(OK); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteMenuControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteMenuControllerImpl.java deleted file mode 100644 index dc1c2da1..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteMenuControllerImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static org.springframework.http.HttpStatus.OK; - -import com.amido.stacks.workloads.menu.api.v1.DeleteMenuController; -import java.util.UUID; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -/** - * DeleteMenuController implementation. - * - * @author ArathyKrishna - */ -@RestController -public class DeleteMenuControllerImpl implements DeleteMenuController { - - public DeleteMenuControllerImpl() {} - - @Override - public ResponseEntity deleteMenu(UUID menuId, String correlationId) { - return new ResponseEntity<>(OK); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/QueryMenuControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/QueryMenuControllerImpl.java deleted file mode 100644 index a478dae7..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/QueryMenuControllerImpl.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import com.amido.stacks.workloads.menu.api.v1.QueryMenuController; -import com.amido.stacks.workloads.menu.api.v1.dto.response.MenuDTO; -import com.amido.stacks.workloads.menu.api.v1.dto.response.SearchMenuResult; -import com.amido.stacks.workloads.menu.domain.Category; -import com.amido.stacks.workloads.menu.domain.Item; -import com.amido.stacks.workloads.menu.domain.Menu; -import com.amido.stacks.workloads.menu.mappers.MenuMapper; -import com.amido.stacks.workloads.menu.mappers.SearchMenuResultItemMapper; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -/** MenuControllerImpl - MenuDTO Controller used to interact and manage menus API. */ -@RestController -public class QueryMenuControllerImpl implements QueryMenuController { - - Logger logger = LoggerFactory.getLogger(QueryMenuControllerImpl.class); - - @Autowired private MenuMapper menuMapper; - - @Autowired private SearchMenuResultItemMapper searchMenuResultItemMapper; - - @Override - public ResponseEntity searchMenu( - String searchTerm, UUID restaurantId, Integer pageSize, Integer pageNumber) { - - List menuList = new ArrayList<>(); - - final String menuId = "d5785e28-306b-4e23-add0-3f9092d395f8"; - - Menu mockMenu; - if (restaurantId == null) { - mockMenu = - new Menu( - menuId, - "58a1df85-6bdc-412a-a118-0f0e394c1342", - "name", - "description", - new ArrayList<>(), - true); - } else { - mockMenu = - new Menu(menuId, restaurantId.toString(), "name", "description", new ArrayList<>(), true); - } - - menuList.add(mockMenu); - - return ResponseEntity.ok( - new SearchMenuResult( - pageSize, - pageNumber, - menuList.stream() - .map(m -> searchMenuResultItemMapper.toDto(m)) - .collect(Collectors.toList()))); - } - - @Override - public ResponseEntity getMenu(UUID id, String correlationId) { - final String restaurantId = "58a1df85-6bdc-412a-a118-0f0e394c1342"; - final String categoryId = "2c43dbda-7d4d-46fb-b246-bec2bd348ca1"; - final String itemId = "7e46a698-080b-45e6-a529-2c196d00791c"; - - Menu menu = - new Menu(id.toString(), restaurantId, "name", "description", new ArrayList<>(), true); - Item item = new Item(itemId, "item name", "item description", 5.99d, true); - Category category = - new Category(categoryId, "cat name", "cat description", Arrays.asList(item)); - menu.addOrUpdateCategory(category); - - return ResponseEntity.ok(menuMapper.toDto(menu)); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateCategoryControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateCategoryControllerImpl.java deleted file mode 100644 index a7f5f401..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateCategoryControllerImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static org.springframework.http.HttpStatus.OK; - -import com.amido.stacks.workloads.menu.api.v1.UpdateCategoryController; -import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateCategoryRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -/** - * Controller for updating category. - * - * @author ArathyKrishna - */ -@RestController -public class UpdateCategoryControllerImpl implements UpdateCategoryController { - - public UpdateCategoryControllerImpl() {} - - @Override - public ResponseEntity updateMenuCategory( - UUID menuId, UUID categoryId, @Valid UpdateCategoryRequest body, String correlationId) { - return new ResponseEntity<>(new ResourceUpdatedResponse(UUID.randomUUID()), OK); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateItemControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateItemControllerImpl.java deleted file mode 100644 index 8bfff37e..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateItemControllerImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import com.amido.stacks.workloads.menu.api.v1.UpdateItemController; -import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateItemRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -/** @author ArathyKrishna */ -@RestController -public class UpdateItemControllerImpl implements UpdateItemController { - - public UpdateItemControllerImpl() {} - - @Override - public ResponseEntity updateItem( - UUID menuId, - UUID categoryId, - UUID itemId, - @Valid UpdateItemRequest body, - String correlationId) { - return new ResponseEntity<>(new ResourceUpdatedResponse(UUID.randomUUID()), HttpStatus.OK); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateMenuControllerImpl.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateMenuControllerImpl.java deleted file mode 100644 index ac250700..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateMenuControllerImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import com.amido.stacks.workloads.menu.api.v1.UpdateMenuController; -import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateMenuRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; -import java.util.UUID; -import javax.validation.Valid; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class UpdateMenuControllerImpl implements UpdateMenuController { - - public UpdateMenuControllerImpl() {} - - @Override - public ResponseEntity updateMenu( - UUID menuId, @Valid UpdateMenuRequest body, String correlationId) { - return new ResponseEntity<>(new ResourceUpdatedResponse(UUID.randomUUID()), HttpStatus.OK); - } -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/MenuControllerV2.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/MenuControllerV2.java new file mode 100644 index 00000000..d15b1e69 --- /dev/null +++ b/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/MenuControllerV2.java @@ -0,0 +1,56 @@ +package com.amido.stacks.workloads.menu.api.v2; + +import com.amido.stacks.core.api.annotations.ReadAPIResponses; +import com.amido.stacks.workloads.menu.api.v1.dto.response.MenuDTO; +import com.amido.stacks.workloads.menu.domain.Menu; +import com.amido.stacks.workloads.menu.mappers.MenuMapper; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +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 java.util.ArrayList; +import java.util.UUID; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequestMapping(path = "/v2/menu", produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8") +@RestController +public class MenuControllerV2 { + + @Autowired private MenuMapper menuMapper; + + @GetMapping(value = "/{id}") + @Operation( + tags = "Menu", + summary = "Get a menu", + description = + "By passing the menu id, you can get access to available categories and items in the menu", + operationId = "GetMenuV2") + @ApiResponse( + responseCode = "200", + description = "Menu", + content = + @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(implementation = MenuDTO.class))) + @ReadAPIResponses + ResponseEntity getMenu( + @PathVariable(name = "id") UUID id, + @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId) { + + String restaurantId = "3930ddff-82ce-4f7e-b910-b0709b276cf0"; + + Menu menu = + new Menu( + id.toString(), restaurantId, "0 Menu", "0 Menu Description", new ArrayList<>(), true); + + return ResponseEntity.ok(menuMapper.toDto(menu)); + } +} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/QueryMenuControllerV2.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/QueryMenuControllerV2.java deleted file mode 100644 index 5172599d..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/QueryMenuControllerV2.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v2; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.response.MenuDTO; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -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.security.SecurityRequirement; -import java.util.UUID; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestMapping; - -@RequestMapping("/v2/menu") -public interface QueryMenuControllerV2 { - - @GetMapping(value = "/{id}", produces = "application/json; charset=utf-8") - @Operation( - tags = "Menu", - summary = "Get a menu", - security = @SecurityRequirement(name = "bearerAuth"), - description = - "By passing the menu id, you can get access to available categories and items in the menu", - operationId = "GetMenuV2", - responses = { - @ApiResponse( - responseCode = "200", - description = "Menu", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = MenuDTO.class))), - @ApiResponse( - responseCode = "404", - description = "Menu Not Found", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse( - responseCode = "400", - description = "Bad Request", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))) - }) - ResponseEntity getMenu( - @PathVariable(name = "id") UUID id, - @Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId); -} diff --git a/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/impl/QueryMenuControllerImplV2.java b/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/impl/QueryMenuControllerImplV2.java deleted file mode 100644 index a4d88422..00000000 --- a/java/src/main/java/com/amido/stacks/workloads/menu/api/v2/impl/QueryMenuControllerImplV2.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v2.impl; - -import com.amido.stacks.workloads.menu.api.v1.dto.response.MenuDTO; -import com.amido.stacks.workloads.menu.api.v2.QueryMenuControllerV2; -import com.amido.stacks.workloads.menu.domain.Menu; -import com.amido.stacks.workloads.menu.mappers.MenuMapper; -import java.util.ArrayList; -import java.util.UUID; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class QueryMenuControllerImplV2 implements QueryMenuControllerV2 { - - @Autowired private MenuMapper menuMapper; - - @Override - public ResponseEntity getMenu(UUID id, String correlationId) { - String restaurantId = "3930ddff-82ce-4f7e-b910-b0709b276cf0"; - - Menu menu = - new Menu( - id.toString(), restaurantId, "0 Menu", "0 Menu Description", new ArrayList<>(), true); - - return ResponseEntity.ok(menuMapper.toDto(menu)); - } -} diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateCategoryControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/CategoryControllerTest.java similarity index 53% rename from java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateCategoryControllerImplTest.java rename to java/src/test/java/com/amido/stacks/workloads/menu/api/v1/CategoryControllerTest.java index 36eed0d9..687b048d 100644 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateCategoryControllerImplTest.java +++ b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/CategoryControllerTest.java @@ -1,17 +1,21 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; +package com.amido.stacks.workloads.menu.api.v1; import static com.amido.stacks.workloads.menu.domain.CategoryHelper.createCategories; import static com.amido.stacks.workloads.menu.domain.CategoryHelper.createCategory; +import static com.amido.stacks.workloads.menu.domain.ItemHelper.createItem; import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; import static com.amido.stacks.workloads.util.TestHelper.getRequestHttpEntity; import static java.util.UUID.fromString; import static org.assertj.core.api.BDDAssertions.then; +import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.OK; import com.amido.stacks.core.api.dto.ErrorResponse; +import com.amido.stacks.core.api.dto.response.ResourceCreatedResponse; +import com.amido.stacks.core.api.dto.response.ResourceUpdatedResponse; +import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateCategoryRequest; import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateCategoryRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; import com.amido.stacks.workloads.menu.domain.Category; import com.amido.stacks.workloads.menu.domain.Menu; import java.util.List; @@ -24,20 +28,63 @@ import org.springframework.boot.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; import org.springframework.test.context.ActiveProfiles; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @EnableAutoConfiguration @Tag("Integration") @ActiveProfiles("test") -class UpdateCategoryControllerImplTest { +public class CategoryControllerTest { + + public static final String CREATE_CATEGORY = "%s/v1/menu/%s/category"; public static final String UPDATE_CATEGORY = "%s/v1/menu/%s/category/%s"; + public static final String DELETE_CATEGORY = "%s/v1/menu/%s/category/%s"; + @LocalServerPort private int port; @Autowired private TestRestTemplate testRestTemplate; + @Test + void testInvalidMenuIdWilThrowBadRequest() { + // Given + CreateCategoryRequest request = new CreateCategoryRequest("test Category Name", ""); + + // When + var response = + this.testRestTemplate.postForEntity( + String.format(CREATE_CATEGORY, getBaseURL(port), "XXXXXX"), + request, + ErrorResponse.class); + + // Then + then(response).isNotNull(); + then(response.getStatusCode()).isEqualTo(BAD_REQUEST); + } + + @Test + void testAddCategory() { + // Given + Menu menu = createMenu(1); + + CreateCategoryRequest request = + new CreateCategoryRequest("test Category Name", "test Category Description"); + + // When + var response = + this.testRestTemplate.postForEntity( + String.format(CREATE_CATEGORY, getBaseURL(port), menu.getId()), + request, + ResourceCreatedResponse.class); + + // Then + then(response).isNotNull(); + then(response.getBody()).isNotNull(); + then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); + } + @Test void testUpdateCategorySuccess() { // Given @@ -120,4 +167,68 @@ void testUpdateOnlyCategoryDescription() { then(response).isNotNull(); then(response.getStatusCode()).isEqualTo(OK); } + + @Test + void testDeleteCategorySuccess() { + // Given + Menu menu = createMenu(1); + Category category = createCategory(0); + menu.setCategories(List.of(category)); + + // When + String requestUrl = + String.format(DELETE_CATEGORY, getBaseURL(port), menu.getId(), category.getId()); + var response = + this.testRestTemplate.exchange( + requestUrl, + HttpMethod.DELETE, + new HttpEntity<>(getRequestHttpEntity()), + ErrorResponse.class); + + // Then + then(response.getStatusCode()).isEqualTo(OK); + } + + @Test + void testDeleteCategoryWithAnItem() { + // Given + Menu menu = createMenu(1); + Category category = createCategory(0); + category.addOrUpdateItem(createItem(0)); + menu.addOrUpdateCategory(category); + + // When + String requestUrl = + String.format(DELETE_CATEGORY, getBaseURL(port), menu.getId(), category.getId()); + var response = + this.testRestTemplate.exchange( + requestUrl, + HttpMethod.DELETE, + new HttpEntity<>(getRequestHttpEntity()), + ErrorResponse.class); + + // Then + then(response.getStatusCode()).isEqualTo(OK); + } + + @Test + void testDeleteACategoryFromList() { + // Given + Menu menu = createMenu(1); + List categories = createCategories(2); + menu.setCategories(categories); + + // When + String requestUrl = + String.format(DELETE_CATEGORY, getBaseURL(port), menu.getId(), categories.get(0).getId()); + var response = + this.testRestTemplate.exchange( + requestUrl, + HttpMethod.DELETE, + new HttpEntity<>(getRequestHttpEntity()), + ErrorResponse.class); + + // Then + then(response.getStatusCode()).isEqualTo(OK); + } } diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateItemControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/ItemControllerTest.java similarity index 55% rename from java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateItemControllerImplTest.java rename to java/src/test/java/com/amido/stacks/workloads/menu/api/v1/ItemControllerTest.java index d2742db8..422b76c3 100644 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateItemControllerImplTest.java +++ b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/ItemControllerTest.java @@ -1,4 +1,4 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; +package com.amido.stacks.workloads.menu.api.v1; import static com.amido.stacks.workloads.menu.domain.CategoryHelper.createCategory; import static com.amido.stacks.workloads.menu.domain.ItemHelper.createItem; @@ -6,15 +6,22 @@ import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; import static com.amido.stacks.workloads.util.TestHelper.getRequestHttpEntity; +import static java.util.UUID.randomUUID; import static org.assertj.core.api.BDDAssertions.then; +import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.OK; +import com.amido.stacks.core.api.dto.ErrorResponse; +import com.amido.stacks.core.api.dto.response.ResourceCreatedResponse; +import com.amido.stacks.core.api.dto.response.ResourceUpdatedResponse; +import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateItemRequest; import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateItemRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; import com.amido.stacks.workloads.menu.domain.Category; import com.amido.stacks.workloads.menu.domain.Item; import com.amido.stacks.workloads.menu.domain.Menu; +import java.util.ArrayList; import java.util.List; +import java.util.UUID; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -24,21 +31,70 @@ import org.springframework.boot.web.server.LocalServerPort; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.test.context.ActiveProfiles; -/** @author ArathyKrishna */ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @EnableAutoConfiguration @Tag("Integration") @ActiveProfiles("test") -class UpdateItemControllerImplTest { +public class ItemControllerTest { + + public static final String CREATE_ITEM = "%s/v1/menu/%s/category/%s/items"; public static final String UPDATE_ITEM = "%s/v1/menu/%s/category/%s/items/%s"; + public static final String DELETE_ITEM = "%s/v1/menu/%s/category/%s/items/%s"; + @LocalServerPort private int port; @Autowired private TestRestTemplate testRestTemplate; + @Test + void testAddItem() { + // Given + Menu menu = createMenu(1); + Category category = + new Category(randomUUID().toString(), "cat name", "cat description", new ArrayList<>()); + menu.addOrUpdateCategory(category); + + CreateItemRequest request = + new CreateItemRequest("Some Name", "Some Description", 13.56d, true); + + // When + var response = + this.testRestTemplate.postForEntity( + String.format(CREATE_ITEM, getBaseURL(port), menu.getId(), category.getId()), + request, + ResourceCreatedResponse.class); + + // Then + + then(response).isNotNull(); + then(response.getBody()).isNotNull(); + then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); + } + + @Test + void testInvalidCategoryIdWilThrowBadRequest() { + + // Given + CreateItemRequest request = + new CreateItemRequest("Some Name", "Some Description", 13.56d, true); + + // When + var response = + this.testRestTemplate.postForEntity( + String.format(CREATE_ITEM, getBaseURL(port), randomUUID(), "xyz"), + request, + ErrorResponse.class); + + // Then + then(response).isNotNull(); + then(response.getStatusCode()).isEqualTo(BAD_REQUEST); + } + @Test void testUpdateItemSuccess() { // Given @@ -95,4 +151,28 @@ void testUpdateItemDescription() { then(response).isNotNull(); then(response.getStatusCode()).isEqualTo(OK); } + + @Test + void testDeleteItemSuccess() { + // Given + Menu menu = createMenu(1); + Category category = createCategory(0); + Item item = new Item(UUID.randomUUID().toString(), "New Item", "Item description", 12.2d, true); + category.addOrUpdateItem(item); + menu.addOrUpdateCategory(category); + + // When + String requestUrl = + String.format(DELETE_ITEM, getBaseURL(port), menu.getId(), category.getId(), item.getId()); + + var response = + this.testRestTemplate.exchange( + requestUrl, + HttpMethod.DELETE, + new HttpEntity<>(getRequestHttpEntity()), + ResponseEntity.class); + + // Then + then(response.getStatusCode()).isEqualTo(OK); + } } diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/QueryMenuControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/MenuControllerTest.java similarity index 69% rename from java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/QueryMenuControllerImplTest.java rename to java/src/test/java/com/amido/stacks/workloads/menu/api/v1/MenuControllerTest.java index b7e0cc24..6e0c7ac4 100644 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/QueryMenuControllerImplTest.java +++ b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/MenuControllerTest.java @@ -1,12 +1,19 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; +package com.amido.stacks.workloads.menu.api.v1; +import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenus; import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; +import static com.amido.stacks.workloads.util.TestHelper.getRequestHttpEntity; import static org.assertj.core.api.BDDAssertions.then; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.core.IsNull.notNullValue; +import static org.springframework.http.HttpStatus.OK; +import com.amido.stacks.core.api.dto.response.ResourceCreatedResponse; +import com.amido.stacks.core.api.dto.response.ResourceUpdatedResponse; +import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateMenuRequest; +import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateMenuRequest; import com.amido.stacks.workloads.menu.api.v1.dto.response.MenuDTO; import com.amido.stacks.workloads.menu.api.v1.dto.response.SearchMenuResult; import com.amido.stacks.workloads.menu.api.v1.dto.response.SearchMenuResultItem; @@ -21,6 +28,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -29,14 +37,26 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.test.context.ActiveProfiles; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @EnableAutoConfiguration @Tag("Integration") @ActiveProfiles("test") -public class QueryMenuControllerImplTest { +public class MenuControllerTest { + + public static final String CREATE_MENU = "/v1/menu"; + + public static final String UPDATE_MENU = "%s/v1/menu/%s"; + + public static final String DELETE_MENU = "%s/v1/menu/%s"; + + final int DEFAULT_PAGE_NUMBER = 1; + final int DEFAULT_PAGE_SIZE = 20; @LocalServerPort private int port; @@ -50,8 +70,22 @@ public class QueryMenuControllerImplTest { @Autowired private SearchMenuResultItemMapper searchMenuResultItemMapper; - final int DEFAULT_PAGE_NUMBER = 1; - final int DEFAULT_PAGE_SIZE = 20; + @Test + void testCreateNewMenu() { + // Given + Menu m = createMenu(1); + CreateMenuRequest request = + new CreateMenuRequest( + m.getName(), m.getDescription(), UUID.fromString(m.getRestaurantId()), m.getEnabled()); + + // When + var response = + this.testRestTemplate.postForEntity( + getBaseURL(port) + CREATE_MENU, request, ResourceCreatedResponse.class); + + // Then + then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); + } @Test public void listMenusAndPagination() { @@ -147,4 +181,39 @@ public void listMenusWithDefaultPagination() { assertThat(actual.getPageNumber(), is(DEFAULT_PAGE_NUMBER)); assertThat(actual.getPageSize(), is(DEFAULT_PAGE_SIZE)); } + + @Test + void testUpdateSuccess() { + // Given + Menu menu = createMenu(0); + + UpdateMenuRequest request = new UpdateMenuRequest("new name", "new description", false); + + // When + var response = + this.testRestTemplate.exchange( + String.format(UPDATE_MENU, getBaseURL(port), menu.getId()), + HttpMethod.PUT, + new HttpEntity<>(request, getRequestHttpEntity()), + ResourceUpdatedResponse.class); + + // Then + then(response).isNotNull(); + then(response.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + void testDeleteMenuSuccess() { + // Given + Menu menu = createMenu(1); + + var response = + this.testRestTemplate.exchange( + String.format(DELETE_MENU, getBaseURL(port), menu.getId()), + HttpMethod.DELETE, + new HttpEntity<>(getRequestHttpEntity()), + ResponseEntity.class); + // Then + then(response.getStatusCode()).isEqualTo(OK); + } } diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateCategoryControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateCategoryControllerImplTest.java deleted file mode 100644 index 72541ab7..00000000 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateCategoryControllerImplTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; -import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; -import static org.assertj.core.api.BDDAssertions.then; -import static org.springframework.http.HttpStatus.BAD_REQUEST; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateCategoryRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import com.amido.stacks.workloads.menu.domain.Menu; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.http.HttpStatus; -import org.springframework.test.context.ActiveProfiles; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@EnableAutoConfiguration -@Tag("Integration") -@ActiveProfiles("test") -class CreateCategoryControllerImplTest { - - public static final String CREATE_CATEGORY = "%s/v1/menu/%s/category"; - - @LocalServerPort private int port; - - @Autowired private TestRestTemplate testRestTemplate; - - @Test - void testInvalidMenuIdWilThrowBadRequest() { - // Given - CreateCategoryRequest request = new CreateCategoryRequest("test Category Name", ""); - - // When - var response = - this.testRestTemplate.postForEntity( - String.format(CREATE_CATEGORY, getBaseURL(port), "XXXXXX"), - request, - ErrorResponse.class); - - // Then - then(response).isNotNull(); - then(response.getStatusCode()).isEqualTo(BAD_REQUEST); - } - - @Test - void testAddCategory() { - // Given - Menu menu = createMenu(1); - - CreateCategoryRequest request = - new CreateCategoryRequest("test Category Name", "test Category Description"); - - // When - var response = - this.testRestTemplate.postForEntity( - String.format(CREATE_CATEGORY, getBaseURL(port), menu.getId()), - request, - ResourceCreatedResponse.class); - - // Then - then(response).isNotNull(); - then(response.getBody()).isNotNull(); - then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); - } -} diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateItemControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateItemControllerImplTest.java deleted file mode 100644 index 77308ef1..00000000 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateItemControllerImplTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; -import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; -import static java.util.UUID.randomUUID; -import static org.assertj.core.api.BDDAssertions.then; -import static org.springframework.http.HttpStatus.BAD_REQUEST; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateItemRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import com.amido.stacks.workloads.menu.domain.Category; -import com.amido.stacks.workloads.menu.domain.Menu; -import java.util.ArrayList; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.http.HttpStatus; -import org.springframework.test.context.ActiveProfiles; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@EnableAutoConfiguration -@Tag("Integration") -@ActiveProfiles("test") -class CreateItemControllerImplTest { - - public static final String CREATE_ITEM = "%s/v1/menu/%s/category/%s/items"; - @LocalServerPort private int port; - - @Autowired private TestRestTemplate testRestTemplate; - - @Test - void testAddItem() { - // Given - Menu menu = createMenu(1); - Category category = - new Category(randomUUID().toString(), "cat name", "cat description", new ArrayList<>()); - menu.addOrUpdateCategory(category); - - CreateItemRequest request = - new CreateItemRequest("Some Name", "Some Description", 13.56d, true); - - // When - var response = - this.testRestTemplate.postForEntity( - String.format(CREATE_ITEM, getBaseURL(port), menu.getId(), category.getId()), - request, - ResourceCreatedResponse.class); - - // Then - - then(response).isNotNull(); - then(response.getBody()).isNotNull(); - then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); - } - - @Test - void testInvalidCategoryIdWilThrowBadRequest() { - - // Given - CreateItemRequest request = - new CreateItemRequest("Some Name", "Some Description", 13.56d, true); - - // When - var response = - this.testRestTemplate.postForEntity( - String.format(CREATE_ITEM, getBaseURL(port), randomUUID(), "xyz"), - request, - ErrorResponse.class); - - // Then - then(response).isNotNull(); - then(response.getStatusCode()).isEqualTo(BAD_REQUEST); - } -} diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateMenuControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateMenuControllerImplTest.java deleted file mode 100644 index 34c4d5ef..00000000 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/CreateMenuControllerImplTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; -import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; -import static org.assertj.core.api.BDDAssertions.then; - -import com.amido.stacks.workloads.menu.api.v1.dto.request.CreateMenuRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceCreatedResponse; -import com.amido.stacks.workloads.menu.domain.Menu; -import java.util.UUID; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.http.HttpStatus; -import org.springframework.test.context.ActiveProfiles; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@EnableAutoConfiguration -@Tag("Integration") -@ActiveProfiles("test") -class CreateMenuControllerImplTest { - - public static final String CREATE_MENU = "/v1/menu"; - - @LocalServerPort private int port; - - @Autowired private TestRestTemplate testRestTemplate; - - @Test - void testCreateNewMenu() { - // Given - Menu m = createMenu(1); - CreateMenuRequest request = - new CreateMenuRequest( - m.getName(), m.getDescription(), UUID.fromString(m.getRestaurantId()), m.getEnabled()); - - // When - var response = - this.testRestTemplate.postForEntity( - getBaseURL(port) + CREATE_MENU, request, ResourceCreatedResponse.class); - - // Then - then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); - } -} diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteCategoryControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteCategoryControllerImplTest.java deleted file mode 100644 index 030ccdc1..00000000 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteCategoryControllerImplTest.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static com.amido.stacks.workloads.menu.domain.CategoryHelper.createCategories; -import static com.amido.stacks.workloads.menu.domain.CategoryHelper.createCategory; -import static com.amido.stacks.workloads.menu.domain.ItemHelper.createItem; -import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; -import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; -import static com.amido.stacks.workloads.util.TestHelper.getRequestHttpEntity; -import static org.assertj.core.api.BDDAssertions.then; -import static org.springframework.http.HttpStatus.OK; - -import com.amido.stacks.core.api.dto.ErrorResponse; -import com.amido.stacks.workloads.menu.domain.Category; -import com.amido.stacks.workloads.menu.domain.Menu; -import java.util.List; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.test.context.ActiveProfiles; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@EnableAutoConfiguration -@Tag("Integration") -@ActiveProfiles("test") -class DeleteCategoryControllerImplTest { - - public static final String DELETE_CATEGORY = "%s/v1/menu/%s/category/%s"; - - @LocalServerPort private int port; - - @Autowired private TestRestTemplate testRestTemplate; - - @Test - void testDeleteCategorySuccess() { - // Given - Menu menu = createMenu(1); - Category category = createCategory(0); - menu.setCategories(List.of(category)); - - // When - String requestUrl = - String.format(DELETE_CATEGORY, getBaseURL(port), menu.getId(), category.getId()); - var response = - this.testRestTemplate.exchange( - requestUrl, - HttpMethod.DELETE, - new HttpEntity<>(getRequestHttpEntity()), - ErrorResponse.class); - - // Then - then(response.getStatusCode()).isEqualTo(OK); - } - - @Test - void testDeleteCategoryWithAnItem() { - // Given - Menu menu = createMenu(1); - Category category = createCategory(0); - category.addOrUpdateItem(createItem(0)); - menu.addOrUpdateCategory(category); - - // When - String requestUrl = - String.format(DELETE_CATEGORY, getBaseURL(port), menu.getId(), category.getId()); - var response = - this.testRestTemplate.exchange( - requestUrl, - HttpMethod.DELETE, - new HttpEntity<>(getRequestHttpEntity()), - ErrorResponse.class); - - // Then - then(response.getStatusCode()).isEqualTo(OK); - } - - @Test - void testDeleteACategoryFromList() { - // Given - Menu menu = createMenu(1); - List categories = createCategories(2); - menu.setCategories(categories); - - // When - String requestUrl = - String.format(DELETE_CATEGORY, getBaseURL(port), menu.getId(), categories.get(0).getId()); - var response = - this.testRestTemplate.exchange( - requestUrl, - HttpMethod.DELETE, - new HttpEntity<>(getRequestHttpEntity()), - ErrorResponse.class); - - // Then - then(response.getStatusCode()).isEqualTo(OK); - } -} diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteItemControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteItemControllerImplTest.java deleted file mode 100644 index 99db3a02..00000000 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteItemControllerImplTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static com.amido.stacks.workloads.menu.domain.CategoryHelper.createCategory; -import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; -import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; -import static com.amido.stacks.workloads.util.TestHelper.getRequestHttpEntity; -import static org.assertj.core.api.BDDAssertions.then; -import static org.springframework.http.HttpStatus.OK; - -import com.amido.stacks.workloads.menu.domain.Category; -import com.amido.stacks.workloads.menu.domain.Item; -import com.amido.stacks.workloads.menu.domain.Menu; -import java.util.UUID; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.ActiveProfiles; - -/** @author ArathyKrishna */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@EnableAutoConfiguration -@Tag("Integration") -@ActiveProfiles("test") -class DeleteItemControllerImplTest { - - public static final String DELETE_ITEM = "%s/v1/menu/%s/category/%s/items/%s"; - - @LocalServerPort private int port; - - @Autowired private TestRestTemplate testRestTemplate; - - @Test - void testDeleteItemSuccess() { - // Given - Menu menu = createMenu(1); - Category category = createCategory(0); - Item item = new Item(UUID.randomUUID().toString(), "New Item", "Item description", 12.2d, true); - category.addOrUpdateItem(item); - menu.addOrUpdateCategory(category); - - // When - String requestUrl = - String.format(DELETE_ITEM, getBaseURL(port), menu.getId(), category.getId(), item.getId()); - - var response = - this.testRestTemplate.exchange( - requestUrl, - HttpMethod.DELETE, - new HttpEntity<>(getRequestHttpEntity()), - ResponseEntity.class); - - // Then - then(response.getStatusCode()).isEqualTo(OK); - } -} diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteMenuControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteMenuControllerImplTest.java deleted file mode 100644 index c7d83b0f..00000000 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/DeleteMenuControllerImplTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; -import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; -import static com.amido.stacks.workloads.util.TestHelper.getRequestHttpEntity; -import static org.assertj.core.api.BDDAssertions.then; -import static org.springframework.http.HttpStatus.OK; - -import com.amido.stacks.workloads.menu.domain.Menu; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.ActiveProfiles; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@EnableAutoConfiguration -@Tag("Integration") -@ActiveProfiles("test") -class DeleteMenuControllerImplTest { - - public static final String DELETE_MENU = "%s/v1/menu/%s"; - - @LocalServerPort private int port; - - @Autowired private TestRestTemplate testRestTemplate; - - @Test - void testDeleteMenuSuccess() { - // Given - Menu menu = createMenu(1); - - var response = - this.testRestTemplate.exchange( - String.format(DELETE_MENU, getBaseURL(port), menu.getId()), - HttpMethod.DELETE, - new HttpEntity<>(getRequestHttpEntity()), - ResponseEntity.class); - // Then - then(response.getStatusCode()).isEqualTo(OK); - } -} diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateMenuControllerImplTest.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateMenuControllerImplTest.java deleted file mode 100644 index 332ad282..00000000 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v1/impl/UpdateMenuControllerImplTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.amido.stacks.workloads.menu.api.v1.impl; - -import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; -import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; -import static com.amido.stacks.workloads.util.TestHelper.getRequestHttpEntity; -import static org.assertj.core.api.BDDAssertions.then; - -import com.amido.stacks.workloads.menu.api.v1.dto.request.UpdateMenuRequest; -import com.amido.stacks.workloads.menu.api.v1.dto.response.ResourceUpdatedResponse; -import com.amido.stacks.workloads.menu.domain.Menu; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.test.context.ActiveProfiles; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@EnableAutoConfiguration -@Tag("Integration") -@ActiveProfiles("test") -class UpdateMenuControllerImplTest { - - public static final String UPDATE_MENU = "%s/v1/menu/%s"; - - @LocalServerPort private int port; - - @Autowired private TestRestTemplate testRestTemplate; - - @Test - void testUpdateSuccess() { - // Given - Menu menu = createMenu(0); - - UpdateMenuRequest request = new UpdateMenuRequest("new name", "new description", false); - - // When - var response = - this.testRestTemplate.exchange( - String.format(UPDATE_MENU, getBaseURL(port), menu.getId()), - HttpMethod.PUT, - new HttpEntity<>(request, getRequestHttpEntity()), - ResourceUpdatedResponse.class); - - // Then - then(response).isNotNull(); - then(response.getStatusCode()).isEqualTo(HttpStatus.OK); - } -} diff --git a/java/src/test/java/com/amido/stacks/workloads/menu/api/v2/impl/QueryMenuControllerImplV2Test.java b/java/src/test/java/com/amido/stacks/workloads/menu/api/v2/MenuControllerV2Test.java similarity index 94% rename from java/src/test/java/com/amido/stacks/workloads/menu/api/v2/impl/QueryMenuControllerImplV2Test.java rename to java/src/test/java/com/amido/stacks/workloads/menu/api/v2/MenuControllerV2Test.java index 0b0b657b..f78959b6 100644 --- a/java/src/test/java/com/amido/stacks/workloads/menu/api/v2/impl/QueryMenuControllerImplV2Test.java +++ b/java/src/test/java/com/amido/stacks/workloads/menu/api/v2/MenuControllerV2Test.java @@ -1,4 +1,4 @@ -package com.amido.stacks.workloads.menu.api.v2.impl; +package com.amido.stacks.workloads.menu.api.v2; import static com.amido.stacks.workloads.menu.domain.MenuHelper.createMenu; import static com.amido.stacks.workloads.util.TestHelper.getBaseURL; @@ -20,7 +20,7 @@ @EnableAutoConfiguration @Tag("Integration") @ActiveProfiles("test") -class QueryMenuControllerImplV2Test { +public class MenuControllerV2Test { private final String GET_MENU_BY_ID = "%s/v2/menu/%s";