feat(graphql): expose revision on demarche descriptor type

This commit is contained in:
Paul Chavard 2022-06-11 11:41:47 +01:00
parent 988397ac11
commit 350ed3a11a
7 changed files with 81 additions and 26 deletions

View file

@ -433,8 +433,9 @@ interface Demandeur {
Une démarche Une démarche
""" """
type Demarche { type Demarche {
annotationDescriptors: [ChampDescriptor!]! activeRevision: Revision!
champDescriptors: [ChampDescriptor!]! annotationDescriptors: [ChampDescriptor!]! @deprecated(reason: "Utilisez le champ `active_revision.annotation_descriptors` à la place.")
champDescriptors: [ChampDescriptor!]! @deprecated(reason: "Utilisez le champ `active_revision.champ_descriptors` à la place.")
""" """
Date de la création. Date de la création.
@ -639,6 +640,8 @@ type DemarcheDescriptor {
Numero de la démarche. Numero de la démarche.
""" """
number: Int! number: Int!
revision: Revision!
service: Service!
""" """
État de la démarche. État de la démarche.
@ -779,7 +782,7 @@ type Dossier {
LURL du dossier au format PDF. LURL du dossier au format PDF.
""" """
pdf: File pdf: File
revision: Revision! revision: Revision! @deprecated(reason: "Utilisez le champ `demarche.revision` à la place.")
""" """
Létat du dossier. Létat du dossier.

View file

@ -5,20 +5,71 @@ Ceci est une version abrégée du type `Demarche`, qui nexpose que les métad
Cela évite laccès récursif aux dossiers." Cela évite laccès récursif aux dossiers."
global_id_field :id global_id_field :id
field :number, Int, "Numero de la démarche.", null: false, method: :id field :number, Int, "Numero de la démarche.", null: false
field :title, String, "Titre de la démarche.", null: false, method: :libelle field :title, String, "Titre de la démarche.", null: false
field :description, String, "Description de la démarche.", null: false field :description, String, "Description de la démarche.", null: false
field :state, Types::DemarcheType::DemarcheState, "État de la démarche.", null: false field :state, Types::DemarcheType::DemarcheState, "État de la démarche.", null: false
field :declarative, Types::DemarcheType::DossierDeclarativeState, "Pour une démarche déclarative, état cible des dossiers à valider automatiquement", null: true, method: :declarative_with_state field :declarative, Types::DemarcheType::DossierDeclarativeState, "Pour une démarche déclarative, état cible des dossiers à valider automatiquement", null: true
field :date_creation, GraphQL::Types::ISO8601DateTime, "Date de la création.", null: false, method: :created_at field :date_creation, GraphQL::Types::ISO8601DateTime, "Date de la création.", null: false
field :date_publication, GraphQL::Types::ISO8601DateTime, "Date de la publication.", null: true, method: :published_at field :date_publication, GraphQL::Types::ISO8601DateTime, "Date de la publication.", null: true
field :date_derniere_modification, GraphQL::Types::ISO8601DateTime, "Date de la dernière modification.", null: false, method: :updated_at field :date_derniere_modification, GraphQL::Types::ISO8601DateTime, "Date de la dernière modification.", null: false
field :date_depublication, GraphQL::Types::ISO8601DateTime, "Date de la dépublication.", null: true, method: :unpublished_at field :date_depublication, GraphQL::Types::ISO8601DateTime, "Date de la dépublication.", null: true
field :date_fermeture, GraphQL::Types::ISO8601DateTime, "Date de la fermeture.", null: true, method: :closed_at field :date_fermeture, GraphQL::Types::ISO8601DateTime, "Date de la fermeture.", null: true
field :revision, Types::RevisionType, null: false
field :service, Types::ServiceType, null: false
def service
Loaders::Record.for(Service).load(object.procedure.service_id)
end
def revision
object
end
def state def state
object.aasm.current_state object.procedure.aasm.current_state
end
def number
object.procedure.id
end
def title
object.procedure.libelle
end
def description
object.procedure.description
end
def declarative
object.procedure.declarative_with_state
end
def date_creation
object.procedure.created_at
end
def date_publication
object.procedure.published_at
end
def date_derniere_modification
object.procedure.updated_at
end
def date_depublication
object.procedure.unpublished_at
end
def date_fermeture
object.procedure.closed_at
end
def self.authorized?(object, context)
context.authorized_demarche?(object.procedure)
end end
end end
end end

View file

@ -48,9 +48,10 @@ module Types
argument :deleted_since, GraphQL::Types::ISO8601DateTime, required: false, description: "Dossiers supprimés depuis la date." argument :deleted_since, GraphQL::Types::ISO8601DateTime, required: false, description: "Dossiers supprimés depuis la date."
end end
field :champ_descriptors, [Types::ChampDescriptorType], null: false field :champ_descriptors, [Types::ChampDescriptorType], null: false, deprecation_reason: 'Utilisez le champ `activeRevision.champDescriptors` à la place.'
field :annotation_descriptors, [Types::ChampDescriptorType], null: false field :annotation_descriptors, [Types::ChampDescriptorType], null: false, deprecation_reason: 'Utilisez le champ `activeRevision.annotationDescriptors` à la place.'
field :active_revision, Types::RevisionType, null: false
field :draft_revision, Types::RevisionType, null: false field :draft_revision, Types::RevisionType, null: false
field :published_revision, Types::RevisionType, null: true field :published_revision, Types::RevisionType, null: true
field :revisions, [Types::RevisionType], null: false field :revisions, [Types::RevisionType], null: false

View file

@ -12,7 +12,7 @@ module Types
field :number, Int, "Le numero du dossier.", null: false, method: :id field :number, Int, "Le numero du dossier.", null: false, method: :id
field :state, DossierState, "Létat du dossier.", null: false field :state, DossierState, "Létat du dossier.", null: false
field :demarche, Types::DemarcheDescriptorType, null: false, method: :procedure field :demarche, Types::DemarcheDescriptorType, null: false, method: :revision
field :date_depot, GraphQL::Types::ISO8601DateTime, "Date de dépôt.", null: false, method: :depose_at field :date_depot, GraphQL::Types::ISO8601DateTime, "Date de dépôt.", null: false, method: :depose_at
field :date_passage_en_construction, GraphQL::Types::ISO8601DateTime, "Date du dernier passage en construction.", null: false, method: :en_construction_at field :date_passage_en_construction, GraphQL::Types::ISO8601DateTime, "Date du dernier passage en construction.", null: false, method: :en_construction_at
@ -37,7 +37,7 @@ module Types
field :usager, Types::ProfileType, null: false field :usager, Types::ProfileType, null: false
field :groupe_instructeur, Types::GroupeInstructeurType, null: false field :groupe_instructeur, Types::GroupeInstructeurType, null: false
field :revision, Types::RevisionType, null: false field :revision, Types::RevisionType, null: false, deprecation_reason: 'Utilisez le champ `demarche.revision` à la place.'
field :demandeur, Types::DemandeurType, null: false field :demandeur, Types::DemandeurType, null: false
@ -79,12 +79,8 @@ module Types
Loaders::Record.for(GroupeInstructeur).load(object.groupe_instructeur_id) Loaders::Record.for(GroupeInstructeur).load(object.groupe_instructeur_id)
end end
def revision
Loaders::Record.for(ProcedureRevision).load(object.revision_id)
end
def demandeur def demandeur
if object.procedure.for_individual if object.revision.procedure.for_individual
Loaders::Association.for(object.class, :individual).load(object) Loaders::Association.for(object.class, :individual).load(object)
else else
Loaders::Association.for(object.class, :etablissement).load(object) Loaders::Association.for(object.class, :etablissement).load(object)
@ -166,7 +162,7 @@ module Types
end end
def self.authorized?(object, context) def self.authorized?(object, context)
context.authorized_demarche?(object.procedure) context.authorized_demarche?(object.revision.procedure)
end end
end end
end end

View file

@ -383,7 +383,7 @@ class Dossier < ApplicationRecord
.where.not(user: users_who_submitted) .where.not(user: users_who_submitted)
end end
scope :for_api_v2, -> { includes(procedure: [:administrateurs], revision: [:attestation_template], etablissement: [], individual: [], traitement: []) } scope :for_api_v2, -> { includes(revision: [:attestation_template, procedure: [:administrateurs]], etablissement: [], individual: [], traitement: []) }
scope :with_notifications, -> do scope :with_notifications, -> do
joins(:follows) joins(:follows)

View file

@ -74,6 +74,7 @@ class SerializerService
datePassageEnConstruction datePassageEnConstruction
datePassageEnInstruction datePassageEnInstruction
dateTraitement dateTraitement
dateDepot
dateSuppressionParUsager dateSuppressionParUsager
dateSuppressionParAdministration dateSuppressionParAdministration
instructeurs { instructeurs {
@ -103,8 +104,11 @@ class SerializerService
motivationAttachment { motivationAttachment {
...FileFragment ...FileFragment
} }
revision { demarche {
id number
revision {
id
}
} }
} }

View file

@ -1101,7 +1101,7 @@ describe Users::DossiersController, type: :controller do
subject { patch :restore, params: { id: dossier.id } } subject { patch :restore, params: { id: dossier.id } }
context 'when the user want to restore his dossier' do context 'when the user want to restore his dossier' do
let!(:dossier) { create(:dossier, :with_individual, state: :accepte, en_construction_at: Time.zone.yesterday.beginning_of_day.utc, hidden_by_user_at: Time.zone.yesterday.beginning_of_day.utc, user: user, autorisation_donnees: true) } let!(:dossier) { create(:dossier, :accepte, :with_individual, en_construction_at: Time.zone.yesterday.beginning_of_day.utc, hidden_by_user_at: Time.zone.yesterday.beginning_of_day.utc, user: user, autorisation_donnees: true) }
before { subject } before { subject }