feat(graphql): expose demarche descriptor on dossier type

We don't want to expose full demarche type on dossiers because it would open the door for recursive queries that we want to avoid. DemarcheDescriptorType is a lightweight representation of demarche metadata.
This commit is contained in:
Paul Chavard 2021-08-19 10:23:27 +01:00
parent fd1a2e9307
commit 1399d9bba9
5 changed files with 105 additions and 10 deletions

View file

@ -406,7 +406,7 @@ interface Demandeur {
}
"""
Une demarche
Une démarche
"""
type Demarche {
annotationDescriptors: [ChampDescriptor!]!
@ -438,7 +438,7 @@ type Demarche {
datePublication: ISO8601DateTime
"""
Létat de dossier pour une démarche déclarative
Pour une démarche déclarative, état cible des dossiers à valider automatiquement
"""
declarative: DossierDeclarativeState
@ -551,7 +551,7 @@ type Demarche {
id: ID!
"""
Le numero de la démarche.
Numero de la démarche.
"""
number: Int!
publishedRevision: Revision
@ -559,12 +559,70 @@ type Demarche {
service: Service!
"""
Létat de la démarche.
État de la démarche.
"""
state: DemarcheState!
"""
Le titre de la démarche.
Titre de la démarche.
"""
title: String!
}
"""
Une démarche (métadonnées)
Ceci est une version abrégée du type `Demarche`, qui nexpose que les métadonnées.
Cela évite laccès récursif aux dossiers.
"""
type DemarcheDescriptor {
"""
Date de la création.
"""
dateCreation: ISO8601DateTime!
"""
Date de la dépublication.
"""
dateDepublication: ISO8601DateTime
"""
Date de la dernière modification.
"""
dateDerniereModification: ISO8601DateTime!
"""
Date de la fermeture.
"""
dateFermeture: ISO8601DateTime
"""
Date de la publication.
"""
datePublication: ISO8601DateTime
"""
Pour une démarche déclarative, état cible des dossiers à valider automatiquement
"""
declarative: DossierDeclarativeState
"""
Description de la démarche.
"""
description: String!
id: ID!
"""
Numero de la démarche.
"""
number: Int!
"""
État de la démarche.
"""
state: DemarcheState!
"""
Titre de la démarche.
"""
title: String!
}
@ -650,6 +708,7 @@ type Dossier {
"""
dateTraitement: ISO8601DateTime
demandeur: Demandeur!
demarche: DemarcheDescriptor!
"""
LURL du GeoJSON contenant les données cartographiques du dossier.

View file

@ -0,0 +1,24 @@
module Types
class DemarcheDescriptorType < Types::BaseObject
description "Une démarche (métadonnées)
Ceci est une version abrégée du type `Demarche`, qui nexpose que les métadonnées.
Cela évite laccès récursif aux dossiers."
global_id_field :id
field :number, Int, "Numero de la démarche.", null: false, method: :id
field :title, String, "Titre de la démarche.", null: false, method: :libelle
field :description, String, "Description 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 :date_creation, GraphQL::Types::ISO8601DateTime, "Date de la création.", null: false, method: :created_at
field :date_publication, GraphQL::Types::ISO8601DateTime, "Date de la publication.", null: true, method: :published_at
field :date_derniere_modification, GraphQL::Types::ISO8601DateTime, "Date de la dernière modification.", null: false, method: :updated_at
field :date_depublication, GraphQL::Types::ISO8601DateTime, "Date de la dépublication.", null: true, method: :unpublished_at
field :date_fermeture, GraphQL::Types::ISO8601DateTime, "Date de la fermeture.", null: true, method: :closed_at
def state
object.aasm.current_state
end
end
end

View file

@ -14,14 +14,14 @@ module Types
end
end
description "Une demarche"
description "Une démarche"
global_id_field :id
field :number, Int, "Le numero de la démarche.", null: false, method: :id
field :title, String, "Le titre de la démarche.", null: false, method: :libelle
field :number, Int, "Numero de la démarche.", null: false, method: :id
field :title, String, "Titre de la démarche.", null: false, method: :libelle
field :description, String, "Description de la démarche.", null: false
field :state, DemarcheState, "Létat de la démarche.", null: false
field :declarative, DossierDeclarativeState, "Létat de dossier pour une démarche déclarative", null: true, method: :declarative_with_state
field :state, DemarcheState, "État de la démarche.", null: false
field :declarative, DossierDeclarativeState, "Pour une démarche déclarative, état cible des dossiers à valider automatiquement", null: true, method: :declarative_with_state
field :date_creation, GraphQL::Types::ISO8601DateTime, "Date de la création.", null: false, method: :created_at
field :date_publication, GraphQL::Types::ISO8601DateTime, "Date de la publication.", null: true, method: :published_at

View file

@ -12,6 +12,8 @@ module Types
field :number, Int, "Le numero du dossier.", null: false, method: :id
field :state, DossierState, "Létat du dossier.", null: false
field :demarche, Types::DemarcheDescriptorType, null: false, method: :procedure
field :date_passage_en_construction, GraphQL::Types::ISO8601DateTime, "Date de dépôt.", null: false, method: :en_construction_at
field :date_passage_en_instruction, GraphQL::Types::ISO8601DateTime, "Date de passage en instruction.", null: true, method: :en_instruction_at
field :date_traitement, GraphQL::Types::ISO8601DateTime, "Date de traitement.", null: true, method: :processed_at

View file

@ -310,6 +310,11 @@ describe API::V2::GraphqlController do
motivationAttachment {
url
}
demarche {
number
title
state
}
usager {
id
email
@ -382,6 +387,11 @@ describe API::V2::GraphqlController do
dateTraitement: nil,
motivation: nil,
motivationAttachment: nil,
demarche: {
number: dossier.procedure.id,
title: dossier.procedure.libelle,
state: 'publiee'
},
usager: {
id: dossier.user.to_typed_id,
email: dossier.user.email