Skip to content

Commit

Permalink
Updated to use Stacks annotations to remove Swagger bloat
Browse files Browse the repository at this point in the history
  • Loading branch information
sdavis-amido committed Jul 14, 2022
1 parent d9aa4c8 commit 5accad6
Show file tree
Hide file tree
Showing 12 changed files with 142 additions and 525 deletions.
2 changes: 1 addition & 1 deletion java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<description>Demo project for Java</description>

<properties>
<stacks.core.api.version>1.0.0</stacks.core.api.version>
<stacks.core.api.version>1.0.2.2-RELEASE</stacks.core.api.version>
<stacks.core.commons.version>1.0.3</stacks.core.commons.version>

<java.version>11</java.version>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,70 +1,35 @@
package com.amido.stacks.workloads.menu.api.v1;

import com.amido.stacks.core.api.dto.ErrorResponse;
import com.amido.stacks.core.api.annotations.CreateAPIResponses;
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.MediaType;
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;
import org.springframework.web.bind.annotation.RequestMethod;

@RequestMapping("/v1/menu/{id}/category")
@RequestMapping(
path = "/v1/menu/{id}/category",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8",
method = RequestMethod.POST)
public interface CreateCategoryController {

@PostMapping(consumes = "application/json", produces = "application/json; charset=utf-8")
@PostMapping
@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)))
})
operationId = "AddMenuCategory")
@CreateAPIResponses
ResponseEntity<ResourceCreatedResponse> addMenuCategory(
@Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId,
@Valid @RequestBody CreateCategoryRequest body,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,70 +1,35 @@
package com.amido.stacks.workloads.menu.api.v1;

import com.amido.stacks.core.api.dto.ErrorResponse;
import com.amido.stacks.core.api.annotations.CreateAPIResponses;
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.MediaType;
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;
import org.springframework.web.bind.annotation.RequestMethod;

@RequestMapping("/v1/menu/{id}/category/{categoryId}/items")
@RequestMapping(
path = "/v1/menu/{id}/category/{categoryId}/items",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8",
method = RequestMethod.POST)
public interface CreateItemController {

@PostMapping(consumes = "application/json", produces = "application/json; charset=utf-8")
@PostMapping
@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)))
})
operationId = "AddMenuItem")
@CreateAPIResponses
ResponseEntity<ResourceCreatedResponse> addMenuItem(
@Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId,
@Parameter(description = "Category id", required = true) @PathVariable("categoryId")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,68 +1,33 @@
package com.amido.stacks.workloads.menu.api.v1;

import com.amido.stacks.core.api.dto.ErrorResponse;
import com.amido.stacks.core.api.annotations.CreateAPIResponses;
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.MediaType;
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;
import org.springframework.web.bind.annotation.RequestMethod;

@RequestMapping("/v1/menu")
@RequestMapping(
path = "/v1/menu",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8",
method = RequestMethod.POST)
public interface CreateMenuController {

@PostMapping(consumes = "application/json", produces = "application/json; charset=utf-8")
@PostMapping
@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)))
})
operationId = "CreateMenu")
@CreateAPIResponses
ResponseEntity<ResourceCreatedResponse> createMenu(
@Valid @RequestBody CreateMenuRequest body,
@Parameter(hidden = true) @RequestAttribute("CorrelationId") String correlationId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,68 +1,30 @@
package com.amido.stacks.workloads.menu.api.v1;

import com.amido.stacks.core.api.dto.ErrorResponse;
import com.amido.stacks.core.api.annotations.DeleteAPIResponses;
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.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.RequestAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/** @author ArathyKrishna */
@RequestMapping("/v1/menu/{id}/category/{categoryId}")
@RequestMapping(
path = "/v1/menu/{id}/category/{categoryId}",
produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8",
method = RequestMethod.DELETE)
public interface DeleteCategoryController {

@DeleteMapping(produces = "application/json; charset=utf-8")
@DeleteMapping
@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)))
})
operationId = "DeleteCategory")
@DeleteAPIResponses
ResponseEntity<Void> deleteCategory(
@Parameter(description = "Menu id", required = true) @PathVariable("id") UUID menuId,
@Parameter(description = "Category id", required = true) @PathVariable("categoryId")
Expand Down
Loading

0 comments on commit 5accad6

Please sign in to comment.