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

60 lines
2.3 KiB
Ruby
Raw Normal View History

# 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
2023-05-11 15:15:25 +02:00
# ugly hack to keep retro compatibility
# do not judge
groupe_instructeur.procedure.update_groupe_instructeur_routing_roules!
2023-05-11 15:15:25 +02:00
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