demarches-normaliennes/app/graphql/mutations/groupe_instructeur_creer.rb

51 lines
2.1 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.

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
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