feat(graphql): improuve groupe instructeur query
This commit is contained in:
parent
4952ba1cee
commit
3ced06d59b
4 changed files with 78 additions and 6 deletions
|
@ -98,6 +98,8 @@ class API::V2::StoredQuery
|
|||
$order: Order
|
||||
$first: Int
|
||||
$after: String
|
||||
$archived: Boolean
|
||||
$revision: ID
|
||||
$createdSince: ISO8601DateTime
|
||||
$updatedSince: ISO8601DateTime
|
||||
$includeDossiers: Boolean = false
|
||||
|
@ -122,8 +124,10 @@ class API::V2::StoredQuery
|
|||
order: $order
|
||||
first: $first
|
||||
after: $after
|
||||
archived: $archived
|
||||
createdSince: $createdSince
|
||||
updatedSince: $updatedSince
|
||||
revision: $revision
|
||||
) @include(if: $includeDossiers) {
|
||||
pageInfo {
|
||||
...PageInfoFragment
|
||||
|
|
|
@ -1534,11 +1534,11 @@ type GroupeInstructeur {
|
|||
}
|
||||
|
||||
"""
|
||||
Un groupe instructeur avec ces dossiers
|
||||
Un groupe instructeur avec ses dossiers
|
||||
"""
|
||||
type GroupeInstructeurWithDossiers {
|
||||
"""
|
||||
Liste de tous les dossiers d’une démarche.
|
||||
Liste de tous les dossiers d’un groupe instructeur.
|
||||
"""
|
||||
dossiers(
|
||||
"""
|
||||
|
@ -1546,6 +1546,11 @@ type GroupeInstructeurWithDossiers {
|
|||
"""
|
||||
after: String
|
||||
|
||||
"""
|
||||
Seulement les dossiers archivés.
|
||||
"""
|
||||
archived: Boolean
|
||||
|
||||
"""
|
||||
Returns the elements in the list that come before the specified cursor.
|
||||
"""
|
||||
|
@ -1566,11 +1571,26 @@ type GroupeInstructeurWithDossiers {
|
|||
"""
|
||||
last: Int
|
||||
|
||||
"""
|
||||
Seulement les dossiers pour les révisons avant la révision donnée.
|
||||
"""
|
||||
maxRevision: ID
|
||||
|
||||
"""
|
||||
Seulement les dossiers pour les révisons après la révision donnée.
|
||||
"""
|
||||
minRevision: ID
|
||||
|
||||
"""
|
||||
L’ordre des dossiers.
|
||||
"""
|
||||
order: Order = ASC
|
||||
|
||||
"""
|
||||
Seulement les dossiers pour la révision donnée.
|
||||
"""
|
||||
revision: ID
|
||||
|
||||
"""
|
||||
Dossiers avec statut.
|
||||
"""
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
module Types
|
||||
class GroupeInstructeurWithDossiersType < GroupeInstructeurType
|
||||
description "Un groupe instructeur avec ces dossiers"
|
||||
description "Un groupe instructeur avec ses dossiers"
|
||||
|
||||
field :dossiers, Types::DossierType.connection_type, "Liste de tous les dossiers d’une démarche.", null: false do
|
||||
field :dossiers, Types::DossierType.connection_type, "Liste de tous les dossiers d’un groupe instructeur.", null: false, extras: [:lookahead] 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."
|
||||
argument :archived, Boolean, required: false, description: "Seulement les dossiers archivés."
|
||||
argument :revision, ID, required: false, description: "Seulement les dossiers pour la révision donnée."
|
||||
argument :max_revision, ID, required: false, description: "Seulement les dossiers pour les révisons avant la révision donnée."
|
||||
argument :min_revision, ID, required: false, description: "Seulement les dossiers pour les révisons après la révision donnée."
|
||||
end
|
||||
|
||||
def dossiers(updated_since: nil, created_since: nil, state: nil, order:)
|
||||
def dossiers(updated_since: nil, created_since: nil, state: nil, archived: nil, revision: nil, max_revision: nil, min_revision: nil, order:, lookahead:)
|
||||
dossiers = object
|
||||
.dossiers
|
||||
.visible_by_administration
|
||||
|
@ -19,6 +23,22 @@ module Types
|
|||
dossiers = dossiers.where(state: state)
|
||||
end
|
||||
|
||||
if !archived.nil?
|
||||
dossiers = dossiers.where(archived: archived)
|
||||
end
|
||||
|
||||
if !revision.nil?
|
||||
dossiers = dossiers.where(revision: find_revision(revision))
|
||||
else
|
||||
if !min_revision.nil?
|
||||
dossiers = dossiers.joins(:revision).where('procedure_revisions.created_at >= ?', find_revision(min_revision).created_at)
|
||||
end
|
||||
|
||||
if !max_revision.nil?
|
||||
dossiers = dossiers.joins(:revision).where('procedure_revisions.created_at <= ?', find_revision(max_revision).created_at)
|
||||
end
|
||||
end
|
||||
|
||||
if updated_since.present?
|
||||
dossiers = dossiers.updated_since(updated_since).order_by_updated_at(order)
|
||||
else
|
||||
|
@ -29,7 +49,11 @@ module Types
|
|||
dossiers = dossiers.order_by_created_at(order)
|
||||
end
|
||||
|
||||
dossiers
|
||||
# We wrap dossiers in a custom connection alongsite the lookahead for the query.
|
||||
# The custom connection is responsible for preloading paginated dossiers.
|
||||
# https://graphql-ruby.org/pagination/custom_connections.html#using-a-custom-connection
|
||||
# https://graphql-ruby.org/queries/lookahead.html
|
||||
Connections::DossiersConnection.new(dossiers, lookahead: lookahead)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -878,6 +878,30 @@ describe API::V2::GraphqlController do
|
|||
end
|
||||
end
|
||||
|
||||
context 'getGroupeInstructeur' do
|
||||
let(:groupe_instructeur) { procedure.groupe_instructeurs.first }
|
||||
let(:variables) { { groupeInstructeurNumber: groupe_instructeur.id } }
|
||||
let(:operation_name) { 'getGroupeInstructeur' }
|
||||
|
||||
before { dossier }
|
||||
|
||||
it {
|
||||
expect(gql_errors).to be_nil
|
||||
expect(gql_data[:groupeInstructeur][:id]).to eq(groupe_instructeur.to_typed_id)
|
||||
expect(gql_data[:groupeInstructeur][:dossiers]).to be_nil
|
||||
}
|
||||
|
||||
context 'include Dossiers' do
|
||||
let(:variables) { { groupeInstructeurNumber: groupe_instructeur.id, includeDossiers: true } }
|
||||
|
||||
it {
|
||||
expect(gql_errors).to be_nil
|
||||
expect(gql_data[:groupeInstructeur][:id]).to eq(groupe_instructeur.to_typed_id)
|
||||
expect(gql_data[:groupeInstructeur][:dossiers][:nodes].size).to eq(1)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
context 'mutation' do
|
||||
let(:query_id) { 'ds-mutation-v2' }
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue