<message>OpenAPI spec was not generated — target/openapi.json is missing. The springdoc-openapi-maven-plugin logs HTTP failures but does not fail the build; scan the log above for "An error has occured" or a 5xx response from /v3/api-docs/thingsboard and fix the underlying issue (e.g. duplicate @Schema names rejected by SwaggerConfiguration).</message>
notes="Returns a page of alarms for the selected entity. Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error. "+
@io.swagger.v3.oas.annotations.parameters.RequestBody(description="Test alarm rule TBEL condition expression. The expression must return a boolean value.")
@ -136,7 +136,7 @@ public class AuthController extends BaseController {
"If token is valid, returns '303 See Other' (redirect) response code with the correct address of 'Create Password' page and same 'activateToken' specified in the URL parameters. "+
"If token is not valid, returns '409 Conflict'. "+
@ -176,7 +176,7 @@ public class AuthController extends BaseController {
"If token is valid, returns '303 See Other' (redirect) response code with the correct address of 'Reset Password' page and same 'resetToken' specified in the URL parameters. "+
"If token is not valid, returns '409 Conflict'. "+
notes="Fetch tenant calculated fields based on the filter.")
@Parameters({
@Parameter(name="name",description="Repeatable name query parameter",in=ParameterIn.QUERY,required=false,array=@ArraySchema(schema=@Schema(type="string")))
@Parameter(description="List of types of the Rule Nodes, (ENRICHMENT, FILTER, TRANSFORMATION, ACTION or EXTERNAL)",array=@ArraySchema(schema=@Schema(type="string")),required=true)
@ -444,106 +444,6 @@ public class ControllerConstants {
" * 'BOOLEAN' - used for boolean values. Operations: EQUAL, NOT_EQUAL;\n"+
" * 'DATE_TIME' - similar to numeric, transforms value to milliseconds since epoch. Operations: EQUAL, NOT_EQUAL, GREATER, LESS, GREATER_OR_EQUAL, LESS_OR_EQUAL; \n";
protectedstaticfinalStringRELATION_TYPE_PARAM_DESCRIPTION="A string value representing relation type between entities. For example, 'Contains', 'Manages'. It can be any string value.";
protectedstaticfinalStringRELATION_TYPE_GROUP_PARAM_DESCRIPTION="A string value representing relation type group. For example, 'COMMON'";
@ -1328,8 +1228,6 @@ public class ControllerConstants {
@ -1577,40 +1262,11 @@ public class ControllerConstants {
" }\n"+
"}"+MARKDOWN_CODE_BLOCK_END;
protectedstaticfinalStringDEVICE_PROFILE_DATA_DEFINITION=NEW_LINE+"# Device profile data definition"+NEW_LINE+
"Device profile data object contains alarm rules configuration, device provision strategy and transport type configuration for device connectivity. Let's review some examples. "+
"Device profile data object contains device provision strategy and transport type configuration for device connectivity. Let's review some examples. "+
"First one is the default device profile data configuration and second one - the custom one. "+
"Alarm Schedule JSON object represents the time interval during which the alarm rule is active. Note, "+
NEW_LINE+DEVICE_PROFILE_ALARM_SCHEDULE_ALWAYS_EXAMPLE+NEW_LINE+"means alarm rule is active all the time. "+
"**'daysOfWeek'** field represents Monday as 1, Tuesday as 2 and so on. **'startsOn'** and **'endsOn'** fields represent hours in millis (e.g. 64800000 = 18:00 or 6pm). "+
"**'enabled'** flag specifies if item in a custom rule is active for specific day of the week:"+NEW_LINE+
protectedstaticfinalStringALARM_CONDITION_TYPE="# Alarm condition type (**'spec'**)"+NEW_LINE+
"Alarm condition type can be either simple, duration, or repeating. For example, 5 times in a row or during 5 minutes."+NEW_LINE+
"Note, **'userValue'** field is not used and reserved for future usage, **'dynamicValue'** is used for condition appliance by using the value of the **'sourceAttribute'** "+
"or else **'defaultValue'** is used (if **'sourceAttribute'** is absent).\n"+
"\n**'sourceType'** of the **'sourceAttribute'** can be: \n"+
" * 'CURRENT_DEVICE';\n"+
" * 'CURRENT_CUSTOMER';\n"+
" * 'CURRENT_TENANT'."+NEW_LINE+
"**'sourceAttribute'** can be inherited from the owner if **'inherit'** is set to true (for CURRENT_DEVICE and CURRENT_CUSTOMER)."+NEW_LINE+
@ -413,6 +417,8 @@ public class DashboardController extends BaseController {
"If 'homeDashboardId' parameter is not set on the User level and the User has authority 'CUSTOMER_USER', check the same parameter for the corresponding Customer. "+
"If 'homeDashboardId' parameter is not set on the User and Customer levels then checks the same parameter for the Tenant that owns the user. "
publicList<DashboardInfo>getDashboardsByIds(@Parameter(description="A list of dashboard ids, separated by comma ','",array=@ArraySchema(schema=@Schema(type="string")),required=true)
publicList<DashboardInfo>getDashboardsByIds(@Parameter(description="A list of dashboard ids, separated by comma ','",array=@ArraySchema(schema=@Schema(type="string")),required=true)
@ApiOperation(value="Download server certificate using file path defined in device.connectivity properties (downloadServerCertificate)",notes="Download server certificate.")
@ApiOperation(value="Download server certificate using file path defined in device.connectivity properties (downloadServerCertificate)",
"- Credentials type: <b>\"X509\"</b> with <b>device profile ID</b> below: \n\n"+
"Note: <b>credentialsId</b> - format <b>Sha3Hash</b>, <b>certificateValue</b> - format <b>PEM</b> (with \"--BEGIN CERTIFICATE----\" and -\"----END CERTIFICATE-\").\n\n"+
"- Credentials type: **\"X509\"** with **device profile ID** below: \n\n"+
"Note: **credentialsId** - format **Sha3Hash**, **certificateValue** - format **PEM** (with \"--BEGIN CERTIFICATE----\" and -\"----END CERTIFICATE-\").\n\n"+
"Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity. "+
@ -320,14 +322,14 @@ public class DeviceController extends BaseController {
"Then use current method to update the credentials type and value. It is not possible to create multiple device credentials for the same device.\n"+
"The structure of device credentials id and value is simple for the 'ACCESS_TOKEN' but is much more complex for the 'MQTT_BASIC' or 'LWM2M_CREDENTIALS'.\n"+
"You may find the example of device with different type of credentials below: \n\n"+
"- Credentials type: <b>\"Access token\"</b> with <b>device ID</b> and with <b>device ID</b> below: \n\n"+
"- Credentials type: **\"Access token\"** with **device ID** and with **device ID** below: \n\n"+
"- Credentials type: <b>\"X509\"</b> with <b>device profile ID</b> below: \n\n"+
"Note: <b>credentialsId</b> - format <b>Sha3Hash</b>, <b>certificateValue</b> - format <b>PEM</b> (with \"--BEGIN CERTIFICATE----\" and -\"----END CERTIFICATE-\").\n\n"+
"- Credentials type: **\"X509\"** with **device profile ID** below: \n\n"+
"Note: **credentialsId** - format **Sha3Hash**, **certificateValue** - format **PEM** (with \"--BEGIN CERTIFICATE----\" and -\"----END CERTIFICATE-\").\n\n"+
@ -502,8 +507,7 @@ public class DeviceController extends BaseController {
@ApiOperation(value="Get Devices By Ids (getDevicesByIds)",
notes="Requested devices must be owned by tenant or assigned to customer which user is performing the request. "+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
@Parameter(description="A string value representing external entity id. This is `externalId` property of an entity, or otherwise if not set - simply id of this entity.")
@ -263,7 +264,7 @@ public class EntitiesVersionControlController extends BaseController {
"If specified branch does not exist - empty page data will be returned. "+
"The response structure is the same as for `listEntityVersions` API method."+
publicList<EntityRelation>findEntityRelationsByQuery(@Parameter(description="A JSON value representing the entity relations query object.",required=true)
publicList<EntityRelationInfo>findEntityRelationInfosByQuery(@Parameter(description="A JSON value representing the entity relations query object.",required=true)
@ -337,13 +345,13 @@ public class EntityViewController extends BaseController {
}
}
@ApiOperation(value="Find related entity views (findByQuery)",
@ApiOperation(value="Find related entity views (findEntityViewsByQuery)",
notes="Returns all entity views that are related to the specific entity. "+
"The entity id, relation type, entity view types, depth of the search, and other query parameters defined using complex 'EntityViewSearchQuery' object. "+
"See 'Model' tab of the Parameters for more info."+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
publicList<EntityView>getEntityViewsByIds(@Parameter(description="A list of entity view ids, separated by comma ','",array=@ArraySchema(schema=@Schema(type="string")),required=true)
publicList<EntityView>getEntityViewsByIdsV1(@Parameter(description="A list of entity view ids, separated by comma ','",array=@ArraySchema(schema=@Schema(type="string")),required=true)
publicList<EntityView>getEntityViewsByIds(@Parameter(description="A list of entity view ids, separated by comma ','",array=@ArraySchema(schema=@Schema(type="string")),required=true)
@ -43,12 +43,12 @@ public class MailConfigTemplateController extends BaseController {
privatestaticfinalStringMAIL_CONFIG_TEMPLATE_DEFINITION="Mail configuration template is set of default smtp settings for mail server that specific provider supports";
publicList<NotificationTarget>getNotificationTargetsByIds(@Parameter(description="Comma-separated list of uuids representing targets ids",array=@ArraySchema(schema=@Schema(type="string")),required=true)
publicList<NotificationTarget>getNotificationTargetsByIdsV1(@Parameter(description="Comma-separated list of uuids representing targets ids",array=@ArraySchema(schema=@Schema(type="string")),required=true)
@RequestParam("ids")UUID[]ids,
@AuthenticationPrincipalSecurityUseruser){
// PE: generic permission
@ -166,6 +165,17 @@ public class NotificationTargetController extends BaseController {
publicList<NotificationTarget>getNotificationTargetsByIds(@Parameter(description="Comma-separated list of uuids representing targets ids",array=@ArraySchema(schema=@Schema(type="string")),required=true)
@ApiOperation(value="Get the list of all OAuth2 client registration templates (getClientRegistrationTemplates)"+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH,
@ApiOperation(value="Get the list of all OAuth2 client registration templates (getOAuth2ClientRegistrationTemplates)"+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH,
@ApiOperation(value="Get Mobile application settings (getMobileAppSettings)",
@ApiOperation(value="Get Mobile application settings (getQrCodeSettings)",
notes="The response payload contains configuration for android/iOS applications and platform qr code widget settings."+AVAILABLE_FOR_ANY_AUTHORIZED_USER)
@ -113,7 +114,7 @@ public class RpcV2Controller extends AbstractRpcController {
privatestaticfinalStringTWO_WAY_RPC_REQUEST_DESCRIPTION="Sends the two-way remote-procedure call (RPC) request to device. "+RPC_REQUEST_DESCRIPTION+TWO_WAY_RPC_RESULT+TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH;
@ -449,6 +502,9 @@ public class TelemetryController extends BaseController {
" Use 'rewriteLatestIfDeleted' to rewrite latest value (stored in separate table for performance) if the value's timestamp matches the time-range and 'deleteLatest' param is true."+
" The replacement value will be fetched from the 'time series' table, and its timestamp will be the most recent one before the defined time-range. "+
TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
@Parameters({
@Parameter(name="key",description="Repeatable key query parameter (alternative to comma-separated 'keys')",in=ParameterIn.QUERY,required=false,array=@ArraySchema(schema=@Schema(type="string")))
})
@ApiResponses(value={
@ApiResponse(responseCode="200",description="Time series for the selected keys in the request was removed. "+
"Platform creates an audit log event about entity time series removal with action type 'TIMESERIES_DELETED'."),
@ -473,6 +529,7 @@ public class TelemetryController extends BaseController {
@Parameter(description="If the parameter is set to true, the latest telemetry will be rewritten in case that current latest value was removed, otherwise, in case that parameter is set to false the new latest value will not set.")
@Parameter(name="key",description="Repeatable key query parameter (alternative to comma-separated 'keys')",in=ParameterIn.QUERY,required=false,array=@ArraySchema(schema=@Schema(type="string")))
})
@ApiResponses(value={
@ApiResponse(responseCode="200",description="Entity attributes was removed for the selected keys in the request. "+
@ApiResponse(responseCode="200",description="Entity attributes were removed for the selected keys in the request (keys that did not exist are silently ignored). "+
"Platform creates an audit log event about entity attributes removal with action type 'ATTRIBUTES_DELETED'."),
@ApiResponse(responseCode="400",description="Platform returns a bad request in case if keys or scope are not specified."),
@ApiResponse(responseCode="401",description="User is not authorized to delete entity attributes for selected entity. Most likely, User belongs to different Customer or Tenant."),
@ -568,6 +633,7 @@ public class TelemetryController extends BaseController {
@ -133,7 +133,7 @@ public class TenantController extends BaseController {
@ApiOperation(value="Get Tenants (getTenants)",notes="Returns a page of tenants registered in the platform. "+PAGE_DATA_PARAMETERS+SYSTEM_AUTHORITY_PARAGRAPH)
@ -242,7 +243,7 @@ public class TenantProfileController extends BaseController {
@ApiOperation(value="Get Tenant Profiles Info (getTenantProfileInfos)",notes="Returns a page of tenant profile info objects registered in the platform. "
publicList<TenantProfile>getTenantProfilesByIds(@Parameter(description="Comma-separated list of tenant profile ids",array=@ArraySchema(schema=@Schema(type="string")))
@ApiOperation(value="Get Tenant Profile list (getTenantProfileList)")
@GetMapping(value="/tenantProfiles/list")
@PreAuthorize("hasAuthority('SYS_ADMIN')")
publicList<TenantProfile>getTenantProfileList(@Parameter(description="Comma-separated list of tenant profile ids",array=@ArraySchema(schema=@Schema(type="string")))
@ -209,8 +210,7 @@ public class WidgetTypeController extends AutoCommitController {
}
}
@ApiOperation(value="Get all Widget types for specified Bundle (getBundleWidgetTypesByBundleAlias) (Deprecated)",
notes="Returns an array of Widget Type objects that belong to specified Widget Bundle."+WIDGET_TYPE_DESCRIPTION+" "+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
@ApiOperation(value="Get all Widget types for specified Bundle (getBundleWidgetTypes)",
notes="Returns an array of Widget Type objects that belong to specified Widget Bundle."+WIDGET_TYPE_DESCRIPTION+" "+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
@ApiOperation(value="Get all Widget types details for specified Bundle (getBundleWidgetTypesDetailsByBundleAlias) (Deprecated)",
notes="Returns an array of Widget Type Details objects that belong to specified Widget Bundle."+WIDGET_TYPE_DETAILS_DESCRIPTION+" "+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
@ApiOperation(value="Get all Widget types for specified Bundle (getBundleWidgetTypes)",
notes="Returns an array of Widget Type objects that belong to specified Widget Bundle."+WIDGET_TYPE_DESCRIPTION+" "+SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH)
@ -222,11 +222,10 @@ public class WidgetsBundleController extends BaseController {
}
}
@ApiOperation(value="Get all Widget Bundles (getWidgetsBundles)",
notes="Returns an array of Widget Bundle objects that are available for current user."+WIDGET_BUNDLE_DESCRIPTION+" "+AVAILABLE_FOR_ANY_AUTHORIZED_USER)
@ -235,13 +234,18 @@ public class WidgetsBundleController extends BaseController {
}
}
@ApiOperation(value="Get Widgets Bundles By Ids (getWidgetsBundlesByIds)",
notes="Requested widgets bundles must be system level or owned by tenant of the user which is performing the request. "+
NEW_LINE)
@ApiOperation(value="Get all Widget Bundles (getAllWidgetsBundles)",
notes="Returns an array of Widget Bundle objects that are available for current user."+WIDGET_BUNDLE_DESCRIPTION+" "+AVAILABLE_FOR_ANY_AUTHORIZED_USER)