Copilot commented on code in PR #4054:
URL: 
https://github.com/apache/incubator-kie-kogito-runtimes/pull/4054#discussion_r2329657262


##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.addPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.setPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removePotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsersToRemove
+    ) {
+        return userTaskService.removePotentialUsers(taskId, 
potentialUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.addExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.setExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsersToRemove
+    ) {
+        return userTaskService.removeExcludedUsers(taskId, 
excludedUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/adminGroups")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminGroups(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminGroups") Set<String> adminGroups
+    ) {
+        return userTaskService.addAdminGroups(taskId, adminGroups, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminGroups")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminGroups(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminGroups") Set<String> adminGroups
+    ) {
+        return userTaskService.setAdminGroups(taskId, adminGroups, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminGroups")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminGroups(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,

Review Comment:
   The parameter 'groups' is declared as Set<String> here but as List<String> 
in all other endpoints. This inconsistency could confuse API consumers and 
cause type compatibility issues.
   ```suggestion
               @QueryParam("group") List<String> groups,
   ```



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove

Review Comment:
   Using @QueryParam for Set<String> parameters is problematic. Query 
parameters are typically simple values or arrays of strings, but Set<String> 
collections should be passed in the request body using @RequestBody/@Consumes 
instead.
   ```suggestion
               Set<String> adminUsersToRemove
   ```



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,

Review Comment:
   The parameter 'groups' is declared as Set<String> here but as List<String> 
in all other endpoints. This inconsistency could confuse API consumers and 
cause type compatibility issues.
   ```suggestion
               @QueryParam("group") List<String> groups,
   ```



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.addPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.setPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removePotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsersToRemove
+    ) {
+        return userTaskService.removePotentialUsers(taskId, 
potentialUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.addExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.setExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,

Review Comment:
   The parameter 'groups' is declared as Set<String> here but as List<String> 
in all other endpoints. This inconsistency could confuse API consumers and 
cause type compatibility issues.



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.addPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.setPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removePotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,

Review Comment:
   The parameter 'groups' is declared as Set<String> here but as List<String> 
in all other endpoints. This inconsistency could confuse API consumers and 
cause type compatibility issues.
   ```suggestion
               @QueryParam("group") List<String> groups,
   ```



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers

Review Comment:
   Using @QueryParam for Set<String> parameters is problematic. Query 
parameters are typically simple values or arrays of strings, but Set<String> 
collections should be passed in the request body using @RequestBody/@Consumes 
instead.



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers

Review Comment:
   Using @QueryParam for Set<String> parameters is problematic. Query 
parameters are typically simple values or arrays of strings, but Set<String> 
collections should be passed in the request body using @RequestBody/@Consumes 
instead.



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.addPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.setPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removePotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsersToRemove

Review Comment:
   Using @QueryParam for Set<String> parameters is problematic. Query 
parameters are typically simple values or arrays of strings, but Set<String> 
collections should be passed in the request body using @RequestBody/@Consumes 
instead.



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.addPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.setPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removePotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsersToRemove
+    ) {
+        return userTaskService.removePotentialUsers(taskId, 
potentialUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.addExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.setExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsersToRemove

Review Comment:
   Using @QueryParam for Set<String> parameters is problematic. Query 
parameters are typically simple values or arrays of strings, but Set<String> 
collections should be passed in the request body using @RequestBody/@Consumes 
instead.



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.addPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.setPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removePotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsersToRemove
+    ) {
+        return userTaskService.removePotentialUsers(taskId, 
potentialUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers

Review Comment:
   Using @QueryParam for Set<String> parameters is problematic. Query 
parameters are typically simple values or arrays of strings, but Set<String> 
collections should be passed in the request body using @RequestBody/@Consumes 
instead.



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.addPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.setPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removePotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsersToRemove
+    ) {
+        return userTaskService.removePotentialUsers(taskId, 
potentialUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.addExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.setExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsersToRemove
+    ) {
+        return userTaskService.removeExcludedUsers(taskId, 
excludedUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/adminGroups")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminGroups(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminGroups") Set<String> adminGroups
+    ) {
+        return userTaskService.addAdminGroups(taskId, adminGroups, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminGroups")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminGroups(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminGroups") Set<String> adminGroups
+    ) {
+        return userTaskService.setAdminGroups(taskId, adminGroups, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminGroups")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminGroups(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminGroups") Set<String> adminGroupsToRemove

Review Comment:
   Using @QueryParam for Set<String> parameters is problematic. Query 
parameters are typically simple values or arrays of strings, but Set<String> 
collections should be passed in the request body using @RequestBody/@Consumes 
instead.
   ```suggestion
               Set<String> adminGroupsToRemove
   ```



##########
jbpm/jbpm-usertask/src/main/java/org/kie/kogito/usertask/impl/DefaultUserTaskInstance.java:
##########
@@ -456,12 +487,27 @@ public Set<String> getAdminGroups() {
         return this.adminGroups;
     }
 
+    @Override
     public void setAdminGroups(Set<String> adminGroups) {
         Set<String> oldValues = new HashSet<>(this.adminGroups);
         this.adminGroups = adminGroups;
-        if (this.userTaskEventSupport != null) {
-            this.userTaskEventSupport.fireOnUserTaskAssignmentChange(this, 
AssignmentType.ADMIN_GROUPS, oldValues, adminGroups);
-        }
+        fireTaskAssignmentChange(AssignmentType.ADMIN_GROUPS, oldValues, 
adminGroups);
+        updatePersistence();
+    }
+
+    @Override
+    public void addAdminGroups(Set<String> adminGroups) {
+        Set<String> oldValues = new HashSet<>(this.adminGroups);
+        this.adminGroups = adminGroups;

Review Comment:
   The adminGroups should be added to the existing set using addAll(), not 
replaced entirely. This is inconsistent with the method name 'addAdminGroups' 
which implies addition, not replacement.
   ```suggestion
           this.adminGroups.addAll(adminGroups);
   ```



##########
kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/usertask/RestResourceUserTaskQuarkusTemplate.java:
##########
@@ -273,4 +274,176 @@ public Attachment getAttachment(
                 .orElseThrow(() -> new 
UserTaskInstanceNotFoundException("Attachment " + attachmentId + " not found"));
     }
 
+    @POST
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.addAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsers
+    ) {
+        return userTaskService.setAdminUsers(taskId, adminUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/adminUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeAdminUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("adminUsers") Set<String> adminUsersToRemove
+    ) {
+        return userTaskService.removeAdminUsers(taskId, adminUsersToRemove, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.addPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setPotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsers
+    ) {
+        return userTaskService.setPotentialUsers(taskId, potentialUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/potentialUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removePotentialUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("potentialUsers") Set<String> potentialUsersToRemove
+    ) {
+        return userTaskService.removePotentialUsers(taskId, 
potentialUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.addExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @PUT
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView setExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsers
+    ) {
+        return userTaskService.setExcludedUsers(taskId, excludedUsers, 
identityProviderFactory.getOrImpersonateIdentity(user, groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+
+    @DELETE
+    @Path("/{taskId}/excludedUsers")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView removeExcludedUsers(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") Set<String> groups,
+            @QueryParam("excludedUsers") Set<String> excludedUsersToRemove
+    ) {
+        return userTaskService.removeExcludedUsers(taskId, 
excludedUsersToRemove, identityProviderFactory.getOrImpersonateIdentity(user, 
groups))
+                .orElseThrow(UserTaskInstanceNotFoundException::new);
+    }
+
+    @POST
+    @Path("/{taskId}/adminGroups")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserTaskView addAdminGroups(
+            @PathParam("taskId") String taskId,
+            @QueryParam("user") String user,
+            @QueryParam("group") List<String> groups,
+            @QueryParam("adminGroups") Set<String> adminGroups

Review Comment:
   Using @QueryParam for Set<String> parameters is problematic. Query 
parameters are typically simple values or arrays of strings, but Set<String> 
collections should be passed in the request body using @RequestBody/@Consumes 
instead.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to