Merge pull request #8888 from tchak/graphql-improuve-stored-query

ETQ intégrateur API, je voudrais avoir accès aux dossiers récemment supprimés d’un groupe instructeur
This commit is contained in:
github-merge-queue[bot] 2023-04-18 13:25:31 +00:00 committed by GitHub
commit 26e516ea72
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 139 additions and 37 deletions

View file

@ -23,18 +23,18 @@ class API::V2::StoredQuery
$revision: ID $revision: ID
$createdSince: ISO8601DateTime $createdSince: ISO8601DateTime
$updatedSince: ISO8601DateTime $updatedSince: ISO8601DateTime
$deletedOrder: Order
$deletedFirst: Int
$deletedAfter: String
$deletedSince: ISO8601DateTime
$pendingDeletedOrder: Order $pendingDeletedOrder: Order
$pendingDeletedFirst: Int $pendingDeletedFirst: Int
$pendingDeletedAfter: String $pendingDeletedAfter: String
$pendingDeletedSince: ISO8601DateTime $pendingDeletedSince: ISO8601DateTime
$deletedOrder: Order
$deletedFirst: Int
$deletedAfter: String
$deletedSince: ISO8601DateTime
$includeGroupeInstructeurs: Boolean = false $includeGroupeInstructeurs: Boolean = false
$includeDossiers: Boolean = false $includeDossiers: Boolean = false
$includeDeletedDossiers: Boolean = false
$includePendingDeletedDossiers: Boolean = false $includePendingDeletedDossiers: Boolean = false
$includeDeletedDossiers: Boolean = false
$includeRevision: Boolean = false $includeRevision: Boolean = false
$includeService: Boolean = false $includeService: Boolean = false
$includeChamps: Boolean = true $includeChamps: Boolean = true
@ -118,11 +118,16 @@ class API::V2::StoredQuery
$revision: ID $revision: ID
$createdSince: ISO8601DateTime $createdSince: ISO8601DateTime
$updatedSince: ISO8601DateTime $updatedSince: ISO8601DateTime
$pendingDeletedOrder: Order
$pendingDeletedFirst: Int
$pendingDeletedAfter: String
$pendingDeletedSince: ISO8601DateTime
$deletedOrder: Order $deletedOrder: Order
$deletedFirst: Int $deletedFirst: Int
$deletedAfter: String $deletedAfter: String
$deletedSince: ISO8601DateTime $deletedSince: ISO8601DateTime
$includeDossiers: Boolean = false $includeDossiers: Boolean = false
$includePendingDeletedDossiers: Boolean = false
$includeDeletedDossiers: Boolean = false $includeDeletedDossiers: Boolean = false
$includeChamps: Boolean = true $includeChamps: Boolean = true
$includeAnotations: Boolean = true $includeAnotations: Boolean = true
@ -157,6 +162,19 @@ class API::V2::StoredQuery
...DossierFragment ...DossierFragment
} }
} }
pendingDeletedDossiers(
order: $pendingDeletedOrder
first: $pendingDeletedFirst
after: $pendingDeletedAfter
deletedSince: $pendingDeletedSince
) @include(if: $includePendingDeletedDossiers) {
pageInfo {
...PageInfoFragment
}
nodes {
...DeletedDossierFragment
}
}
deletedDossiers( deletedDossiers(
order: $deletedOrder order: $deletedOrder
first: $deletedFirst first: $deletedFirst
@ -250,14 +268,9 @@ class API::V2::StoredQuery
} }
demandeur { demandeur {
__typename __typename
... on PersonnePhysique { ...PersonnePhysiqueFragment
civilite
nom
prenom
dateDeNaissance
}
... on PersonneMoraleIncomplete { siret }
...PersonneMoraleFragment ...PersonneMoraleFragment
...PersonneMoraleIncompleteFragment
} }
demarche { demarche {
revision { revision {
@ -368,24 +381,6 @@ class API::V2::StoredQuery
collapsibleExplanationEnabled collapsibleExplanationEnabled
collapsibleExplanationText collapsibleExplanationText
} }
... on PaysChampDescriptor {
options {
name
code
}
}
... on RegionChampDescriptor {
options {
name
code
}
}
... on DepartementChampDescriptor {
options {
name
code
}
}
} }
fragment AvisFragment on Avis { fragment AvisFragment on Avis {
@ -502,8 +497,7 @@ class API::V2::StoredQuery
} }
... on EpciChamp { ... on EpciChamp {
epci { epci {
name ...EpciFragment
code
} }
departement { departement {
...DepartementFragment ...DepartementFragment
@ -524,14 +518,12 @@ class API::V2::StoredQuery
} }
... on RegionChamp { ... on RegionChamp {
region { region {
name ...RegionFragment
code
} }
} }
... on PaysChamp { ... on PaysChamp {
pays { pays {
name ...PaysFragment
code
} }
} }
... on SiretChamp { ... on SiretChamp {
@ -579,6 +571,17 @@ class API::V2::StoredQuery
} }
} }
fragment PersonneMoraleIncompleteFragment on PersonneMoraleIncomplete {
siret
}
fragment PersonnePhysiqueFragment on PersonnePhysique {
civilite
nom
prenom
}
fragment FileFragment on File { fragment FileFragment on File {
filename filename
contentType contentType
@ -602,11 +605,26 @@ class API::V2::StoredQuery
regionCode regionCode
} }
fragment PaysFragment on Pays {
name
code
}
fragment RegionFragment on Region {
name
code
}
fragment DepartementFragment on Departement { fragment DepartementFragment on Departement {
name name
code code
} }
fragment EpciFragment on Epci {
name
code
}
fragment CommuneFragment on Commune { fragment CommuneFragment on Commune {
name name
code code

View file

@ -2478,6 +2478,41 @@ type GroupeInstructeurWithDossiers {
Le numero du groupe instructeur. Le numero du groupe instructeur.
""" """
number: Int! number: Int!
"""
Liste de tous les dossiers en attente de suppression définitive dun groupe instructeur.
"""
pendingDeletedDossiers(
"""
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 en attente de suppression depuis la date.
"""
deletedSince: ISO8601DateTime
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Lordre des dossiers en attente de suppression.
"""
order: Order = ASC
): DeletedDossierConnection!
} }
type HeaderSectionChampDescriptor implements ChampDescriptor { type HeaderSectionChampDescriptor implements ChampDescriptor {

View file

@ -18,6 +18,11 @@ 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 :pending_deleted_dossiers, Types::DeletedDossierType.connection_type, "Liste de tous les dossiers en attente de suppression définitive dun groupe instructeur.", null: false do
argument :order, Types::Order, default_value: :asc, required: false, description: "Lordre des dossiers en attente de suppression."
argument :deleted_since, GraphQL::Types::ISO8601DateTime, required: false, description: "Dossiers en attente de suppression depuis la date."
end
def dossiers(updated_since: nil, created_since: nil, state: nil, archived: nil, revision: nil, max_revision: nil, min_revision: nil, order:, lookahead:) 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 = object
.dossiers .dossiers
@ -70,5 +75,15 @@ module Types
dossiers.order(deleted_at: order) dossiers.order(deleted_at: order)
end end
def pending_deleted_dossiers(deleted_since: nil, order:)
dossiers = object.dossiers.hidden_for_administration
if deleted_since.present?
dossiers = dossiers.hidden_since(deleted_since)
end
dossiers.order(hidden_by_user_at: order, hidden_by_administration_at: order)
end
end end
end end

View file

@ -136,7 +136,7 @@ describe API::V2::GraphqlController do
context 'include deleted Dossiers' do context 'include deleted Dossiers' do
let(:variables) { { demarcheNumber: procedure.id, includeDeletedDossiers: true, deletedSince: 2.weeks.ago.iso8601 } } let(:variables) { { demarcheNumber: procedure.id, includeDeletedDossiers: true, deletedSince: 2.weeks.ago.iso8601 } }
let(:deleted_dossier) { create(:deleted_dossier, dossier: dossier_accepte) } let(:deleted_dossier) { DeletedDossier.create_from_dossier(dossier_accepte, DeletedDossier.reasons.fetch(:user_request)) }
before { deleted_dossier } before { deleted_dossier }
@ -191,6 +191,40 @@ describe API::V2::GraphqlController do
expect(gql_data[:groupeInstructeur][:dossiers][:nodes].size).to eq(1) expect(gql_data[:groupeInstructeur][:dossiers][:nodes].size).to eq(1)
} }
end end
context 'include deleted Dossiers' do
let(:variables) { { groupeInstructeurNumber: groupe_instructeur.id, includeDeletedDossiers: true, deletedSince: 2.weeks.ago.iso8601 } }
let(:deleted_dossier) { DeletedDossier.create_from_dossier(dossier_accepte, DeletedDossier.reasons.fetch(:user_request)) }
before { deleted_dossier }
it {
expect(gql_errors).to be_nil
expect(gql_data[:groupeInstructeur][:id]).to eq(groupe_instructeur.to_typed_id)
expect(gql_data[:groupeInstructeur][:deletedDossiers][:nodes].size).to eq(1)
expect(gql_data[:groupeInstructeur][:deletedDossiers][:nodes].first[:id]).to eq(deleted_dossier.to_typed_id)
expect(gql_data[:groupeInstructeur][:deletedDossiers][:nodes].first[:dateSupression]).to eq(deleted_dossier.deleted_at.iso8601)
}
end
context 'include pending deleted Dossiers' do
let(:variables) { { groupeInstructeurNumber: groupe_instructeur.id, includePendingDeletedDossiers: true, pendingDeletedSince: 2.weeks.ago.iso8601 } }
before {
dossier.hide_and_keep_track!(dossier.user, DeletedDossier.reasons.fetch(:user_request))
dossier_accepte.hide_and_keep_track!(instructeur, DeletedDossier.reasons.fetch(:instructeur_request))
}
it {
expect(gql_errors).to be_nil
expect(gql_data[:groupeInstructeur][:id]).to eq(groupe_instructeur.to_typed_id)
expect(gql_data[:groupeInstructeur][:pendingDeletedDossiers][:nodes].size).to eq(2)
expect(gql_data[:groupeInstructeur][:pendingDeletedDossiers][:nodes].first[:id]).to eq(GraphQL::Schema::UniqueWithinType.encode('DeletedDossier', dossier.id))
expect(gql_data[:groupeInstructeur][:pendingDeletedDossiers][:nodes].second[:id]).to eq(GraphQL::Schema::UniqueWithinType.encode('DeletedDossier', dossier_accepte.id))
expect(gql_data[:groupeInstructeur][:pendingDeletedDossiers][:nodes].first[:dateSupression]).to eq(dossier.hidden_by_user_at.iso8601)
expect(gql_data[:groupeInstructeur][:pendingDeletedDossiers][:nodes].second[:dateSupression]).to eq(dossier_accepte.hidden_by_administration_at.iso8601)
}
end
end end
context 'getDemarcheDescriptor' do context 'getDemarcheDescriptor' do