From 5ed1e4cd9829ced0f10efe3ad0a1f2b49078dba9 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Tue, 1 Dec 2020 20:29:53 -0500 Subject: [PATCH] WIP. improving openapi docs --- .../src/main/java/bubble/ApiConstants.java | 1 + .../bubble/cloud/email/RenderedEmail.java | 8 +- .../bubble/cloud/geoCode/GeoCodeResult.java | 9 +- .../bubble/cloud/geoLocation/GeoLocation.java | 9 +- .../bubble/cloud/geoTime/GeoTimeZone.java | 3 +- .../src/main/java/bubble/model/AppLinks.java | 4 +- .../main/java/bubble/model/BasicAppLinks.java | 12 +- .../bubble/model/cloud/BubbleNodeKey.java | 3 +- .../bubble/resources/BubbleMagicResource.java | 9 ++ .../java/bubble/resources/DebugResource.java | 9 ++ .../java/bubble/resources/DetectResource.java | 18 ++- .../resources/EntityConfigsResource.java | 20 +-- .../bubble/resources/IdentityResource.java | 19 +-- .../java/bubble/resources/SearchResource.java | 12 +- .../java/bubble/resources/TagsResource.java | 4 +- .../account/AccountOwnedResource.java | 24 ++- .../account/AccountPromotionsResource.java | 10 +- .../resources/account/AccountsResource.java | 86 +++++------ .../resources/account/AuthResource.java | 137 ++++++++---------- .../bubble/resources/account/MeResource.java | 115 +++++++++++---- .../src/main/resources/bubble-config.yml | 1 + utils/cobbzilla-utils | 2 +- utils/cobbzilla-wizard | 2 +- 23 files changed, 297 insertions(+), 220 deletions(-) diff --git a/bubble-server/src/main/java/bubble/ApiConstants.java b/bubble-server/src/main/java/bubble/ApiConstants.java index bbcf3475..a4bd46e1 100644 --- a/bubble-server/src/main/java/bubble/ApiConstants.java +++ b/bubble-server/src/main/java/bubble/ApiConstants.java @@ -301,6 +301,7 @@ public class ApiConstants { public static final String API_TAG_BACKUP_RESTORE = "backup and restore"; public static final String API_TAG_NODE = "node"; public static final String API_TAG_NODE_MANAGER = "node manager"; + public static final String API_TAG_PAYMENT = "payment"; public static String getToken(String json) { if (json == null) return null; diff --git a/bubble-server/src/main/java/bubble/cloud/email/RenderedEmail.java b/bubble-server/src/main/java/bubble/cloud/email/RenderedEmail.java index b0bda33f..b9e3cacc 100644 --- a/bubble-server/src/main/java/bubble/cloud/email/RenderedEmail.java +++ b/bubble-server/src/main/java/bubble/cloud/email/RenderedEmail.java @@ -10,6 +10,8 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.Accessors; import org.cobbzilla.mail.SimpleEmailMessage; +import org.cobbzilla.wizard.model.OpenApiSchema; +import org.cobbzilla.wizard.model.entityconfig.annotations.ECField; import java.util.Map; @@ -17,11 +19,11 @@ import static java.util.UUID.randomUUID; import static org.cobbzilla.util.daemon.ZillaRuntime.now; import static org.cobbzilla.util.reflect.ReflectionUtil.copy; -@NoArgsConstructor @Accessors(chain=true) +@NoArgsConstructor @Accessors(chain=true) @OpenApiSchema public class RenderedEmail extends SimpleEmailMessage implements RenderedMessage { - @Getter private final long ctime = now(); - @Getter private final String uuid = randomUUID().toString(); + @ECField @Getter private final long ctime = now(); + @ECField @Getter private final String uuid = randomUUID().toString(); @Getter @Setter private Map ctx; public RenderedEmail (Map ctx) { this.ctx = ctx; } diff --git a/bubble-server/src/main/java/bubble/cloud/geoCode/GeoCodeResult.java b/bubble-server/src/main/java/bubble/cloud/geoCode/GeoCodeResult.java index 5bc2d946..81a8b2e6 100644 --- a/bubble-server/src/main/java/bubble/cloud/geoCode/GeoCodeResult.java +++ b/bubble-server/src/main/java/bubble/cloud/geoCode/GeoCodeResult.java @@ -10,16 +10,19 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.Accessors; +import org.cobbzilla.wizard.model.OpenApiSchema; +import org.cobbzilla.wizard.model.entityconfig.EntityFieldType; +import org.cobbzilla.wizard.model.entityconfig.annotations.ECField; import javax.persistence.Transient; import static org.cobbzilla.util.daemon.ZillaRuntime.big; -@NoArgsConstructor @AllArgsConstructor @Accessors(chain=true) +@NoArgsConstructor @AllArgsConstructor @Accessors(chain=true) @OpenApiSchema public class GeoCodeResult { - @Getter @Setter private String lat; - @Getter @Setter private String lon; + @ECField(type=EntityFieldType.decimal) @Getter @Setter private String lat; + @ECField(type=EntityFieldType.decimal) @Getter @Setter private String lon; @JsonIgnore @Transient public double getLatitude () { return big(lat).doubleValue(); } @JsonIgnore @Transient public double getLongitude () { return big(lon).doubleValue(); } diff --git a/bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocation.java b/bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocation.java index b4c918ff..8d42049a 100644 --- a/bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocation.java +++ b/bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocation.java @@ -12,12 +12,15 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.Accessors; import org.cobbzilla.util.math.Haversine; +import org.cobbzilla.wizard.model.OpenApiSchema; +import org.cobbzilla.wizard.model.entityconfig.EntityFieldType; +import org.cobbzilla.wizard.model.entityconfig.annotations.ECField; import javax.persistence.Transient; import static org.cobbzilla.util.daemon.ZillaRuntime.*; -@NoArgsConstructor @Accessors(chain=true) @ToString(of={"lat", "lon"}) +@NoArgsConstructor @Accessors(chain=true) @ToString(of={"lat", "lon"}) @OpenApiSchema public class GeoLocation { public static final GeoLocation NULL_LOCATION = new GeoLocation().setLat("-1.0").setLon("-1.0"); @@ -27,8 +30,8 @@ public class GeoLocation { @Getter @Setter private String region; @Getter @Setter private String city; - @Getter @Setter private String lat; - @Getter @Setter private String lon; + @ECField(type=EntityFieldType.decimal) @Getter @Setter private String lat; + @ECField(type=EntityFieldType.decimal) @Getter @Setter private String lon; @JsonIgnore @Transient public double getLatitude () { return big(lat).doubleValue(); } @JsonIgnore @Transient public double getLongitude () { return big(lon).doubleValue(); } diff --git a/bubble-server/src/main/java/bubble/cloud/geoTime/GeoTimeZone.java b/bubble-server/src/main/java/bubble/cloud/geoTime/GeoTimeZone.java index a3cba338..81785e7b 100644 --- a/bubble-server/src/main/java/bubble/cloud/geoTime/GeoTimeZone.java +++ b/bubble-server/src/main/java/bubble/cloud/geoTime/GeoTimeZone.java @@ -9,8 +9,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.Accessors; +import org.cobbzilla.wizard.model.OpenApiSchema; -@NoArgsConstructor @AllArgsConstructor @Accessors(chain=true) +@NoArgsConstructor @AllArgsConstructor @Accessors(chain=true) @OpenApiSchema public class GeoTimeZone { public static final GeoTimeZone UTC = new GeoTimeZone("Etc/UTC", "UTC", 0L); diff --git a/bubble-server/src/main/java/bubble/model/AppLinks.java b/bubble-server/src/main/java/bubble/model/AppLinks.java index 514a2359..c5b2eb31 100644 --- a/bubble-server/src/main/java/bubble/model/AppLinks.java +++ b/bubble-server/src/main/java/bubble/model/AppLinks.java @@ -5,14 +5,14 @@ package bubble.model; import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; +import org.cobbzilla.wizard.model.OpenApiSchema; import java.util.HashMap; import java.util.Map; -@Schema +@OpenApiSchema public class AppLinks extends BasicAppLinks { @JsonIgnore @Getter @Setter private Map locale = new HashMap<>(); diff --git a/bubble-server/src/main/java/bubble/model/BasicAppLinks.java b/bubble-server/src/main/java/bubble/model/BasicAppLinks.java index 73c69de2..d727ba3b 100644 --- a/bubble-server/src/main/java/bubble/model/BasicAppLinks.java +++ b/bubble-server/src/main/java/bubble/model/BasicAppLinks.java @@ -8,12 +8,14 @@ import lombok.Getter; import lombok.Setter; import org.cobbzilla.wizard.model.entityconfig.annotations.ECField; +import static org.cobbzilla.wizard.model.entityconfig.EntityFieldType.http_url; + public class BasicAppLinks { - @ECField @Getter @Setter private String ios; - @ECField @Getter @Setter private String android; - @ECField @Getter @Setter private String windows; - @ECField @Getter @Setter private String macosx; - @ECField @Getter @Setter private String linux; + @ECField(type=http_url) @Getter @Setter private String ios; + @ECField(type=http_url) @Getter @Setter private String android; + @ECField(type=http_url) @Getter @Setter private String windows; + @ECField(type=http_url) @Getter @Setter private String macosx; + @ECField(type=http_url) @Getter @Setter private String linux; } diff --git a/bubble-server/src/main/java/bubble/model/cloud/BubbleNodeKey.java b/bubble-server/src/main/java/bubble/model/cloud/BubbleNodeKey.java index f8fa792d..c4f07447 100644 --- a/bubble-server/src/main/java/bubble/model/cloud/BubbleNodeKey.java +++ b/bubble-server/src/main/java/bubble/model/cloud/BubbleNodeKey.java @@ -7,7 +7,6 @@ package bubble.model.cloud; import bubble.model.account.Account; import bubble.model.account.HasAccountNoName; import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -37,7 +36,7 @@ import static org.cobbzilla.util.security.ShaUtil.sha256_hex; import static org.cobbzilla.wizard.model.crypto.EncryptedTypes.ENCRYPTED_STRING; import static org.cobbzilla.wizard.model.crypto.EncryptedTypes.ENC_PAD; -@Entity @ECType(root=true) @ECTypeCreate(method="DISABLED") @Schema +@Entity @ECType(root=true) @ECTypeCreate(method="DISABLED") @NoArgsConstructor @Accessors(chain=true) @ToString(of={"publicKeyHash"}, callSuper=true) public class BubbleNodeKey extends IdentifiableBase implements HasAccountNoName { diff --git a/bubble-server/src/main/java/bubble/resources/BubbleMagicResource.java b/bubble-server/src/main/java/bubble/resources/BubbleMagicResource.java index bcd27f73..b91facae 100644 --- a/bubble-server/src/main/java/bubble/resources/BubbleMagicResource.java +++ b/bubble-server/src/main/java/bubble/resources/BubbleMagicResource.java @@ -4,6 +4,8 @@ */ package bubble.resources; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; import lombok.extern.slf4j.Slf4j; import org.glassfish.jersey.server.ContainerRequest; import org.springframework.stereotype.Service; @@ -17,7 +19,9 @@ import javax.ws.rs.core.Response; import static bubble.ApiConstants.BUBBLE_MAGIC_ENDPOINT; import static org.cobbzilla.util.http.HttpContentTypes.APPLICATION_JSON; +import static org.cobbzilla.util.http.HttpStatusCodes.SC_OK; import static org.cobbzilla.wizard.resources.ResourceUtil.ok; +import static org.cobbzilla.wizard.server.config.OpenApiConfiguration.API_TAG_UTILITY; @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) @@ -26,6 +30,11 @@ import static org.cobbzilla.wizard.resources.ResourceUtil.ok; public class BubbleMagicResource { @GET + @Operation(tags=API_TAG_UTILITY, + summary="Simple health check", + description="Returns a static string, verifies that API can communicate over the network", + responses=@ApiResponse(responseCode=SC_OK, description="fixed response") + ) public Response get(@Context ContainerRequest ctx) { return ok("you are ok. the magic is ok too."); } diff --git a/bubble-server/src/main/java/bubble/resources/DebugResource.java b/bubble-server/src/main/java/bubble/resources/DebugResource.java index f1456c20..eae0f881 100644 --- a/bubble-server/src/main/java/bubble/resources/DebugResource.java +++ b/bubble-server/src/main/java/bubble/resources/DebugResource.java @@ -14,6 +14,8 @@ import bubble.model.account.message.AccountMessageType; import bubble.model.account.message.ActionTarget; import bubble.server.BubbleConfiguration; import com.fasterxml.jackson.databind.JsonNode; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.glassfish.jersey.server.ContainerRequest; @@ -37,10 +39,12 @@ import static bubble.cloud.auth.RenderedMessage.filteredInbox; import static org.cobbzilla.util.daemon.ZillaRuntime.die; import static org.cobbzilla.util.daemon.ZillaRuntime.empty; import static org.cobbzilla.util.http.HttpContentTypes.APPLICATION_JSON; +import static org.cobbzilla.util.http.HttpStatusCodes.SC_OK; import static org.cobbzilla.util.json.JsonUtil.*; import static org.cobbzilla.util.reflect.ReflectionUtil.forName; import static org.cobbzilla.util.reflect.ReflectionUtil.instantiate; import static org.cobbzilla.wizard.resources.ResourceUtil.*; +import static org.cobbzilla.wizard.server.config.OpenApiConfiguration.API_TAG_UTILITY; @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) @@ -51,6 +55,11 @@ public class DebugResource { @Autowired private BubbleConfiguration configuration; @GET @Path("/inbox/{type}/{recipient}") + @Operation(tags=API_TAG_UTILITY, + summary="Read debug mailboxes", + description="Read debug mailboxes. Must be admin. These are only used in testing.", + responses=@ApiResponse(responseCode=SC_OK, description="a JSON array of RenderedMessage") + ) public Response inbox(@Context ContainerRequest ctx, @PathParam("type") CloudServiceType type, @PathParam("recipient") String recipient, diff --git a/bubble-server/src/main/java/bubble/resources/DetectResource.java b/bubble-server/src/main/java/bubble/resources/DetectResource.java index 76582725..d9f47d4f 100644 --- a/bubble-server/src/main/java/bubble/resources/DetectResource.java +++ b/bubble-server/src/main/java/bubble/resources/DetectResource.java @@ -4,8 +4,9 @@ */ package bubble.resources; -import bubble.cloud.CloudServiceType; import bubble.service.cloud.GeoService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; import lombok.extern.slf4j.Slf4j; import org.glassfish.grizzly.http.server.Request; import org.glassfish.jersey.server.ContainerRequest; @@ -21,7 +22,10 @@ import javax.ws.rs.core.Response; import static bubble.ApiConstants.*; import static org.cobbzilla.util.http.HttpContentTypes.APPLICATION_JSON; -import static org.cobbzilla.wizard.resources.ResourceUtil.*; +import static org.cobbzilla.util.http.HttpStatusCodes.SC_OK; +import static org.cobbzilla.wizard.resources.ResourceUtil.ok; +import static org.cobbzilla.wizard.resources.ResourceUtil.optionalUserPrincipal; +import static org.cobbzilla.wizard.server.config.OpenApiConfiguration.API_TAG_UTILITY; @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) @@ -32,12 +36,22 @@ public class DetectResource { @Autowired private GeoService geoService; @GET @Path(EP_LOCALE) + @Operation(tags=API_TAG_UTILITY, + summary="Detect the caller's locale", + description="Detect the caller's locale", + responses=@ApiResponse(responseCode=SC_OK, description="an array of locale strings in priority order") + ) public Response detectLocales(@Context Request req, @Context ContainerRequest ctx) { return ok(geoService.getSupportedLocales(optionalUserPrincipal(ctx), getRemoteHost(req), normalizeLangHeader(req))); } @GET @Path(EP_TIMEZONE) + @Operation(tags=API_TAG_UTILITY, + summary="Detect the caller's time zone", + description="Detect the caller's time zone", + responses=@ApiResponse(responseCode=SC_OK, description="the TimeZone ") + ) public Response detectTimezone(@Context Request req, @Context ContainerRequest ctx) { return ok(geoService.getTimeZone(optionalUserPrincipal(ctx), getRemoteHost(req))); diff --git a/bubble-server/src/main/java/bubble/resources/EntityConfigsResource.java b/bubble-server/src/main/java/bubble/resources/EntityConfigsResource.java index 7bd8518f..bab23653 100644 --- a/bubble-server/src/main/java/bubble/resources/EntityConfigsResource.java +++ b/bubble-server/src/main/java/bubble/resources/EntityConfigsResource.java @@ -53,17 +53,12 @@ public class EntityConfigsResource extends AbstractEntityConfigsResource { @POST @Path("/set/{param}") @Operation(security=@SecurityRequirement(name=SEC_API_KEY), - tags={API_TAG_UTILITY}, + tags=API_TAG_UTILITY, summary="Set a configuration parameter to `true`", description="Set a configuration parameter to `true`", - parameters={@Parameter(name="param", description="the name of the parameter to set")}, - responses={ - @ApiResponse(responseCode=SC_OK, description="the value that was set", - content={@Content(mediaType=APPLICATION_JSON, examples={ - @ExampleObject(name="should always return true", value="true") - } - )}) - } + parameters=@Parameter(name="param", description="the name of the parameter to set"), + responses=@ApiResponse(responseCode=SC_OK, description="the value that was set", + content=@Content(mediaType=APPLICATION_JSON, examples=@ExampleObject(name="should always return true", value="true"))) ) public Response setConfig (@Context ContainerRequest ctx, @PathParam("param") String param) { @@ -72,7 +67,7 @@ public class EntityConfigsResource extends AbstractEntityConfigsResource { @POST @Path("/set/{param}/{value}") @Operation(security=@SecurityRequirement(name=SEC_API_KEY), - tags={API_TAG_UTILITY}, + tags=API_TAG_UTILITY, summary="Set a configuration parameter to a value", description="Set a configuration parameter to a value", parameters={ @@ -81,10 +76,7 @@ public class EntityConfigsResource extends AbstractEntityConfigsResource { }, responses={ @ApiResponse(responseCode=SC_OK, description="the value that was set", - content={@Content(mediaType=APPLICATION_JSON, examples={ - @ExampleObject(name="if the value was the String 'foo'", value="\"foo\"") - } - )}) + content=@Content(mediaType=APPLICATION_JSON, examples=@ExampleObject(name="if the value was the String 'foo'", value="\"foo\""))) } ) public Response setConfig (@Context ContainerRequest ctx, diff --git a/bubble-server/src/main/java/bubble/resources/IdentityResource.java b/bubble-server/src/main/java/bubble/resources/IdentityResource.java index 0b1793b7..0939235f 100644 --- a/bubble-server/src/main/java/bubble/resources/IdentityResource.java +++ b/bubble-server/src/main/java/bubble/resources/IdentityResource.java @@ -49,19 +49,16 @@ public class IdentityResource { @GET @Path("/{id}") @Operation(security=@SecurityRequirement(name=SEC_API_KEY), - tags={API_TAG_UTILITY}, + tags=API_TAG_UTILITY, summary="Find what object(s) an ID belongs to. Useful when you have a UUID but don't know what kind of thing it refers to, if any.", description="Searches all model objects by ID. The id parameter is typically a UUID or name", - parameters={@Parameter(name="id", description="an identifier (typically UUID or name) to search for")}, - responses={ - @ApiResponse(responseCode=SC_OK, description="a JSON object where the property names are entity types, and a property's corresponding value is the object of that type found with the given ID", - content={@Content(mediaType=APPLICATION_JSON, examples={ - @ExampleObject(name="usually a UUID only matches one object", value="{\"CloudService\": {\"uuid\": \"the-ID-you-searched-for\", \"other-cloud-service-fields\": \"would-be-shown\"}}"), - @ExampleObject(name="a UUID for an Account also matches the AccountPolicy", value="{\"Account\": {\"uuid\": \"the-ID-you-searched-for\", \"other-account-fields\": \"would-be-shown\"}, \"AccountPolicy\": {\"uuid\": \"the-ID-you-searched-for\", \"other-policy-fields\": \"would-be-shown\"}}"), - @ExampleObject(name="empty JSON object when no matches are found", value="{}") - } - )}) - } + parameters=@Parameter(name="id", description="an identifier (typically UUID or name) to search for"), + responses=@ApiResponse(responseCode=SC_OK, description="a JSON object where the property names are entity types, and a property's corresponding value is the object of that type found with the given ID", + content=@Content(mediaType=APPLICATION_JSON, examples={ + @ExampleObject(name="usually a UUID only matches one object", value="{\"CloudService\": {\"uuid\": \"the-ID-you-searched-for\", \"other-cloud-service-fields\": \"would-be-shown\"}}"), + @ExampleObject(name="a UUID for an Account also matches the AccountPolicy", value="{\"Account\": {\"uuid\": \"the-ID-you-searched-for\", \"other-account-fields\": \"would-be-shown\"}, \"AccountPolicy\": {\"uuid\": \"the-ID-you-searched-for\", \"other-policy-fields\": \"would-be-shown\"}}"), + @ExampleObject(name="empty JSON object when no matches are found", value="{}") + })) ) public Response identify(@Context Request req, @Context ContainerRequest ctx, diff --git a/bubble-server/src/main/java/bubble/resources/SearchResource.java b/bubble-server/src/main/java/bubble/resources/SearchResource.java index 68df6303..90a0cca0 100644 --- a/bubble-server/src/main/java/bubble/resources/SearchResource.java +++ b/bubble-server/src/main/java/bubble/resources/SearchResource.java @@ -38,7 +38,7 @@ public class SearchResource { @GET @Path("/{type}") @Operation(security=@SecurityRequirement(name=SEC_API_KEY), - tags={API_TAG_SEARCH}, + tags=API_TAG_SEARCH, summary="Search model objects", description="Search model objects", parameters={ @@ -50,9 +50,7 @@ public class SearchResource { @Parameter(name=Q_SIZE, description="page size. default is 10, max is 50"), @Parameter(name=Q_SORT, description="sort field. prefix with + or - to indicate ascending/descending") }, - responses={ - @ApiResponse(responseCode=SC_OK, description="a SearchResults object, or if meta was true then a SqlViewField[] array") - } + responses=@ApiResponse(responseCode=SC_OK, description="a SearchResults object, or if meta was true then a SqlViewField[] array") ) public Response search(@Context Request req, @Context ContainerRequest ctx, @@ -68,7 +66,7 @@ public class SearchResource { @POST @Path("/{type}") @Operation(security=@SecurityRequirement(name=SEC_API_KEY), - tags={API_TAG_SEARCH}, + tags=API_TAG_SEARCH, summary="Search model objects", description="Search model objects", parameters={ @@ -80,9 +78,7 @@ public class SearchResource { @Parameter(name=Q_SIZE, description="page size. default is 10, max is 50"), @Parameter(name=Q_SORT, description="sort field. prefix with + or - to indicate ascending/descending") }, - responses={ - @ApiResponse(responseCode=SC_OK, description="a SearchResults object, or if meta was true then a SqlViewField[] array") - } + responses=@ApiResponse(responseCode=SC_OK, description="a SearchResults object, or if meta was true then a SqlViewField[] array") ) public Response search(@Context Request req, @Context ContainerRequest ctx, diff --git a/bubble-server/src/main/java/bubble/resources/TagsResource.java b/bubble-server/src/main/java/bubble/resources/TagsResource.java index 869a9ccc..0693e05c 100644 --- a/bubble-server/src/main/java/bubble/resources/TagsResource.java +++ b/bubble-server/src/main/java/bubble/resources/TagsResource.java @@ -46,8 +46,8 @@ public class TagsResource { @Operation(security=@SecurityRequirement(name=SEC_API_KEY), summary="Set a tag", description="Set a tag", - parameters={@Parameter(name="name", description="name of the tag")}, - responses={@ApiResponse(responseCode=SC_OK, description="a BubbleTags object representing the current list of tags")} + parameters=@Parameter(name="name", description="name of the tag"), + responses=@ApiResponse(responseCode=SC_OK, description="a BubbleTags object representing the current list of tags") ) public Response set(@Context ContainerRequest ctx, @PathParam("name") String name, diff --git a/bubble-server/src/main/java/bubble/resources/account/AccountOwnedResource.java b/bubble-server/src/main/java/bubble/resources/account/AccountOwnedResource.java index df6ea23b..6909f2c9 100644 --- a/bubble-server/src/main/java/bubble/resources/account/AccountOwnedResource.java +++ b/bubble-server/src/main/java/bubble/resources/account/AccountOwnedResource.java @@ -65,10 +65,10 @@ public class AccountOwnedResource