From 1e8a440166b4747ec1b1ed64aa3ecc2f3851fa4c Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Fri, 4 Nov 2022 09:07:56 +0000 Subject: [PATCH] feat(graphql): expose deleted dossiers on groupe instructeur --- app/graphql/api/v2/stored_query.rb | 18 ++++++++++ app/graphql/schema.graphql | 35 +++++++++++++++++++ .../groupe_instructeur_with_dossiers_type.rb | 15 ++++++++ app/models/deleted_dossier.rb | 1 + app/models/groupe_instructeur.rb | 1 + 5 files changed, 70 insertions(+) diff --git a/app/graphql/api/v2/stored_query.rb b/app/graphql/api/v2/stored_query.rb index ddaee688d..1a37a5537 100644 --- a/app/graphql/api/v2/stored_query.rb +++ b/app/graphql/api/v2/stored_query.rb @@ -102,7 +102,12 @@ class API::V2::StoredQuery $revision: ID $createdSince: ISO8601DateTime $updatedSince: ISO8601DateTime + $deletedOrder: Order + $deletedFirst: Int + $deletedAfter: String + $deletedSince: ISO8601DateTime $includeDossiers: Boolean = false + $includeDeletedDossiers: Boolean = false $includeChamps: Boolean = true $includeAnotations: Boolean = true $includeTraitements: Boolean = true @@ -136,6 +141,19 @@ class API::V2::StoredQuery ...DossierFragment } } + deletedDossiers( + order: $deletedOrder + first: $deletedFirst + after: $deletedAfter + deletedSince: $deletedSince + ) @include(if: $includeDeletedDossiers) { + pageInfo { + ...PageInfoFragment + } + nodes { + ...DeletedDossierFragment + } + } } } diff --git a/app/graphql/schema.graphql b/app/graphql/schema.graphql index 11a5ec0ac..644f197da 100644 --- a/app/graphql/schema.graphql +++ b/app/graphql/schema.graphql @@ -1537,6 +1537,41 @@ type GroupeInstructeur { Un groupe instructeur avec ses dossiers """ type GroupeInstructeurWithDossiers { + """ + Liste de tous les dossiers supprimés d’un groupe instructeur. + """ + deletedDossiers( + """ + 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 supprimés 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 + + """ + L’ordre des dossiers supprimés. + """ + order: Order = ASC + ): DeletedDossierConnection! + """ Liste de tous les dossiers d’un groupe instructeur. """ diff --git a/app/graphql/types/groupe_instructeur_with_dossiers_type.rb b/app/graphql/types/groupe_instructeur_with_dossiers_type.rb index b9908b40a..6889d8e7b 100644 --- a/app/graphql/types/groupe_instructeur_with_dossiers_type.rb +++ b/app/graphql/types/groupe_instructeur_with_dossiers_type.rb @@ -13,6 +13,11 @@ module Types argument :min_revision, ID, required: false, description: "Seulement les dossiers pour les révisons après la révision donnée." end + field :deleted_dossiers, Types::DeletedDossierType.connection_type, "Liste de tous les dossiers supprimés d’un groupe instructeur.", null: false do + argument :order, Types::Order, default_value: :asc, required: false, description: "L’ordre des dossiers supprimés." + argument :deleted_since, GraphQL::Types::ISO8601DateTime, required: false, description: "Dossiers supprimés 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:) dossiers = object .dossiers @@ -55,5 +60,15 @@ module Types # https://graphql-ruby.org/queries/lookahead.html Connections::DossiersConnection.new(dossiers, lookahead: lookahead) end + + def deleted_dossiers(deleted_since: nil, order:) + dossiers = object.deleted_dossiers + + if deleted_since.present? + dossiers = dossiers.deleted_since(deleted_since) + end + + dossiers.order(deleted_at: order) + end end end diff --git a/app/models/deleted_dossier.rb b/app/models/deleted_dossier.rb index 103e2a6ea..61bcd66f6 100644 --- a/app/models/deleted_dossier.rb +++ b/app/models/deleted_dossier.rb @@ -16,6 +16,7 @@ # class DeletedDossier < ApplicationRecord belongs_to :procedure, -> { with_discarded }, inverse_of: :deleted_dossiers, optional: false + belongs_to :groupe_instructeur, inverse_of: :deleted_dossiers, optional: true scope :order_by_updated_at, -> (order = :desc) { order(created_at: order) } scope :deleted_since, -> (since) { where('deleted_dossiers.deleted_at >= ?', since) } diff --git a/app/models/groupe_instructeur.rb b/app/models/groupe_instructeur.rb index 6ebf8109d..abd161d75 100644 --- a/app/models/groupe_instructeur.rb +++ b/app/models/groupe_instructeur.rb @@ -15,6 +15,7 @@ class GroupeInstructeur < ApplicationRecord has_many :assign_tos, dependent: :destroy has_many :instructeurs, through: :assign_tos has_many :dossiers + has_many :deleted_dossiers has_and_belongs_to_many :exports, dependent: :destroy has_and_belongs_to_many :bulk_messages, dependent: :destroy