From 1912c0f8022a8158fa2e3e1ee2536aa68502c3c2 Mon Sep 17 00:00:00 2001 From: Anhelina Date: Tue, 19 May 2026 14:22:16 +0300 Subject: [PATCH 1/3] FINERACT-1222: Add Swagger tags for User Administration --- ...user-data-gradle-plugin.gradle.plugin-2.0.2.pom | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 gradle_home/caches/modules-2/files-2.1/com.gradle.common-custom-user-data-gradle-plugin/com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin/2.0.2/3c1de1ebaddc29abd0359a8498563ae930204486/com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin-2.0.2.pom diff --git a/gradle_home/caches/modules-2/files-2.1/com.gradle.common-custom-user-data-gradle-plugin/com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin/2.0.2/3c1de1ebaddc29abd0359a8498563ae930204486/com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin-2.0.2.pom b/gradle_home/caches/modules-2/files-2.1/com.gradle.common-custom-user-data-gradle-plugin/com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin/2.0.2/3c1de1ebaddc29abd0359a8498563ae930204486/com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin-2.0.2.pom new file mode 100644 index 00000000000..a40f72a4dfc --- /dev/null +++ b/gradle_home/caches/modules-2/files-2.1/com.gradle.common-custom-user-data-gradle-plugin/com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin/2.0.2/3c1de1ebaddc29abd0359a8498563ae930204486/com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin-2.0.2.pom @@ -0,0 +1,14 @@ + + 4.0.0 + com.gradle.common-custom-user-data-gradle-plugin + com.gradle.common-custom-user-data-gradle-plugin.gradle.plugin + 2.0.2 + pom + + + com.gradle + common-custom-user-data-gradle-plugin + 2.0.2 + + + \ No newline at end of file From b0eab6fe48d340b3afab8ba0507d51665a85bb35 Mon Sep 17 00:00:00 2001 From: Anhelina Date: Tue, 19 May 2026 16:14:30 +0300 Subject: [PATCH 2/3] refactor: fix style and format imports for useradministration api --- et | 288 ++++++++++++++++++ .../api/PasswordPreferencesApiResource.java | 8 +- .../api/PermissionsApiResource.java | 4 +- .../api/RolesApiResource.java | 25 +- .../api/UsersApiResource.java | 29 +- .../api/UsersApiResourceSwagger.java | 2 - 6 files changed, 328 insertions(+), 28 deletions(-) create mode 100644 et diff --git a/et b/et new file mode 100644 index 00000000000..b46337ecbf8 --- /dev/null +++ b/et @@ -0,0 +1,288 @@ +warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/notification/api/NotificationApiResource.java', LF will be replaced by CRLF the next time Git touches it +warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java', LF will be replaced by CRLF the next time Git touches it +warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java', LF will be replaced by CRLF the next time Git touches it +warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java', LF will be replaced by CRLF the next time Git touches it +warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java', LF will be replaced by CRLF the next time Git touches it +warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java', LF will be replaced by CRLF the next time Git touches it +diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java +index c214d3e80..ab714d5df 100644 +--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java ++++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java +@@ -30,10 +30,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; + import jakarta.ws.rs.Consumes; + import jakarta.ws.rs.GET; + import jakarta.ws.rs.PUT; +-import io.swagger.v3.oas.annotations.Operation; +-import io.swagger.v3.oas.annotations.tags.Tag; + import jakarta.ws.rs.Path; +- + import jakarta.ws.rs.Produces; + import jakarta.ws.rs.core.Context; + import jakarta.ws.rs.core.MediaType; +@@ -70,7 +67,8 @@ public class PasswordPreferencesApiResource { + @Produces({ MediaType.APPLICATION_JSON }) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.GetPasswordPreferencesTemplateResponse.class))) }) +- @Operation(summary = "List Password Preferences", description = "Returns the password policies and their current status (active/inactive).", tags = {"Password preferences"}) ++ @Operation(summary = "List Password Preferences", description = "Returns the password policies and their current status (active/inactive).", tags = { ++ "Password preferences" }) + public String retrieve(@Context final UriInfo uriInfo) { +  + this.context.authenticatedUser().validateHasReadPermission(PasswordPreferencesApiConstants.ENTITY_NAME); +@@ -86,7 +84,7 @@ public class PasswordPreferencesApiResource { + @PUT + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Update password preferences", tags = {"Password preferences"}, description = "") ++ @Operation(summary = "Update password preferences", tags = { "Password preferences" }, description = "") + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.PutPasswordPreferencesTemplateRequest.class))) + @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK") }) + public String update(@Parameter(hidden = true) final String apiRequestBodyAsJson) { +@@ -104,8 +102,8 @@ public class PasswordPreferencesApiResource { + @GET + @Path("/template") + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "List Application Password validation policies", tags = {"Password preferences"}, description = "ARGUMENTS\n" + "Example Requests:\n" + "\n" +- + "passwordpreferences") ++ @Operation(summary = "List Application Password validation policies", tags = { "Password preferences" }, description = "ARGUMENTS\n" ++ + "Example Requests:\n" + "\n" + "passwordpreferences") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.GetPasswordPreferencesTemplateResponse.class)))) }) + public String template(@Context final UriInfo uriInfo) { +diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java +index 42828e959..7ff236309 100644 +--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java ++++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java +@@ -30,10 +30,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; + import jakarta.ws.rs.Consumes; + import jakarta.ws.rs.GET; + import jakarta.ws.rs.PUT; +-import io.swagger.v3.oas.annotations.Operation; +-import io.swagger.v3.oas.annotations.tags.Tag; + import jakarta.ws.rs.Path; +- + import jakarta.ws.rs.Produces; + import jakarta.ws.rs.core.Context; + import jakarta.ws.rs.core.MediaType; +@@ -75,7 +72,7 @@ public class PermissionsApiResource { +  + @GET + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "List Application Permissions", tags = {"Permissions"}, description = "ARGUMENTS\n" ++ @Operation(summary = "List Application Permissions", tags = { "Permissions" }, description = "ARGUMENTS\n" + + "makerCheckerableoptional, Values are true, false. Default is false.\n" + + "If makerCheckerable=false or not supplied then a list of application permissions is returned. The \"selected\" attribute is always true in this case.\n" + + "\n" +@@ -103,7 +100,7 @@ public class PermissionsApiResource { + @PUT + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Enable/Disable Permissions for Maker Checker", tags = {"Permissions"}, description = "") ++ @Operation(summary = "Enable/Disable Permissions for Maker Checker", tags = { "Permissions" }, description = "") + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = PermissionsApiResourceSwagger.PutPermissionsRequest.class))) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = CommandProcessingResult.class))) }) +diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java +index 3374ac389..d456b7262 100644 +--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java ++++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java +@@ -33,10 +33,7 @@ import jakarta.ws.rs.DELETE; + import jakarta.ws.rs.GET; + import jakarta.ws.rs.POST; + import jakarta.ws.rs.PUT; +-import io.swagger.v3.oas.annotations.Operation; +-import io.swagger.v3.oas.annotations.tags.Tag; + import jakarta.ws.rs.Path; +- + import jakarta.ws.rs.PathParam; + import jakarta.ws.rs.Produces; + import jakarta.ws.rs.QueryParam; +@@ -100,7 +97,8 @@ public class RolesApiResource { +  + @GET + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "List Roles", tags = {"Roles"}, description = "Example Requests:\n" + "\n" + "roles\n" + "\n" + "\n" + "roles?fields=name") ++ @Operation(summary = "List Roles", tags = { "Roles" }, description = "Example Requests:\n" + "\n" + "roles\n" + "\n" + "\n" ++ + "roles?fields=name") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesResponse.class)))) }) + public String retrieveAllRoles(@Context final UriInfo uriInfo) { +@@ -116,7 +114,7 @@ public class RolesApiResource { + @POST + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Create a New Role", tags = {"Roles"}, description = "Mandatory Fields\n" + "name, description") ++ @Operation(summary = "Create a New Role", tags = { "Roles" }, description = "Mandatory Fields\n" + "name, description") + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesRequest.class))) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesResponse.class))) }) +@@ -135,7 +133,8 @@ public class RolesApiResource { + @GET + @Path("{roleId}") + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Retrieve a Role", tags = {"Roles"}, description = "Example Requests:\n" + "\n" + "roles/1\n" + "\n" + "\n" + "roles/1?fields=name") ++ @Operation(summary = "Retrieve a Role", tags = { "Roles" }, description = "Example Requests:\n" + "\n" + "roles/1\n" + "\n" + "\n" ++ + "roles/1?fields=name") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesRoleIdResponse.class))) }) + public String retrieveRole(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId, @Context final UriInfo uriInfo) { +@@ -161,9 +160,10 @@ public class RolesApiResource { + @Path("{roleId}") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Enable Role | Disable Role", tags = {"Roles"}, description = "Description : Enable role in case role is disabled. | Disable the role in case role is not associated with any users.\n\n\n\n" +- + "\n\n" + "Example Request: https://DomainName/api/v1/roles/{roleId}?command=enable" + "\n\n\n\n" + "\n\n" +- + "https://DomainName/api/v1/roles/{roleId}?command=disable") ++ @Operation(summary = "Enable Role | Disable Role", tags = { ++ "Roles" }, description = "Description : Enable role in case role is disabled. | Disable the role in case role is not associated with any users.\n\n\n\n" ++ + "\n\n" + "Example Request: https://DomainName/api/v1/roles/{roleId}?command=enable" + "\n\n\n\n" + "\n\n" ++ + "https://DomainName/api/v1/roles/{roleId}?command=disable") + @Parameters({ @Parameter(description = "No Request Body", name = "No Request Body") }) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesRoleIdResponse.class))) }) +@@ -189,7 +189,7 @@ public class RolesApiResource { + @Path("{roleId}") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Update a Role", tags = {"Roles"}, description = "") ++ @Operation(summary = "Update a Role", tags = { "Roles" }, description = "") + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdRequest.class))) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdResponse.class))) }) +@@ -209,7 +209,8 @@ public class RolesApiResource { + @GET + @Path("{roleId}/permissions") + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Retrieve a Role's Permissions", tags = {"Roles"}, description = "Example Requests:\n" + "\n" + "roles/1/permissions") ++ @Operation(summary = "Retrieve a Role's Permissions", tags = { "Roles" }, description = "Example Requests:\n" + "\n" ++ + "roles/1/permissions") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesRoleIdPermissionsResponse.class))) }) + public String retrieveRolePermissions(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId, +@@ -229,7 +230,7 @@ public class RolesApiResource { + @Path("{roleId}/permissions") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Update a Role's Permissions", tags = {"Roles"}, description = "") ++ @Operation(summary = "Update a Role's Permissions", tags = { "Roles" }, description = "") + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdPermissionsRequest.class))) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdPermissionsResponse.class))) }) +@@ -255,7 +256,8 @@ public class RolesApiResource { + @DELETE + @Path("{roleId}") + @Produces({ MediaType.APPLICATION_JSON }) +- @Operation(summary = "Delete a Role", tags = {"Roles"}, description = "Description : Delete the role in case role is not associated with any users.") ++ @Operation(summary = "Delete a Role", tags = { ++ "Roles" }, description = "Description : Delete the role in case role is not associated with any users.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.DeleteRolesRoleIdResponse.class))) }) + public String deleteRole(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId) { +diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java +index 595267f09..db9187adf 100644 +--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java ++++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java +@@ -32,10 +32,7 @@ import jakarta.ws.rs.DELETE; + import jakarta.ws.rs.GET; + import jakarta.ws.rs.POST; + import jakarta.ws.rs.PUT; +-import io.swagger.v3.oas.annotations.Operation; +-import io.swagger.v3.oas.annotations.tags.Tag; + import jakarta.ws.rs.Path; +- + import jakarta.ws.rs.PathParam; + import jakarta.ws.rs.Produces; + import jakarta.ws.rs.QueryParam; +@@ -93,8 +90,8 @@ public class UsersApiResource { + private final BulkImportWorkbookService bulkImportWorkbookService; +  + @GET +- @Operation(summary = "Retrieve list of users", operationId = "retrieveAllUsers", tags = {"Users"}, description = "Example Requests:\n" + "\n" + "users\n" +- + "\n" + "\n" + "users?fields=id,username,email,officeName") ++ @Operation(summary = "Retrieve list of users", operationId = "retrieveAllUsers", tags = { "Users" }, description = "Example Requests:\n" ++ + "\n" + "users\n" + "\n" + "\n" + "users?fields=id,username,email,officeName") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersResponse.class)))) }) + @Produces({ MediaType.APPLICATION_JSON }) +@@ -110,8 +107,8 @@ public class UsersApiResource { +  + @GET + @Path("{userId}") +- @Operation(summary = "Retrieve a User", operationId = "retrieveOneUser", tags = {"Users"}, description = "Example Requests:\n" + "\n" + "users/1\n" + "\n" +- + "\n" + "users/1?template=true\n" + "\n" + "\n" + "users/1?fields=username,officeName") ++ @Operation(summary = "Retrieve a User", operationId = "retrieveOneUser", tags = { "Users" }, description = "Example Requests:\n" + "\n" ++ + "users/1\n" + "\n" + "\n" + "users/1?template=true\n" + "\n" + "\n" + "users/1?fields=username,officeName") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersUserIdResponse.class))) }) + @Produces({ MediaType.APPLICATION_JSON }) +@@ -132,8 +129,9 @@ public class UsersApiResource { +  + @GET + @Path("template") +- @Operation(summary = "Retrieve User Details Template", operationId = "retrieveTemplateUser", tags = {"Users"}, description = "This is a convenience resource. It can be useful when building maintenance user interface screens for client applications. The template data returned consists of any or all of:\n" +- + "\n" + "Field Defaults\n" + "Allowed description Lists\n" + "Example Request:\n" + "\n" + "users/template") ++ @Operation(summary = "Retrieve User Details Template", operationId = "retrieveTemplateUser", tags = { ++ "Users" }, description = "This is a convenience resource. It can be useful when building maintenance user interface screens for client applications. The template data returned consists of any or all of:\n" ++ + "\n" + "Field Defaults\n" + "Allowed description Lists\n" + "Example Request:\n" + "\n" + "users/template") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersTemplateResponse.class))) }) + @Produces({ MediaType.APPLICATION_JSON }) +@@ -148,7 +146,8 @@ public class UsersApiResource { + } +  + @POST +- @Operation(summary = "Create a User", operationId = "createUser", tags = {"Users"}, description = "Adds new application user.\n" + "\n" ++ @Operation(summary = "Create a User", operationId = "createUser", tags = { "Users" }, description = "Adds new application user.\n" ++ + "\n" + + "Note: Password information is not required (or processed). Password details at present are auto-generated and then sent to the email account given (which is why it can take a few seconds to complete).\n" + + "\n" + "Mandatory Fields: \n" + "username, firstname, lastname, email, officeId, roles, sendPasswordToEmail\n" + "\n" + + "Optional Fields: \n" + "staffId,passwordNeverExpires,isLoginRetriesEnabled") +@@ -171,7 +170,7 @@ public class UsersApiResource { +  + @PUT + @Path("{userId}") +- @Operation(summary = "Update a User", operationId = "updateUser", tags = {"Users"}, description = "Updates the user") ++ @Operation(summary = "Update a User", operationId = "updateUser", tags = { "Users" }, description = "Updates the user") + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.PutUsersUserIdRequest.class))) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.PutUsersUserIdResponse.class))) }) +@@ -192,7 +191,8 @@ public class UsersApiResource { +  + @POST + @Path("{userId}/pwd") +- @Operation(summary = "Change the password of a User", operationId = "changePasswordUser", tags = {"Users"}, description = "When updating a password you must provide the repeatPassword parameter also.") ++ @Operation(summary = "Change the password of a User", operationId = "changePasswordUser", tags = { ++ "Users" }, description = "When updating a password you must provide the repeatPassword parameter also.") + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.ChangePwdUsersUserIdRequest.class))) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.ChangePwdUsersUserIdResponse.class))) }) +@@ -213,7 +213,8 @@ public class UsersApiResource { +  + @DELETE + @Path("{userId}") +- @Operation(summary = "Delete a User", operationId = "deleteUser", tags = {"Users"}, description = "Removes the user and the associated roles and permissions.") ++ @Operation(summary = "Delete a User", operationId = "deleteUser", tags = { ++ "Users" }, description = "Removes the user and the associated roles and permissions.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.DeleteUsersUserIdResponse.class))) }) + @Produces({ MediaType.APPLICATION_JSON }) +@@ -231,7 +232,7 @@ public class UsersApiResource { + @GET + @Path("downloadtemplate") + @Produces("application/vnd.ms-excel") +- @Operation(summary = "Download users template", description = "Returns an Excel template for bulk importing users.", tags = {"Users"}) ++ @Operation(summary = "Download users template", description = "Returns an Excel template for bulk importing users.", tags = { "Users" }) + public Response getUserTemplate(@QueryParam("officeId") final Long officeId, @QueryParam("staffId") final Long staffId, + @QueryParam("dateFormat") final String dateFormat) { + return bulkImportWorkbookPopulatorService.getTemplate(GlobalEntityType.USERS.toString(), officeId, staffId, dateFormat); +@@ -242,8 +243,8 @@ public class UsersApiResource { + @Consumes(MediaType.MULTIPART_FORM_DATA) + @RequestBody(description = "Upload users template", content = { + @Content(mediaType = MediaType.MULTIPART_FORM_DATA, schema = @Schema(implementation = UploadRequest.class)) }) +- @Operation(summary = "Upload users template", description = "Uploads a filled Excel template to create multiple users in bulk.",  +- tags = {"Users"}) ++ @Operation(summary = "Upload users template", description = "Uploads a filled Excel template to create multiple users in bulk.", tags = { ++ "Users" }) + public String postUsersTemplate(@FormDataParam("file") InputStream uploadedInputStream, + @FormDataParam("file") FormDataContentDisposition fileDetail, @FormDataParam("locale") final String locale, + @FormDataParam("dateFormat") final String dateFormat) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java index 588f0730cb2..ab714d5df62 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java @@ -67,6 +67,8 @@ public class PasswordPreferencesApiResource { @Produces({ MediaType.APPLICATION_JSON }) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.GetPasswordPreferencesTemplateResponse.class))) }) + @Operation(summary = "List Password Preferences", description = "Returns the password policies and their current status (active/inactive).", tags = { + "Password preferences" }) public String retrieve(@Context final UriInfo uriInfo) { this.context.authenticatedUser().validateHasReadPermission(PasswordPreferencesApiConstants.ENTITY_NAME); @@ -82,7 +84,7 @@ public String retrieve(@Context final UriInfo uriInfo) { @PUT @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Update password preferences", description = "") + @Operation(summary = "Update password preferences", tags = { "Password preferences" }, description = "") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.PutPasswordPreferencesTemplateRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK") }) public String update(@Parameter(hidden = true) final String apiRequestBodyAsJson) { @@ -100,8 +102,8 @@ public String update(@Parameter(hidden = true) final String apiRequestBodyAsJson @GET @Path("/template") @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "List Application Password validation policies", description = "ARGUMENTS\n" + "Example Requests:\n" + "\n" - + "passwordpreferences") + @Operation(summary = "List Application Password validation policies", tags = { "Password preferences" }, description = "ARGUMENTS\n" + + "Example Requests:\n" + "\n" + "passwordpreferences") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.GetPasswordPreferencesTemplateResponse.class)))) }) public String template(@Context final UriInfo uriInfo) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java index bd8b2354829..7ff23630925 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java @@ -72,7 +72,7 @@ public class PermissionsApiResource { @GET @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "List Application Permissions", description = "ARGUMENTS\n" + @Operation(summary = "List Application Permissions", tags = { "Permissions" }, description = "ARGUMENTS\n" + "makerCheckerableoptional, Values are true, false. Default is false.\n" + "If makerCheckerable=false or not supplied then a list of application permissions is returned. The \"selected\" attribute is always true in this case.\n" + "\n" @@ -100,7 +100,7 @@ public String retrieveAllPermissions(@Context final UriInfo uriInfo) { @PUT @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Enable/Disable Permissions for Maker Checker", description = "") + @Operation(summary = "Enable/Disable Permissions for Maker Checker", tags = { "Permissions" }, description = "") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = PermissionsApiResourceSwagger.PutPermissionsRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = CommandProcessingResult.class))) }) diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java index 65e1df03229..d456b72624a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java @@ -97,7 +97,8 @@ public class RolesApiResource { @GET @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "List Roles", description = "Example Requests:\n" + "\n" + "roles\n" + "\n" + "\n" + "roles?fields=name") + @Operation(summary = "List Roles", tags = { "Roles" }, description = "Example Requests:\n" + "\n" + "roles\n" + "\n" + "\n" + + "roles?fields=name") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesResponse.class)))) }) public String retrieveAllRoles(@Context final UriInfo uriInfo) { @@ -113,7 +114,7 @@ public String retrieveAllRoles(@Context final UriInfo uriInfo) { @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Create a New Role", description = "Mandatory Fields\n" + "name, description") + @Operation(summary = "Create a New Role", tags = { "Roles" }, description = "Mandatory Fields\n" + "name, description") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesResponse.class))) }) @@ -132,7 +133,8 @@ public String createRole(@Parameter(hidden = true) final String apiRequestBodyAs @GET @Path("{roleId}") @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Retrieve a Role", description = "Example Requests:\n" + "\n" + "roles/1\n" + "\n" + "\n" + "roles/1?fields=name") + @Operation(summary = "Retrieve a Role", tags = { "Roles" }, description = "Example Requests:\n" + "\n" + "roles/1\n" + "\n" + "\n" + + "roles/1?fields=name") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesRoleIdResponse.class))) }) public String retrieveRole(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId, @Context final UriInfo uriInfo) { @@ -158,9 +160,10 @@ public String retrieveRole(@PathParam("roleId") @Parameter(description = "roleId @Path("{roleId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Enable Role | Disable Role", description = "Description : Enable role in case role is disabled. | Disable the role in case role is not associated with any users.\n\n\n\n" - + "\n\n" + "Example Request: https://DomainName/api/v1/roles/{roleId}?command=enable" + "\n\n\n\n" + "\n\n" - + "https://DomainName/api/v1/roles/{roleId}?command=disable") + @Operation(summary = "Enable Role | Disable Role", tags = { + "Roles" }, description = "Description : Enable role in case role is disabled. | Disable the role in case role is not associated with any users.\n\n\n\n" + + "\n\n" + "Example Request: https://DomainName/api/v1/roles/{roleId}?command=enable" + "\n\n\n\n" + "\n\n" + + "https://DomainName/api/v1/roles/{roleId}?command=disable") @Parameters({ @Parameter(description = "No Request Body", name = "No Request Body") }) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesRoleIdResponse.class))) }) @@ -186,7 +189,7 @@ public String actionsOnRoles(@PathParam("roleId") @Parameter(description = "role @Path("{roleId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Update a Role", description = "") + @Operation(summary = "Update a Role", tags = { "Roles" }, description = "") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdResponse.class))) }) @@ -206,7 +209,8 @@ public String updateRole(@PathParam("roleId") @Parameter(description = "roleId") @GET @Path("{roleId}/permissions") @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Retrieve a Role's Permissions", description = "Example Requests:\n" + "\n" + "roles/1/permissions") + @Operation(summary = "Retrieve a Role's Permissions", tags = { "Roles" }, description = "Example Requests:\n" + "\n" + + "roles/1/permissions") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesRoleIdPermissionsResponse.class))) }) public String retrieveRolePermissions(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId, @@ -226,7 +230,7 @@ public String retrieveRolePermissions(@PathParam("roleId") @Parameter(descriptio @Path("{roleId}/permissions") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Update a Role's Permissions", description = "") + @Operation(summary = "Update a Role's Permissions", tags = { "Roles" }, description = "") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdPermissionsRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdPermissionsResponse.class))) }) @@ -252,7 +256,8 @@ public String updateRolePermissions(@PathParam("roleId") @Parameter(description @DELETE @Path("{roleId}") @Produces({ MediaType.APPLICATION_JSON }) - @Operation(summary = "Delete a Role", description = "Description : Delete the role in case role is not associated with any users.") + @Operation(summary = "Delete a Role", tags = { + "Roles" }, description = "Description : Delete the role in case role is not associated with any users.") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.DeleteRolesRoleIdResponse.class))) }) public String deleteRole(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java index e34a353f257..db9187adf78 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java @@ -90,8 +90,8 @@ public class UsersApiResource { private final BulkImportWorkbookService bulkImportWorkbookService; @GET - @Operation(summary = "Retrieve list of users", operationId = "retrieveAllUsers", description = "Example Requests:\n" + "\n" + "users\n" - + "\n" + "\n" + "users?fields=id,username,email,officeName") + @Operation(summary = "Retrieve list of users", operationId = "retrieveAllUsers", tags = { "Users" }, description = "Example Requests:\n" + + "\n" + "users\n" + "\n" + "\n" + "users?fields=id,username,email,officeName") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersResponse.class)))) }) @Produces({ MediaType.APPLICATION_JSON }) @@ -107,8 +107,8 @@ public String retrieveAll(@Context final UriInfo uriInfo) { @GET @Path("{userId}") - @Operation(summary = "Retrieve a User", operationId = "retrieveOneUser", description = "Example Requests:\n" + "\n" + "users/1\n" + "\n" - + "\n" + "users/1?template=true\n" + "\n" + "\n" + "users/1?fields=username,officeName") + @Operation(summary = "Retrieve a User", operationId = "retrieveOneUser", tags = { "Users" }, description = "Example Requests:\n" + "\n" + + "users/1\n" + "\n" + "\n" + "users/1?template=true\n" + "\n" + "\n" + "users/1?fields=username,officeName") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersUserIdResponse.class))) }) @Produces({ MediaType.APPLICATION_JSON }) @@ -129,8 +129,9 @@ public String retrieveOne(@PathParam("userId") @Parameter(description = "userId" @GET @Path("template") - @Operation(summary = "Retrieve User Details Template", operationId = "retrieveTemplateUser", description = "This is a convenience resource. It can be useful when building maintenance user interface screens for client applications. The template data returned consists of any or all of:\n" - + "\n" + "Field Defaults\n" + "Allowed description Lists\n" + "Example Request:\n" + "\n" + "users/template") + @Operation(summary = "Retrieve User Details Template", operationId = "retrieveTemplateUser", tags = { + "Users" }, description = "This is a convenience resource. It can be useful when building maintenance user interface screens for client applications. The template data returned consists of any or all of:\n" + + "\n" + "Field Defaults\n" + "Allowed description Lists\n" + "Example Request:\n" + "\n" + "users/template") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersTemplateResponse.class))) }) @Produces({ MediaType.APPLICATION_JSON }) @@ -145,10 +146,11 @@ public String template(@Context final UriInfo uriInfo) { } @POST - @Operation(summary = "Create a User", operationId = "createUser", description = "Adds new application user.\n" + "\n" + @Operation(summary = "Create a User", operationId = "createUser", tags = { "Users" }, description = "Adds new application user.\n" + + "\n" + "Note: Password information is not required (or processed). Password details at present are auto-generated and then sent to the email account given (which is why it can take a few seconds to complete).\n" + "\n" + "Mandatory Fields: \n" + "username, firstname, lastname, email, officeId, roles, sendPasswordToEmail\n" + "\n" - + "Optional Fields: \n" + "staffId,passwordNeverExpires,isLoginRetriesEnabled,isPasswordResetAllowed") + + "Optional Fields: \n" + "staffId,passwordNeverExpires,isLoginRetriesEnabled") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.PostUsersRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.PostUsersResponse.class))) }) @@ -168,7 +170,7 @@ public String create(@Parameter(hidden = true) final String apiRequestBodyAsJson @PUT @Path("{userId}") - @Operation(summary = "Update a User", operationId = "updateUser", description = "Updates the user") + @Operation(summary = "Update a User", operationId = "updateUser", tags = { "Users" }, description = "Updates the user") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.PutUsersUserIdRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.PutUsersUserIdResponse.class))) }) @@ -189,7 +191,8 @@ public String update(@PathParam("userId") @Parameter(description = "userId") fin @POST @Path("{userId}/pwd") - @Operation(summary = "Change the password of a User", operationId = "changePasswordUser", description = "When updating a password you must provide the repeatPassword parameter also.") + @Operation(summary = "Change the password of a User", operationId = "changePasswordUser", tags = { + "Users" }, description = "When updating a password you must provide the repeatPassword parameter also.") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.ChangePwdUsersUserIdRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.ChangePwdUsersUserIdResponse.class))) }) @@ -210,7 +213,8 @@ public String changePassword(@PathParam("userId") @Parameter(description = "user @DELETE @Path("{userId}") - @Operation(summary = "Delete a User", operationId = "deleteUser", description = "Removes the user and the associated roles and permissions.") + @Operation(summary = "Delete a User", operationId = "deleteUser", tags = { + "Users" }, description = "Removes the user and the associated roles and permissions.") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.DeleteUsersUserIdResponse.class))) }) @Produces({ MediaType.APPLICATION_JSON }) @@ -228,6 +232,7 @@ public String delete(@PathParam("userId") @Parameter(description = "userId") fin @GET @Path("downloadtemplate") @Produces("application/vnd.ms-excel") + @Operation(summary = "Download users template", description = "Returns an Excel template for bulk importing users.", tags = { "Users" }) public Response getUserTemplate(@QueryParam("officeId") final Long officeId, @QueryParam("staffId") final Long staffId, @QueryParam("dateFormat") final String dateFormat) { return bulkImportWorkbookPopulatorService.getTemplate(GlobalEntityType.USERS.toString(), officeId, staffId, dateFormat); @@ -238,6 +243,8 @@ public Response getUserTemplate(@QueryParam("officeId") final Long officeId, @Qu @Consumes(MediaType.MULTIPART_FORM_DATA) @RequestBody(description = "Upload users template", content = { @Content(mediaType = MediaType.MULTIPART_FORM_DATA, schema = @Schema(implementation = UploadRequest.class)) }) + @Operation(summary = "Upload users template", description = "Uploads a filled Excel template to create multiple users in bulk.", tags = { + "Users" }) public String postUsersTemplate(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail, @FormDataParam("locale") final String locale, @FormDataParam("dateFormat") final String dateFormat) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java index 4146737309a..5e24a3f706a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java @@ -135,7 +135,6 @@ private PostUsersRequest() { public Boolean passwordNeverExpires; @Schema(example = "true") public Boolean isLoginRetriesEnabled; - public Boolean isPasswordResetAllowed; } @Schema(description = "PostUsersResponse") @@ -217,7 +216,6 @@ private PutUsersUserIdRequest() { public Boolean sendPasswordToEmail; @Schema(example = "true") public Boolean isLoginRetriesEnabled; - public Boolean isPasswordResetAllowed; } @Schema(description = "PutUsersUserIdResponse") From b5102b994227e3b58a85c1db263aeaeaa85ba798 Mon Sep 17 00:00:00 2001 From: Anhelina Date: Thu, 21 May 2026 11:17:48 +0300 Subject: [PATCH 3/3] Refactor administration resources and apply Swagger annotations --- et | 288 ------------------ .../api/UsersApiResourceSwagger.java | 266 ---------------- 2 files changed, 554 deletions(-) delete mode 100644 et delete mode 100644 fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java diff --git a/et b/et deleted file mode 100644 index b46337ecbf8..00000000000 --- a/et +++ /dev/null @@ -1,288 +0,0 @@ -warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/notification/api/NotificationApiResource.java', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java', LF will be replaced by CRLF the next time Git touches it -warning: in the working copy of 'fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java', LF will be replaced by CRLF the next time Git touches it -diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java -index c214d3e80..ab714d5df 100644 ---- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java -+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java -@@ -30,10 +30,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; - import jakarta.ws.rs.Consumes; - import jakarta.ws.rs.GET; - import jakarta.ws.rs.PUT; --import io.swagger.v3.oas.annotations.Operation; --import io.swagger.v3.oas.annotations.tags.Tag; - import jakarta.ws.rs.Path; -- - import jakarta.ws.rs.Produces; - import jakarta.ws.rs.core.Context; - import jakarta.ws.rs.core.MediaType; -@@ -70,7 +67,8 @@ public class PasswordPreferencesApiResource { - @Produces({ MediaType.APPLICATION_JSON }) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.GetPasswordPreferencesTemplateResponse.class))) }) -- @Operation(summary = "List Password Preferences", description = "Returns the password policies and their current status (active/inactive).", tags = {"Password preferences"}) -+ @Operation(summary = "List Password Preferences", description = "Returns the password policies and their current status (active/inactive).", tags = { -+ "Password preferences" }) - public String retrieve(@Context final UriInfo uriInfo) { -  - this.context.authenticatedUser().validateHasReadPermission(PasswordPreferencesApiConstants.ENTITY_NAME); -@@ -86,7 +84,7 @@ public class PasswordPreferencesApiResource { - @PUT - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Update password preferences", tags = {"Password preferences"}, description = "") -+ @Operation(summary = "Update password preferences", tags = { "Password preferences" }, description = "") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.PutPasswordPreferencesTemplateRequest.class))) - @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK") }) - public String update(@Parameter(hidden = true) final String apiRequestBodyAsJson) { -@@ -104,8 +102,8 @@ public class PasswordPreferencesApiResource { - @GET - @Path("/template") - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "List Application Password validation policies", tags = {"Password preferences"}, description = "ARGUMENTS\n" + "Example Requests:\n" + "\n" -- + "passwordpreferences") -+ @Operation(summary = "List Application Password validation policies", tags = { "Password preferences" }, description = "ARGUMENTS\n" -+ + "Example Requests:\n" + "\n" + "passwordpreferences") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = PasswordPreferencesApiResourceSwagger.GetPasswordPreferencesTemplateResponse.class)))) }) - public String template(@Context final UriInfo uriInfo) { -diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java -index 42828e959..7ff236309 100644 ---- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java -+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java -@@ -30,10 +30,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; - import jakarta.ws.rs.Consumes; - import jakarta.ws.rs.GET; - import jakarta.ws.rs.PUT; --import io.swagger.v3.oas.annotations.Operation; --import io.swagger.v3.oas.annotations.tags.Tag; - import jakarta.ws.rs.Path; -- - import jakarta.ws.rs.Produces; - import jakarta.ws.rs.core.Context; - import jakarta.ws.rs.core.MediaType; -@@ -75,7 +72,7 @@ public class PermissionsApiResource { -  - @GET - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "List Application Permissions", tags = {"Permissions"}, description = "ARGUMENTS\n" -+ @Operation(summary = "List Application Permissions", tags = { "Permissions" }, description = "ARGUMENTS\n" - + "makerCheckerableoptional, Values are true, false. Default is false.\n" - + "If makerCheckerable=false or not supplied then a list of application permissions is returned. The \"selected\" attribute is always true in this case.\n" - + "\n" -@@ -103,7 +100,7 @@ public class PermissionsApiResource { - @PUT - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Enable/Disable Permissions for Maker Checker", tags = {"Permissions"}, description = "") -+ @Operation(summary = "Enable/Disable Permissions for Maker Checker", tags = { "Permissions" }, description = "") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = PermissionsApiResourceSwagger.PutPermissionsRequest.class))) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = CommandProcessingResult.class))) }) -diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java -index 3374ac389..d456b7262 100644 ---- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java -+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java -@@ -33,10 +33,7 @@ import jakarta.ws.rs.DELETE; - import jakarta.ws.rs.GET; - import jakarta.ws.rs.POST; - import jakarta.ws.rs.PUT; --import io.swagger.v3.oas.annotations.Operation; --import io.swagger.v3.oas.annotations.tags.Tag; - import jakarta.ws.rs.Path; -- - import jakarta.ws.rs.PathParam; - import jakarta.ws.rs.Produces; - import jakarta.ws.rs.QueryParam; -@@ -100,7 +97,8 @@ public class RolesApiResource { -  - @GET - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "List Roles", tags = {"Roles"}, description = "Example Requests:\n" + "\n" + "roles\n" + "\n" + "\n" + "roles?fields=name") -+ @Operation(summary = "List Roles", tags = { "Roles" }, description = "Example Requests:\n" + "\n" + "roles\n" + "\n" + "\n" -+ + "roles?fields=name") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesResponse.class)))) }) - public String retrieveAllRoles(@Context final UriInfo uriInfo) { -@@ -116,7 +114,7 @@ public class RolesApiResource { - @POST - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Create a New Role", tags = {"Roles"}, description = "Mandatory Fields\n" + "name, description") -+ @Operation(summary = "Create a New Role", tags = { "Roles" }, description = "Mandatory Fields\n" + "name, description") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesRequest.class))) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesResponse.class))) }) -@@ -135,7 +133,8 @@ public class RolesApiResource { - @GET - @Path("{roleId}") - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Retrieve a Role", tags = {"Roles"}, description = "Example Requests:\n" + "\n" + "roles/1\n" + "\n" + "\n" + "roles/1?fields=name") -+ @Operation(summary = "Retrieve a Role", tags = { "Roles" }, description = "Example Requests:\n" + "\n" + "roles/1\n" + "\n" + "\n" -+ + "roles/1?fields=name") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesRoleIdResponse.class))) }) - public String retrieveRole(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId, @Context final UriInfo uriInfo) { -@@ -161,9 +160,10 @@ public class RolesApiResource { - @Path("{roleId}") - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Enable Role | Disable Role", tags = {"Roles"}, description = "Description : Enable role in case role is disabled. | Disable the role in case role is not associated with any users.\n\n\n\n" -- + "\n\n" + "Example Request: https://DomainName/api/v1/roles/{roleId}?command=enable" + "\n\n\n\n" + "\n\n" -- + "https://DomainName/api/v1/roles/{roleId}?command=disable") -+ @Operation(summary = "Enable Role | Disable Role", tags = { -+ "Roles" }, description = "Description : Enable role in case role is disabled. | Disable the role in case role is not associated with any users.\n\n\n\n" -+ + "\n\n" + "Example Request: https://DomainName/api/v1/roles/{roleId}?command=enable" + "\n\n\n\n" + "\n\n" -+ + "https://DomainName/api/v1/roles/{roleId}?command=disable") - @Parameters({ @Parameter(description = "No Request Body", name = "No Request Body") }) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PostRolesRoleIdResponse.class))) }) -@@ -189,7 +189,7 @@ public class RolesApiResource { - @Path("{roleId}") - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Update a Role", tags = {"Roles"}, description = "") -+ @Operation(summary = "Update a Role", tags = { "Roles" }, description = "") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdRequest.class))) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdResponse.class))) }) -@@ -209,7 +209,8 @@ public class RolesApiResource { - @GET - @Path("{roleId}/permissions") - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Retrieve a Role's Permissions", tags = {"Roles"}, description = "Example Requests:\n" + "\n" + "roles/1/permissions") -+ @Operation(summary = "Retrieve a Role's Permissions", tags = { "Roles" }, description = "Example Requests:\n" + "\n" -+ + "roles/1/permissions") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.GetRolesRoleIdPermissionsResponse.class))) }) - public String retrieveRolePermissions(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId, -@@ -229,7 +230,7 @@ public class RolesApiResource { - @Path("{roleId}/permissions") - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Update a Role's Permissions", tags = {"Roles"}, description = "") -+ @Operation(summary = "Update a Role's Permissions", tags = { "Roles" }, description = "") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdPermissionsRequest.class))) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.PutRolesRoleIdPermissionsResponse.class))) }) -@@ -255,7 +256,8 @@ public class RolesApiResource { - @DELETE - @Path("{roleId}") - @Produces({ MediaType.APPLICATION_JSON }) -- @Operation(summary = "Delete a Role", tags = {"Roles"}, description = "Description : Delete the role in case role is not associated with any users.") -+ @Operation(summary = "Delete a Role", tags = { -+ "Roles" }, description = "Description : Delete the role in case role is not associated with any users.") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = RolesApiResourceSwagger.DeleteRolesRoleIdResponse.class))) }) - public String deleteRole(@PathParam("roleId") @Parameter(description = "roleId") final Long roleId) { -diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java -index 595267f09..db9187adf 100644 ---- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java -+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java -@@ -32,10 +32,7 @@ import jakarta.ws.rs.DELETE; - import jakarta.ws.rs.GET; - import jakarta.ws.rs.POST; - import jakarta.ws.rs.PUT; --import io.swagger.v3.oas.annotations.Operation; --import io.swagger.v3.oas.annotations.tags.Tag; - import jakarta.ws.rs.Path; -- - import jakarta.ws.rs.PathParam; - import jakarta.ws.rs.Produces; - import jakarta.ws.rs.QueryParam; -@@ -93,8 +90,8 @@ public class UsersApiResource { - private final BulkImportWorkbookService bulkImportWorkbookService; -  - @GET -- @Operation(summary = "Retrieve list of users", operationId = "retrieveAllUsers", tags = {"Users"}, description = "Example Requests:\n" + "\n" + "users\n" -- + "\n" + "\n" + "users?fields=id,username,email,officeName") -+ @Operation(summary = "Retrieve list of users", operationId = "retrieveAllUsers", tags = { "Users" }, description = "Example Requests:\n" -+ + "\n" + "users\n" + "\n" + "\n" + "users?fields=id,username,email,officeName") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersResponse.class)))) }) - @Produces({ MediaType.APPLICATION_JSON }) -@@ -110,8 +107,8 @@ public class UsersApiResource { -  - @GET - @Path("{userId}") -- @Operation(summary = "Retrieve a User", operationId = "retrieveOneUser", tags = {"Users"}, description = "Example Requests:\n" + "\n" + "users/1\n" + "\n" -- + "\n" + "users/1?template=true\n" + "\n" + "\n" + "users/1?fields=username,officeName") -+ @Operation(summary = "Retrieve a User", operationId = "retrieveOneUser", tags = { "Users" }, description = "Example Requests:\n" + "\n" -+ + "users/1\n" + "\n" + "\n" + "users/1?template=true\n" + "\n" + "\n" + "users/1?fields=username,officeName") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersUserIdResponse.class))) }) - @Produces({ MediaType.APPLICATION_JSON }) -@@ -132,8 +129,9 @@ public class UsersApiResource { -  - @GET - @Path("template") -- @Operation(summary = "Retrieve User Details Template", operationId = "retrieveTemplateUser", tags = {"Users"}, description = "This is a convenience resource. It can be useful when building maintenance user interface screens for client applications. The template data returned consists of any or all of:\n" -- + "\n" + "Field Defaults\n" + "Allowed description Lists\n" + "Example Request:\n" + "\n" + "users/template") -+ @Operation(summary = "Retrieve User Details Template", operationId = "retrieveTemplateUser", tags = { -+ "Users" }, description = "This is a convenience resource. It can be useful when building maintenance user interface screens for client applications. The template data returned consists of any or all of:\n" -+ + "\n" + "Field Defaults\n" + "Allowed description Lists\n" + "Example Request:\n" + "\n" + "users/template") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.GetUsersTemplateResponse.class))) }) - @Produces({ MediaType.APPLICATION_JSON }) -@@ -148,7 +146,8 @@ public class UsersApiResource { - } -  - @POST -- @Operation(summary = "Create a User", operationId = "createUser", tags = {"Users"}, description = "Adds new application user.\n" + "\n" -+ @Operation(summary = "Create a User", operationId = "createUser", tags = { "Users" }, description = "Adds new application user.\n" -+ + "\n" - + "Note: Password information is not required (or processed). Password details at present are auto-generated and then sent to the email account given (which is why it can take a few seconds to complete).\n" - + "\n" + "Mandatory Fields: \n" + "username, firstname, lastname, email, officeId, roles, sendPasswordToEmail\n" + "\n" - + "Optional Fields: \n" + "staffId,passwordNeverExpires,isLoginRetriesEnabled") -@@ -171,7 +170,7 @@ public class UsersApiResource { -  - @PUT - @Path("{userId}") -- @Operation(summary = "Update a User", operationId = "updateUser", tags = {"Users"}, description = "Updates the user") -+ @Operation(summary = "Update a User", operationId = "updateUser", tags = { "Users" }, description = "Updates the user") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.PutUsersUserIdRequest.class))) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.PutUsersUserIdResponse.class))) }) -@@ -192,7 +191,8 @@ public class UsersApiResource { -  - @POST - @Path("{userId}/pwd") -- @Operation(summary = "Change the password of a User", operationId = "changePasswordUser", tags = {"Users"}, description = "When updating a password you must provide the repeatPassword parameter also.") -+ @Operation(summary = "Change the password of a User", operationId = "changePasswordUser", tags = { -+ "Users" }, description = "When updating a password you must provide the repeatPassword parameter also.") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.ChangePwdUsersUserIdRequest.class))) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.ChangePwdUsersUserIdResponse.class))) }) -@@ -213,7 +213,8 @@ public class UsersApiResource { -  - @DELETE - @Path("{userId}") -- @Operation(summary = "Delete a User", operationId = "deleteUser", tags = {"Users"}, description = "Removes the user and the associated roles and permissions.") -+ @Operation(summary = "Delete a User", operationId = "deleteUser", tags = { -+ "Users" }, description = "Removes the user and the associated roles and permissions.") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = UsersApiResourceSwagger.DeleteUsersUserIdResponse.class))) }) - @Produces({ MediaType.APPLICATION_JSON }) -@@ -231,7 +232,7 @@ public class UsersApiResource { - @GET - @Path("downloadtemplate") - @Produces("application/vnd.ms-excel") -- @Operation(summary = "Download users template", description = "Returns an Excel template for bulk importing users.", tags = {"Users"}) -+ @Operation(summary = "Download users template", description = "Returns an Excel template for bulk importing users.", tags = { "Users" }) - public Response getUserTemplate(@QueryParam("officeId") final Long officeId, @QueryParam("staffId") final Long staffId, - @QueryParam("dateFormat") final String dateFormat) { - return bulkImportWorkbookPopulatorService.getTemplate(GlobalEntityType.USERS.toString(), officeId, staffId, dateFormat); -@@ -242,8 +243,8 @@ public class UsersApiResource { - @Consumes(MediaType.MULTIPART_FORM_DATA) - @RequestBody(description = "Upload users template", content = { - @Content(mediaType = MediaType.MULTIPART_FORM_DATA, schema = @Schema(implementation = UploadRequest.class)) }) -- @Operation(summary = "Upload users template", description = "Uploads a filled Excel template to create multiple users in bulk.",  -- tags = {"Users"}) -+ @Operation(summary = "Upload users template", description = "Uploads a filled Excel template to create multiple users in bulk.", tags = { -+ "Users" }) - public String postUsersTemplate(@FormDataParam("file") InputStream uploadedInputStream, - @FormDataParam("file") FormDataContentDisposition fileDetail, @FormDataParam("locale") final String locale, - @FormDataParam("dateFormat") final String dateFormat) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java deleted file mode 100644 index 5e24a3f706a..00000000000 --- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResourceSwagger.java +++ /dev/null @@ -1,266 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.fineract.useradministration.api; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.util.Collection; -import java.util.List; -import org.apache.fineract.organisation.office.data.OfficeData; -import org.apache.fineract.organisation.staff.data.StaffData; -import org.apache.fineract.useradministration.data.RoleData; - -/** - * Created by sanyam on 23/8/17. - */ -final class UsersApiResourceSwagger { - - private UsersApiResourceSwagger() { - - } - - @Schema(description = "GetUsersResponse") - public static final class GetUsersResponse { - - private GetUsersResponse() { - - } - - @Schema(example = "1") - public Long id; - @Schema(example = "mifos") - public String username; - @Schema(example = "1") - public Long officeId; - @Schema(example = "Head Office") - public String officeName; - @Schema(example = "App") - public String firstname; - @Schema(example = "Administrator") - public String lastname; - @Schema(example = "demomfi@mifos.org") - public String email; - @Schema(example = "false") - public Boolean passwordNeverExpires; - public StaffData staff; - public Collection selectedRoles; - - } - - @Schema(description = "GetUsersUserIdResponse") - public static final class GetUsersUserIdResponse { - - private GetUsersUserIdResponse() { - - } - - @Schema(example = "1") - public Long id; - @Schema(example = "mifos") - public String username; - @Schema(example = "1") - public Long officeId; - @Schema(example = "Head Office") - public String officeName; - @Schema(example = "App") - public String firstname; - @Schema(example = "Administrator") - public String lastname; - @Schema(example = "demomfi@mifos.org") - public String email; - @Schema(example = "false") - public Boolean passwordNeverExpires; - public StaffData staff; - public Collection availableRoles; - public Collection selectedRoles; - - } - - @Schema(description = "GetUsersTemplateResponse") - public static final class GetUsersTemplateResponse { - - private GetUsersTemplateResponse() { - - } - - public Collection allowedOffices; - public Collection availableRoles; - } - - @Schema(description = "PostUsersRequest") - public static final class PostUsersRequest { - - private PostUsersRequest() { - - } - - @Schema(example = "newuser") - public String username; - @Schema(example = "password") - public String password; - @Schema(example = "repeatPassword") - public String repeatPassword; - @Schema(example = "Test") - public String firstname; - @Schema(example = "User") - public String lastname; - @Schema(example = "whatever@mifos.org") - public String email; - @Schema(example = "1") - public Long officeId; - @Schema(example = "1") - public Long staffId; - @Schema(example = "[2,3]") - public List roles; - @Schema(example = "[2,3]") - public List clients; - @Schema(example = "true") - public Boolean sendPasswordToEmail; - @Schema(example = "true") - public Boolean passwordNeverExpires; - @Schema(example = "true") - public Boolean isLoginRetriesEnabled; - } - - @Schema(description = "PostUsersResponse") - public static final class PostUsersResponse { - - private PostUsersResponse() { - - } - - @Schema(example = "1") - public Long officeId; - @Schema(example = "11") - public Long resourceId; - } - - @Schema(description = "ChangePwdUsersUserIdRequest") - public static final class ChangePwdUsersUserIdRequest { - - private ChangePwdUsersUserIdRequest() { - - } - - @Schema(example = "password") - public String password; - @Schema(example = "repeatPassword") - public String repeatPassword; - } - - @Schema(description = "ChangePwdUsersUserIdResponse") - public static final class ChangePwdUsersUserIdResponse { - - private ChangePwdUsersUserIdResponse() { - - } - - static final class ChangePwdUsersUserIdResponseChanges { - - private ChangePwdUsersUserIdResponseChanges() { - - } - - @Schema(example = "true") - public boolean password; - } - - @Schema(example = "1") - public Long officeId; - @Schema(example = "11") - public Long resourceId; - public ChangePwdUsersUserIdResponseChanges changes; - } - - @Schema(description = "PutUsersUserIdRequest") - public static final class PutUsersUserIdRequest { - - private PutUsersUserIdRequest() { - - } - - @Schema(example = "Test") - public String firstname; - @Schema(example = "User") - public String lastname; - @Schema(example = "whatever@mifos.org") - public String email; - @Schema(example = "1") - public Long officeId; - @Schema(example = "1") - public Long staffId; - @Schema(example = "[2,3]") - public List roles; - @Schema(example = "[2,3]") - public List clients; - @Schema(example = "password") - public String password; - @Schema(example = "repeatPassword") - public String repeatPassword; - @Schema(example = "true") - public Boolean sendPasswordToEmail; - @Schema(example = "true") - public Boolean isLoginRetriesEnabled; - } - - @Schema(description = "PutUsersUserIdResponse") - public static final class PutUsersUserIdResponse { - - private PutUsersUserIdResponse() { - - } - - static final class PutUsersUserIdResponseChanges { - - private PutUsersUserIdResponseChanges() { - - } - - @Schema(example = "Test") - public String firstname; - } - - @Schema(example = "1") - public Long officeId; - @Schema(example = "11") - public Long resourceId; - public PutUsersUserIdResponseChanges changes; - } - - @Schema(description = "DeleteUsersUserIdResponse") - public static final class DeleteUsersUserIdResponse { - - private DeleteUsersUserIdResponse() { - - } - - static final class DeleteUsersUserIdResponseChanges { - - private DeleteUsersUserIdResponseChanges() { - - } - } - - @Schema(example = "1") - public Long officeId; - @Schema(example = "11") - public Long resourceId; - public DeleteUsersUserIdResponseChanges changes; - } - -}