def update_applications_of_user_group()

in components/user_management/src/routes/user_group.py [0:0]


def update_applications_of_user_group(
    uuid: str, input_group_applications: UpdateGroupApplications):
  """Assign/unassign applications of user group with the uuid passed in
     the request body

  ### Args:
      input_group_applications (UpdateGroupApplications): List of
                      users to be added to the user group

  ### Raises:
      ResourceNotFoundException: If the user group does not exist
      Exception: 500 Internal Server Error if something went wrong

  ### Returns:
      UpdateApplicationsOfGroupResponseModel: UserGroup Object
  """
  try:
    existing_group = UserGroup.find_by_uuid(uuid)
    input_dict = {**input_group_applications.dict()}
    input_group_applications = input_dict.get("applications", [])
    CollectionHandler.validate_documents("applications",
                                         input_group_applications)
    group_fields = existing_group.get_fields(reformat_datetime=True)
    group_permissions = group_fields.get("permissions") if group_fields.get(
        "permissions") else []
    group_applications = group_fields.get("applications") if group_fields.get(
        "applications") else []

    added_applications = list(
        set(input_group_applications) - set(group_applications))
    permissions_to_add = []
    if len(added_applications) > 0:
      default_action_id = input_dict.get("action_id")
      _ = Action.find_by_uuid(default_action_id)
      for application in added_applications:
        permissions_to_add = filter_and_update_permissions_of_applications(
            application, uuid, "add", default_action_id)
        group_permissions += permissions_to_add
        group_applications.append(application)

    removed_applications = list(
        set(group_applications) - set(input_group_applications))
    if len(removed_applications) > 0:
      permissions_to_remove = []
      for application in removed_applications:
        permission_to_remove = filter_and_update_permissions_of_applications(
            application, uuid, "remove")
        permissions_to_remove += permission_to_remove
      group_permissions = list(
          set(group_permissions) - set(permissions_to_remove))
      group_applications = list(
          set(group_applications) - set(removed_applications))

    setattr(existing_group, "permissions", group_permissions)
    setattr(existing_group, "applications", group_applications)
    existing_group.update()
    group_fields = existing_group.get_fields(reformat_datetime=True)
    return {
        "success": True,
        "message": "Successfully updated applications of a user group",
        "data": group_fields
    }

  except ResourceNotFoundException as e:
    Logger.error(e)
    Logger.error(traceback.print_exc())
    raise ResourceNotFound(str(e)) from e
  except ValidationError as e:
    Logger.error(e)
    Logger.error(traceback.print_exc())
    raise BadRequest(str(e)) from e
  except Exception as e:
    Logger.error(e)
    Logger.error(traceback.print_exc())
    raise InternalServerError(str(e)) from e