Review: Admin player detail page -- product payment matrix and contact info (re-review)
Verdict: APPROVED
Re-review of board item #1609 after refinements. Previous review (
review-1609-2026-06-25) found 3 issues, all resolved.Previous Issues — Resolution
- [x] arch-rails-views note missing — RESOLVED. Note
arch-rails-views(id: 1839) exists in pal-e-docs, scoped to paldocs project. Both paldocs and westside-basketball are Rails ERB apps sharing the same architecture pattern. Cross-project arch note is acceptable. - [x] players_controller.rb listed as "modify" — RESOLVED. Issue body now clarifies: "add show action (controller created by #55)." File is correctly listed under "Files the agent should modify" since #55 creates it first.
- [x] Missing routing constraint — RESOLVED. Constraints section now includes: "Existing admin/players resource has a member { patch :monthly_fee } route dispatched to roster_report_controller. The show action uses the players_controller — do not disrupt existing member routes."
Template Completeness
- [x] Type — Feature
- [x] Lineage — References #55 and story WS-S9
- [x] Repo — ldraney/westside-basketball
- [x] User Story — As Marcus (admin), track payment status
- [x] Context — Good background on data model and purpose
- [x] File Targets — Create and modify targets listed with DO NOT TOUCH directive
- [x] Feature Flag — none (appropriate for internal admin page)
- [x] Acceptance Criteria — 6 criteria listed
- [x] Test Expectations — Controller tests with run command
- [x] Constraints — 5 constraints listed (up from 3, added routing caution and controller dependency note)
- [x] Checklist — Standard 3-item checklist
- [x] Related — References companion tickets and future sprints
Traceability
- [x] story:WS-S9 label — "As an admin, I want to track payment status per player so that I know who owes what"
- [x] story note verified — found in project-westside-basketball user-stories section under Admin (Marcus)
- [x] arch:rails-views label — Rails views component
- [x] arch note verified —
arch-rails-viewsnote exists in pal-e-docs (id: 1839, project: paldocs, cross-project pattern) - [x] Forgejo issue — ldraney/westside-basketball#58, state: open
File Targets
- [x]
app/views/admin/players/show.html.erb— to be created. Directory does not yet exist (expected, will be created by #55 or at file creation time). No collision. - [x]
app/controllers/admin/players_controller.rb— to be modified (created by dependency #55). File does not yet exist, consistent with dependency chain. Ticket correctly notes "#55 creates it, this ticket adds show action." - [x]
config/routes.rb— verified exists. Current routes haveresources :players, only: []at line 15 inside admin namespace with only amonthly_feemember route via roster_report controller. Adding:showis the correct approach. - [x]
app/views/admin/payments/— DO NOT TOUCH directive verified. Directory exists withindex.html.erb.
Data Model Verification
- [x]
subscription_status— exists on players table (enum: subscriptionstatus, default: none) - [x]
jersey_order_status— exists on players table (enum: jerseyorderstatus: none/pending/paid/shipped) - [x]
monthly_fee— exists on players table (integer column) - [x]
orders.amount_cents— exists (integer, not null) with status enum (pending/paid/refunded/canceled) - [x]
orders.product_id— exists with FK and index - [x]
product.category— exists (enum: jersey/contract/tournament/equipment/monthly) — matches AC categories - [x]
email_log.email_type— exists (enum includes payment_request and outstanding_balance) — matches AC filter - [x] Player model associations verified: has_many :orders, :payment_links, :email_logs, :teams (through player_teams), :registrations, :jersey_public_orders; belongs_to :parent, :tenant
Repo Placement
OK — issue filed on ldraney/westside-basketball, all file targets are in that repo. Single-repo change.
Dependencies
- [x]
depends:55(Admin player list page) — board item #1606, currently in backlog. Correctly documented. #55 depends on #54 (Keycloak auth, now done). Dependency chain: #54 (done) → #55 (backlog) → #58 (backlog). Sprint:5 label on both #55 and #58 is correct. - [x] Issue body references #54 as prerequisite — consistent with board labels.
- [x] Downstream: board item #1610 (sprint:6) has
depends:58. Not documented in issue body but acceptable — downstream awareness is sprint-level.
Acceptance Criteria
6 acceptance criteria — all are verifiable by an agent:
- AC1-4: Route response, DOM content checks, data correctness — testable via controller tests and view assertions
- AC5: Back button — testable via link presence check
- AC6: Mobile-responsive — standard for ERB; verifiable via viewport meta tag presence. Acceptable as-is.
Test commands are real:
rails test test/controllers/admin/players_controller_test.rb is the correct Rails test invocation path.Blast Radius
- The existing
admin/roster_reportcontroller handlesupdate_feeon the player member route. The newadmin/players_controller.rbshow action must coexist with this. The Constraints section now explicitly documents this routing concern — the agent is instructed not to disrupt existing member routes. Risk mitigated. - No similar admin detail pattern exists elsewhere — this is the first admin detail page, so no blast radius to sibling services.
Decomposition Assessment
3 file targets in 1 repo, 6 acceptance criteria (just over the 5 threshold but all are tightly related view/controller concerns for a single page). Estimated agent work: ~3-4 minutes. No decomposition needed — the 6th AC (mobile-responsive) is a CSS concern bundled with the view, not a separate system.
Recommendation
No action needed. All three issues from the previous review have been resolved. Ticket is ready for implementation.