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.
This commit is contained in:
taitus
2024-10-17 11:12:45 +02:00
parent 04356accb9
commit d3b253dfc7
3 changed files with 18 additions and 34 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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