From d3b253dfc76e78f36a225ea8ee94c93e09098c84 Mon Sep 17 00:00:00 2001 From: taitus Date: Thu, 17 Oct 2024 11:12:45 +0200 Subject: [PATCH] Add object_by_id_field helper to BaseObject and replace argument definitions - Created `object_by_id_field` method in `BaseObject` to simplify the declaration of fields with an `id` argument. - Replaced all instances of `field ... do` blocks with `object_by_id_field` where fields require an `id` argument across multiple types. --- app/graphql/types/base_object.rb | 6 +++++ app/graphql/types/budget_type.rb | 4 +-- app/graphql/types/query_type.rb | 42 +++++++++----------------------- 3 files changed, 18 insertions(+), 34 deletions(-) diff --git a/app/graphql/types/base_object.rb b/app/graphql/types/base_object.rb index d98173b6a..252294d44 100644 --- a/app/graphql/types/base_object.rb +++ b/app/graphql/types/base_object.rb @@ -24,5 +24,11 @@ module Types define_method(field_name) { object.send(field_name).public_for_api } end end + + def self.object_by_id_field(field_name, type, description, null:) + field field_name, type, description, null: null do + argument :id, ID, required: true, default_value: false + end + end end end diff --git a/app/graphql/types/budget_type.rb b/app/graphql/types/budget_type.rb index 87e2cef3a..b31294196 100644 --- a/app/graphql/types/budget_type.rb +++ b/app/graphql/types/budget_type.rb @@ -4,9 +4,7 @@ module Types field :name, String, null: true field :phase, String, null: true field :investments, Types::BudgetInvestmentType.connection_type, "Returns all investments", null: false - field :investment, Types::BudgetInvestmentType, null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :investment, Types::BudgetInvestmentType, "Returns investment for ID", null: false def investments Budget::Investment.public_for_api diff --git a/app/graphql/types/query_type.rb b/app/graphql/types/query_type.rb index ca90a77e3..6541145fe 100644 --- a/app/graphql/types/query_type.rb +++ b/app/graphql/types/query_type.rb @@ -1,61 +1,41 @@ module Types class QueryType < Types::BaseObject field :budgets, Types::BudgetType.connection_type, "Returns all budgets", null: false - field :budget, Types::BudgetType, "Returns budget for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :budget, Types::BudgetType, "Returns budget for ID", null: false field :comments, Types::CommentType.connection_type, "Returns all comments", null: false - field :comment, Types::CommentType, "Returns comment for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :comment, Types::CommentType, "Returns comment for ID", null: false field :debates, Types::DebateType.connection_type, "Returns all debates", null: false - field :debate, Types::DebateType, "Returns debate for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :debate, Types::DebateType, "Returns debate for ID", null: false field :geozones, Types::GeozoneType.connection_type, "Returns all geozones", null: false - field :geozone, Types::GeozoneType, "Returns geozone for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :geozone, Types::GeozoneType, "Returns geozone for ID", null: false field :milestones, Types::MilestoneType.connection_type, "Returns all milestones", null: false - field :milestone, Types::MilestoneType, "Returns milestone for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :milestone, Types::MilestoneType, "Returns milestone for ID", null: false field :proposals, Types::ProposalType.connection_type, "Returns all proposals", null: false - field :proposal, Types::ProposalType, "Returns proposal for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :proposal, Types::ProposalType, "Returns proposal for ID", null: false field :proposal_notifications, Types::ProposalNotificationType.connection_type, "Returns all proposal notifications", null: false - field :proposal_notification, + object_by_id_field :proposal_notification, Types::ProposalNotificationType, "Returns proposal notification for ID", - null: false do - argument :id, ID, required: true, default_value: false - end + null: false field :tags, Types::TagType.connection_type, "Returns all tags", null: false - field :tag, Types::TagType, "Returns tag for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :tag, Types::TagType, "Returns tag for ID", null: false field :users, Types::UserType.connection_type, "Returns all users", null: false - field :user, Types::UserType, "Returns user for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :user, Types::UserType, "Returns user for ID", null: false field :votes, Types::VoteType.connection_type, "Returns all votes", null: false - field :vote, Types::VoteType, "Returns vote for ID", null: false do - argument :id, ID, required: true, default_value: false - end + object_by_id_field :vote, Types::VoteType, "Returns vote for ID", null: false def budgets Budget.public_for_api