Closes #172 - New GET /api/v2/refractor/cards endpoint in refractor router with team_id (required), card_type, tier, season, progress, limit, offset filters - season filter uses EXISTS subquery against batting/pitching_season_stats - progress=close filter uses CASE expression to compare current_value against next tier threshold (>= 80%) - LEFT JOIN on Player so deleted players return player_name: null - Sorting: current_tier DESC, current_value DESC - count reflects total matching rows before pagination - Extended _build_card_state_response() with progress_pct (computed) and optional player_name; single-card endpoint gains progress_pct automatically - Added non-unique team_id index on refractor_card_state in db_engine.py - Migration: 2026-03-25_add_refractor_card_state_team_index.sql - Removed pre-existing unused RefractorTrack import in evaluate_game (ruff) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
20 lines
625 B
PL/PgSQL
20 lines
625 B
PL/PgSQL
-- Migration: Add team_id index to refractor_card_state
|
|
-- Date: 2026-03-25
|
|
--
|
|
-- Adds a non-unique index on refractor_card_state.team_id to support the new
|
|
-- GET /api/v2/refractor/cards list endpoint, which filters by team as its
|
|
-- primary discriminator and is called on every /refractor status bot command.
|
|
--
|
|
-- The existing unique index is on (player_id, team_id) with player leading,
|
|
-- so team-only queries cannot use it efficiently.
|
|
|
|
BEGIN;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_refractor_card_state_team
|
|
ON refractor_card_state (team_id);
|
|
|
|
COMMIT;
|
|
|
|
-- Rollback:
|
|
-- DROP INDEX IF EXISTS idx_refractor_card_state_team;
|