[GraphQL] allow to query dossiers by groupe instructeur
This commit is contained in:
parent
7e806f191c
commit
32f783142c
6 changed files with 149 additions and 0 deletions
|
@ -745,6 +745,69 @@ type GroupeInstructeur {
|
||||||
id: ID!
|
id: ID!
|
||||||
instructeurs: [Profile!]!
|
instructeurs: [Profile!]!
|
||||||
label: String!
|
label: String!
|
||||||
|
|
||||||
|
"""
|
||||||
|
Le numero du groupe instructeur.
|
||||||
|
"""
|
||||||
|
number: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Un groupe instructeur avec ces dossiers
|
||||||
|
"""
|
||||||
|
type GroupeInstructeurWithDossiers {
|
||||||
|
"""
|
||||||
|
Liste de tous les dossiers d'une démarche.
|
||||||
|
"""
|
||||||
|
dossiers(
|
||||||
|
"""
|
||||||
|
Returns the elements in the list that come after the specified cursor.
|
||||||
|
"""
|
||||||
|
after: String
|
||||||
|
|
||||||
|
"""
|
||||||
|
Returns the elements in the list that come before the specified cursor.
|
||||||
|
"""
|
||||||
|
before: String
|
||||||
|
|
||||||
|
"""
|
||||||
|
Dossiers déposés depuis la date.
|
||||||
|
"""
|
||||||
|
createdSince: ISO8601DateTime
|
||||||
|
|
||||||
|
"""
|
||||||
|
Returns the first _n_ elements from the list.
|
||||||
|
"""
|
||||||
|
first: Int
|
||||||
|
|
||||||
|
"""
|
||||||
|
Returns the last _n_ elements from the list.
|
||||||
|
"""
|
||||||
|
last: Int
|
||||||
|
|
||||||
|
"""
|
||||||
|
L'ordre des dossiers.
|
||||||
|
"""
|
||||||
|
order: Order = ASC
|
||||||
|
|
||||||
|
"""
|
||||||
|
Dossiers avec statut.
|
||||||
|
"""
|
||||||
|
state: DossierState
|
||||||
|
|
||||||
|
"""
|
||||||
|
Dossiers mis à jour depuis la date.
|
||||||
|
"""
|
||||||
|
updatedSince: ISO8601DateTime
|
||||||
|
): DossierConnection!
|
||||||
|
id: ID!
|
||||||
|
instructeurs: [Profile!]!
|
||||||
|
label: String!
|
||||||
|
|
||||||
|
"""
|
||||||
|
Le numero du groupe instructeur.
|
||||||
|
"""
|
||||||
|
number: Int!
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -975,6 +1038,16 @@ type Query {
|
||||||
"""
|
"""
|
||||||
number: Int!
|
number: Int!
|
||||||
): Dossier!
|
): Dossier!
|
||||||
|
|
||||||
|
"""
|
||||||
|
Informations sur un groupe instructeur.
|
||||||
|
"""
|
||||||
|
groupeInstructeur(
|
||||||
|
"""
|
||||||
|
Numéro du groupe instructeur.
|
||||||
|
"""
|
||||||
|
number: Int!
|
||||||
|
): GroupeInstructeurWithDossiers!
|
||||||
}
|
}
|
||||||
|
|
||||||
type RepetitionChamp implements Champ {
|
type RepetitionChamp implements Champ {
|
||||||
|
|
|
@ -3,6 +3,7 @@ module Types
|
||||||
description "Un groupe instructeur"
|
description "Un groupe instructeur"
|
||||||
|
|
||||||
global_id_field :id
|
global_id_field :id
|
||||||
|
field :number, Int, "Le numero du groupe instructeur.", null: false, method: :id
|
||||||
field :label, String, null: false
|
field :label, String, null: false
|
||||||
field :instructeurs, [Types::ProfileType], null: false
|
field :instructeurs, [Types::ProfileType], null: false
|
||||||
|
|
||||||
|
|
32
app/graphql/types/groupe_instructeur_with_dossiers_type.rb
Normal file
32
app/graphql/types/groupe_instructeur_with_dossiers_type.rb
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
module Types
|
||||||
|
class GroupeInstructeurWithDossiersType < GroupeInstructeurType
|
||||||
|
description "Un groupe instructeur avec ces dossiers"
|
||||||
|
|
||||||
|
field :dossiers, Types::DossierType.connection_type, "Liste de tous les dossiers d'une démarche.", null: false do
|
||||||
|
argument :order, Types::Order, default_value: :asc, required: false, description: "L'ordre des dossiers."
|
||||||
|
argument :created_since, GraphQL::Types::ISO8601DateTime, required: false, description: "Dossiers déposés depuis la date."
|
||||||
|
argument :updated_since, GraphQL::Types::ISO8601DateTime, required: false, description: "Dossiers mis à jour depuis la date."
|
||||||
|
argument :state, Types::DossierType::DossierState, required: false, description: "Dossiers avec statut."
|
||||||
|
end
|
||||||
|
|
||||||
|
def dossiers(updated_since: nil, created_since: nil, state: nil, order:)
|
||||||
|
dossiers = object.dossiers.state_not_brouillon.for_api_v2
|
||||||
|
|
||||||
|
if state.present?
|
||||||
|
dossiers = dossiers.where(state: state)
|
||||||
|
end
|
||||||
|
|
||||||
|
if updated_since.present?
|
||||||
|
dossiers = dossiers.updated_since(updated_since).order_by_updated_at(order)
|
||||||
|
else
|
||||||
|
if created_since.present?
|
||||||
|
dossiers = dossiers.created_since(created_since)
|
||||||
|
end
|
||||||
|
|
||||||
|
dossiers = dossiers.order_by_created_at(order)
|
||||||
|
end
|
||||||
|
|
||||||
|
dossiers
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -8,6 +8,10 @@ module Types
|
||||||
argument :number, Int, "Numéro du dossier.", required: true
|
argument :number, Int, "Numéro du dossier.", required: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
field :groupe_instructeur, GroupeInstructeurWithDossiersType, null: false, description: "Informations sur un groupe instructeur." do
|
||||||
|
argument :number, Int, "Numéro du groupe instructeur.", required: true
|
||||||
|
end
|
||||||
|
|
||||||
def demarche(number:)
|
def demarche(number:)
|
||||||
Procedure.for_api_v2.find(number)
|
Procedure.for_api_v2.find(number)
|
||||||
rescue => e
|
rescue => e
|
||||||
|
@ -20,6 +24,12 @@ module Types
|
||||||
raise GraphQL::ExecutionError.new(e.message, extensions: { code: :not_found })
|
raise GraphQL::ExecutionError.new(e.message, extensions: { code: :not_found })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def groupe_instructeur(number:)
|
||||||
|
GroupeInstructeur.for_api_v2.find(number)
|
||||||
|
rescue => e
|
||||||
|
raise GraphQL::ExecutionError.new(e.message, extensions: { code: :not_found })
|
||||||
|
end
|
||||||
|
|
||||||
def self.accessible?(context)
|
def self.accessible?(context)
|
||||||
context[:token] || context[:administrateur_id]
|
context[:token] || context[:administrateur_id]
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,4 +12,5 @@ class GroupeInstructeur < ApplicationRecord
|
||||||
before_validation -> { label&.strip! }
|
before_validation -> { label&.strip! }
|
||||||
|
|
||||||
scope :without_group, -> (group) { where.not(id: group) }
|
scope :without_group, -> (group) { where.not(id: group) }
|
||||||
|
scope :for_api_v2, -> { includes(procedure: [:administrateurs]) }
|
||||||
end
|
end
|
||||||
|
|
|
@ -201,6 +201,7 @@ describe API::V2::GraphqlController do
|
||||||
}
|
}
|
||||||
groupeInstructeur {
|
groupeInstructeur {
|
||||||
id
|
id
|
||||||
|
number
|
||||||
label
|
label
|
||||||
}
|
}
|
||||||
messages {
|
messages {
|
||||||
|
@ -259,6 +260,7 @@ describe API::V2::GraphqlController do
|
||||||
],
|
],
|
||||||
groupeInstructeur: {
|
groupeInstructeur: {
|
||||||
id: dossier.groupe_instructeur.to_typed_id,
|
id: dossier.groupe_instructeur.to_typed_id,
|
||||||
|
number: dossier.groupe_instructeur.id,
|
||||||
label: dossier.groupe_instructeur.label
|
label: dossier.groupe_instructeur.label
|
||||||
},
|
},
|
||||||
demandeur: {
|
demandeur: {
|
||||||
|
@ -346,6 +348,36 @@ describe API::V2::GraphqlController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "groupeInstructeur" do
|
||||||
|
let(:groupe_instructeur) { procedure.groupe_instructeurs.first }
|
||||||
|
let(:query) do
|
||||||
|
"{
|
||||||
|
groupeInstructeur(number: #{groupe_instructeur.id}) {
|
||||||
|
id
|
||||||
|
number
|
||||||
|
label
|
||||||
|
dossiers {
|
||||||
|
nodes {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should be returned" do
|
||||||
|
expect(gql_errors).to eq(nil)
|
||||||
|
expect(gql_data).to eq(groupeInstructeur: {
|
||||||
|
id: groupe_instructeur.to_typed_id,
|
||||||
|
number: groupe_instructeur.id,
|
||||||
|
label: groupe_instructeur.label,
|
||||||
|
dossiers: {
|
||||||
|
nodes: dossiers.map { |dossier| { id: dossier.to_typed_id } }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "mutations" do
|
context "mutations" do
|
||||||
describe 'dossierEnvoyerMessage' do
|
describe 'dossierEnvoyerMessage' do
|
||||||
context 'success' do
|
context 'success' do
|
||||||
|
|
Loading…
Reference in a new issue