Skip to content

Commit d96574a

Browse files
authored
Merge pull request #11269 from neinteractiveliterature/why-cant-rob-see-the-signup-round-table
Don't require unnecessary permissions to view ranked choice decisions' target events
2 parents d967d64 + 033525a commit d96574a

11 files changed

Lines changed: 38 additions & 22 deletions

app/graphql/graphql_operations_generated.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

app/graphql/types/ranked_choice_decision_type.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class RankedChoiceDecisionType < Types::BaseObject
2929
field :signup_round, Types::SignupRoundType, null: false do # rubocop:disable GraphQL/ExtractType
3030
description "The signup round in which this decision was made."
3131
end
32+
field :target_run, Types::RunType, description: "The run this ranked choice was attempting to sign up for."
3233
field :updated_at, Types::DateType, null: false do
3334
description "The time this RankedChoiceDecision was last modified."
3435
end
@@ -41,6 +42,7 @@ class RankedChoiceDecisionType < Types::BaseObject
4142
:signup_ranked_choice,
4243
:signup_round,
4344
:signup,
44-
:signup_request
45+
:signup_request,
46+
:target_run
4547
end
4648
end

app/javascript/SignupRoundsAdmin/RankedChoiceSignupDecisionsPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ function RankedChoiceSignupDecisionsTable({ signupRoundId }: RankedChoiceSignupD
174174
enableColumnFilter: true,
175175
enableSorting: true,
176176
}),
177-
columnHelper.accessor('signup_ranked_choice.target_run.event.title', {
177+
columnHelper.accessor('target_run.event.title', {
178178
header: 'Event',
179179
id: 'event_title',
180180
enableColumnFilter: true,

app/javascript/SignupRoundsAdmin/queries.generated.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ export type SignupRoundRankedChoiceDecisionsTableQueryVariables = Types.Exact<{
1818
}>;
1919

2020

21-
export type SignupRoundRankedChoiceDecisionsTableQueryData = { __typename: 'Query', convention: { __typename: 'Convention', id: string, signup_round: { __typename: 'SignupRound', id: string, ranked_choice_decisions_paginated: { __typename: 'RankedChoiceDecisionsPagination', total_pages: number, entries: Array<{ __typename: 'RankedChoiceDecision', id: string, created_at: string, decision: Types.RankedChoiceDecisionValue, reason?: Types.RankedChoiceDecisionReason | null, user_con_profile?: { __typename: 'UserConProfile', id: string, name_without_nickname: string } | null, signup_ranked_choice?: { __typename: 'SignupRankedChoice', id: string, priority: number, requested_bucket_key?: string | null, state: Types.SignupRankedChoiceState, target_run: { __typename: 'Run', id: string, starts_at: string, title_suffix?: string | null, event: { __typename: 'Event', id: string, title?: string | null } } } | null }> } } } };
21+
export type SignupRoundRankedChoiceDecisionsTableQueryData = { __typename: 'Query', convention: { __typename: 'Convention', id: string, signup_round: { __typename: 'SignupRound', id: string, ranked_choice_decisions_paginated: { __typename: 'RankedChoiceDecisionsPagination', total_pages: number, entries: Array<{ __typename: 'RankedChoiceDecision', id: string, created_at: string, decision: Types.RankedChoiceDecisionValue, reason?: Types.RankedChoiceDecisionReason | null, user_con_profile?: { __typename: 'UserConProfile', id: string, name_without_nickname: string } | null, target_run?: { __typename: 'Run', id: string, starts_at: string, title_suffix?: string | null, event: { __typename: 'Event', id: string, title?: string | null } } | null }> } } } };
2222

2323
export const SignupRoundFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SignupRoundFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SignupRound"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"maximum_event_signups"}},{"kind":"Field","name":{"kind":"Name","value":"automation_action"}},{"kind":"Field","name":{"kind":"Name","value":"ranked_choice_order"}},{"kind":"Field","name":{"kind":"Name","value":"rerandomize_lottery_numbers"}},{"kind":"Field","name":{"kind":"Name","value":"start"}},{"kind":"Field","name":{"kind":"Name","value":"executed_at"}}]}}]} as unknown as DocumentNode<SignupRoundFieldsFragment, unknown>;
2424
export const SignupRoundsAdminQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"SignupRoundsAdminQuery"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"convention"},"name":{"kind":"Name","value":"conventionByRequestHost"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"signup_rounds"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"SignupRoundFields"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SignupRoundFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SignupRound"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"maximum_event_signups"}},{"kind":"Field","name":{"kind":"Name","value":"automation_action"}},{"kind":"Field","name":{"kind":"Name","value":"ranked_choice_order"}},{"kind":"Field","name":{"kind":"Name","value":"rerandomize_lottery_numbers"}},{"kind":"Field","name":{"kind":"Name","value":"start"}},{"kind":"Field","name":{"kind":"Name","value":"executed_at"}}]}}]} as unknown as DocumentNode<SignupRoundsAdminQueryData, SignupRoundsAdminQueryVariables>;
25-
export const SignupRoundRankedChoiceDecisionsTableQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"SignupRoundRankedChoiceDecisionsTableQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"signupRoundId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"page"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"perPage"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"RankedChoiceDecisionFiltersInput"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"sort"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SortInput"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"convention"},"name":{"kind":"Name","value":"conventionByRequestHost"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"signup_round"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"signupRoundId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"ranked_choice_decisions_paginated"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"page"}}},{"kind":"Argument","name":{"kind":"Name","value":"per_page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"perPage"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"Variable","name":{"kind":"Name","value":"sort"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total_pages"}},{"kind":"Field","name":{"kind":"Name","value":"entries"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"created_at"}},{"kind":"Field","name":{"kind":"Name","value":"decision"}},{"kind":"Field","name":{"kind":"Name","value":"reason"}},{"kind":"Field","name":{"kind":"Name","value":"user_con_profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name_without_nickname"}}]}},{"kind":"Field","name":{"kind":"Name","value":"signup_ranked_choice"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"priority"}},{"kind":"Field","name":{"kind":"Name","value":"requested_bucket_key"}},{"kind":"Field","name":{"kind":"Name","value":"state"}},{"kind":"Field","name":{"kind":"Name","value":"target_run"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"starts_at"}},{"kind":"Field","name":{"kind":"Name","value":"title_suffix"}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<SignupRoundRankedChoiceDecisionsTableQueryData, SignupRoundRankedChoiceDecisionsTableQueryVariables>;
25+
export const SignupRoundRankedChoiceDecisionsTableQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"SignupRoundRankedChoiceDecisionsTableQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"signupRoundId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"page"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"perPage"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filters"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"RankedChoiceDecisionFiltersInput"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"sort"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SortInput"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","alias":{"kind":"Name","value":"convention"},"name":{"kind":"Name","value":"conventionByRequestHost"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"signup_round"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"signupRoundId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"ranked_choice_decisions_paginated"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"page"}}},{"kind":"Argument","name":{"kind":"Name","value":"per_page"},"value":{"kind":"Variable","name":{"kind":"Name","value":"perPage"}}},{"kind":"Argument","name":{"kind":"Name","value":"filters"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filters"}}},{"kind":"Argument","name":{"kind":"Name","value":"sort"},"value":{"kind":"Variable","name":{"kind":"Name","value":"sort"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total_pages"}},{"kind":"Field","name":{"kind":"Name","value":"entries"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"created_at"}},{"kind":"Field","name":{"kind":"Name","value":"decision"}},{"kind":"Field","name":{"kind":"Name","value":"reason"}},{"kind":"Field","name":{"kind":"Name","value":"user_con_profile"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name_without_nickname"}}]}},{"kind":"Field","name":{"kind":"Name","value":"target_run"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"starts_at"}},{"kind":"Field","name":{"kind":"Name","value":"title_suffix"}},{"kind":"Field","name":{"kind":"Name","value":"event"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<SignupRoundRankedChoiceDecisionsTableQueryData, SignupRoundRankedChoiceDecisionsTableQueryVariables>;

app/javascript/SignupRoundsAdmin/queries.graphql

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,14 @@ query SignupRoundRankedChoiceDecisionsTableQuery(
4343
name_without_nickname
4444
}
4545

46-
signup_ranked_choice {
46+
target_run {
4747
id
48-
priority
49-
requested_bucket_key
50-
state
48+
starts_at
49+
title_suffix
5150

52-
target_run {
51+
event {
5352
id
54-
starts_at
55-
title_suffix
56-
57-
event {
58-
id
59-
title
60-
}
53+
title
6154
}
6255
}
6356
}

app/javascript/graphqlTypes.generated.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5072,6 +5072,8 @@ export type RankedChoiceDecision = {
50725072
signup_request?: Maybe<SignupRequest>;
50735073
/** The signup round in which this decision was made. */
50745074
signup_round: SignupRound;
5075+
/** The run this ranked choice was attempting to sign up for. */
5076+
target_run?: Maybe<Run>;
50755077
/** The time this RankedChoiceDecision was last modified. */
50765078
updated_at: Scalars['Date']['output'];
50775079
/** The user profile this decision pertains to, if any. */

app/models/ranked_choice_decision.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class RankedChoiceDecision < ApplicationRecord
4343
belongs_to :after_signup_ranked_choice, class_name: "SignupRankedChoice", optional: true
4444
belongs_to :signup, optional: true
4545
belongs_to :signup_request, optional: true
46-
has_one :target_run, through: :signup_request
46+
has_one :target_run, through: :signup_ranked_choice
4747
has_one :event, through: :target_run
4848

4949
DECISIONS = Types::RankedChoiceDecisionValueType.values.values.map(&:value).freeze

app/policies/ranked_choice_decision_policy.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def manage?
2424
end
2525

2626
class Scope < Scope
27-
def resolve
27+
def resolve # rubocop:disable Metrics/MethodLength
2828
return scope.all if site_admin?
2929

3030
decision_scope =
@@ -41,8 +41,10 @@ def resolve
4141
end
4242

4343
if assumed_identity_from_profile
44-
decision_scope.where(
45-
target_run: Run.where(event: Event.where(convention_id: assumed_identity_from_profile.convention_id))
44+
decision_scope.joins(signup_ranked_choice: :target_run).where(
45+
runs: {
46+
id: Run.where(event: Event.where(convention_id: assumed_identity_from_profile.convention_id)).select(:id)
47+
}
4648
)
4749
else
4850
decision_scope

app/presenters/tables/ranked_choice_decisions_table_results_presenter.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def generate_csv_cell(decision)
3030
ilike_column_filter :title, association_name: :event
3131

3232
def generate_csv_cell(decision)
33-
decision.event&.title
33+
decision.event.title
3434
end
3535
end
3636

schema.graphql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6425,6 +6425,11 @@ type RankedChoiceDecision {
64256425
"""
64266426
signup_round: SignupRound!
64276427

6428+
"""
6429+
The run this ranked choice was attempting to sign up for.
6430+
"""
6431+
target_run: Run
6432+
64286433
"""
64296434
The time this RankedChoiceDecision was last modified.
64306435
"""

0 commit comments

Comments
 (0)