demarches-normaliennes/app/graphql/mutations/groupe_instructeur_creer.rb
2024-08-22 09:26:48 +02:00

59 lines
2.3 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
module Mutations
class GroupeInstructeurCreer < Mutations::BaseMutation
class GroupeInstructeurAttributes < Types::BaseInputObject
description "Attributs pour lajout d'un groupe instructeur."
argument :label, String, "Libelle du groupe instructeur.", required: true
argument :closed, Boolean, "Létat du groupe instructeur.", required: false, default_value: false
argument :instructeurs, [Types::ProfileInput], "Instructeurs à ajouter.", required: false, default_value: []
end
description "Crée un groupe instructeur."
argument :demarche, Types::DemarcheDescriptorType::FindDemarcheInput, "Demarche ID ou numéro.", required: true
argument :groupe_instructeur, GroupeInstructeurAttributes, "Groupes instructeur à ajouter.", required: true
field :groupe_instructeur, Types::GroupeInstructeurType, null: true
field :errors, [Types::ValidationErrorType], null: true
field :warnings, [Types::WarningMessageType], null: true
def resolve(demarche:, groupe_instructeur:)
demarche_number = demarche.number.presence || ApplicationRecord.id_from_typed_id(demarche.id)
procedure = current_administrateur.procedures.find(demarche_number)
ids, emails = partition_instructeurs_by(groupe_instructeur.instructeurs)
groupe_instructeur = procedure
.groupe_instructeurs
.build(label: groupe_instructeur.label, closed: groupe_instructeur.closed, instructeurs: [current_administrateur.instructeur].compact)
if groupe_instructeur.save
groupe_instructeur.procedure.toggle_routing
# ugly hack to keep retro compatibility
# do not judge
groupe_instructeur.procedure.update_groupe_instructeur_routing_roules!
result = { groupe_instructeur: }
if emails.present? || ids.present?
_, invalid_emails = groupe_instructeur.add_instructeurs(ids:, emails:)
groupe_instructeur.reload
if invalid_emails.present?
warning = I18n.t('administrateurs.groupe_instructeurs.add_instructeur.wrong_address',
count: invalid_emails.size,
emails: invalid_emails.join(', '))
result[:warnings] = [warning]
end
end
result
else
{ errors: groupe_instructeur.errors.full_messages }
end
end
end
end