E3: Seat Inventory Management - Tasks¶
Epic: E3: Seat Inventory Management
Task Legend¶
| Symbol | Status |
|---|---|
| ⬜ | Not started |
| 🟡 | In progress |
| ✅ | Complete |
| ❌ | Blocked |
E3-F1: Seat Status Model¶
Feature: E3-F1: Seat Status Model
| Status | Task | Verification |
|---|---|---|
| ⬜ | Define SeatStatus enum (Available, Sold, Reserved, Technical, Official, Blocked, Maintenance, Quarantined, Allocated, Inactive) | Enum created |
| ⬜ | Define color codes for each status | Config/constants file updated |
| ⬜ | Define valid status transitions matrix | Transition rules documented and coded |
| ⬜ | Add audit fields to Seat model (last_modified_by, last_modified_at) | Migration run |
E3-F2: Individual Seat Status Change¶
Feature: E3-F2: Individual Seat Status Change
| Status | Task | Verification |
|---|---|---|
| ⬜ | Implement PUT /admin/seats/{id}/status endpoint | Updates seat status |
| ⬜ | Validate status transition against allowed transitions | Invalid transition returns 400 |
| ⬜ | Require reason parameter for status change | Missing reason returns 400 |
| ⬜ | Log change to SeatAudit table | Audit record created |
| ⬜ | Warn if seat is locked (in cart) | Response includes warning |
E3-F3: Bulk Seat Operations¶
Feature: E3-F3: Bulk Seat Operations
| Status | Task | Verification |
|---|---|---|
| ⬜ | Implement POST /admin/seats/bulk-status endpoint | Accepts seat IDs array |
| ⬜ | Add selection by section parameter | Selects all seats in section |
| ⬜ | Add selection by row range (section + from_row + to_row) | Selects correct rows |
| ⬜ | Add optional status filter (only change seats with specific current status) | Filter applied |
| ⬜ | Process in batches with progress tracking | Progress updates available |
| ⬜ | Skip locked seats and report in response | Skipped seats listed |
E3-F4: Seat Search & Lookup¶
Feature: E3-F4: Seat Search & Lookup
| Status | Task | Verification |
|---|---|---|
| ⬜ | Implement GET /admin/seats/search?seat_number=X endpoint | Returns seat details |
| ⬜ | Implement GET /admin/seats/search?quota_id=X endpoint | Returns all seats in quota |
| ⬜ | Implement GET /admin/seats/search?email=X endpoint | Returns tickets for email |
| ⬜ | Implement advanced search with multiple filters (match, status, section, date range) | Filters combine correctly |
| ⬜ | Add pagination to search results | Page/limit params work |
E3-F5: Stadium Visualization¶
Feature: E3-F5: Stadium Visualization
Admin Visualization (Inventory Monitoring)¶
| Status | Task | Verification |
|---|---|---|
| ⬜ | Create Konva.js canvas component for seat map rendering | Canvas renders seat grid |
| ⬜ | Load seat map JSON and render seats with correct positions | Seats match JSON layout |
| ⬜ | Color-code seats by status (10 status colors) | Colors match legend |
| ⬜ | Implement zoom controls (mouse wheel, buttons) | Zoom in/out works |
| ⬜ | Implement pan controls (drag, keyboard) | Can navigate large maps |
| ⬜ | Add status legend component | All 10 statuses shown |
| ⬜ | Implement sector-level view with aggregated status colors | Sectors colored by dominant status |
| ⬜ | Implement click on sector to show seat grid | Seat grid loads |
| ⬜ | Implement click on seat to show detail modal | Modal shows seat info |
| ⬜ | Show ticket holder info in modal (if sold) | Holder name visible |
| ⬜ | Add "Change Status" action in modal | Status change works |
Status Color Reference¶
| Status | Color | Hex |
|---|---|---|
| Available | Green | #22C55E |
| Sold | Blue | #3B82F6 |
| Reserved | Yellow | #EAB308 |
| Technical | Purple | #A855F7 |
| Official | Orange | #F97316 |
| Blocked | Red | #EF4444 |
| Maintenance | Gray | #6B7280 |
| Quarantined | Brown | #92400E |
| Allocated | Teal | #14B8A6 |
| Inactive | Black | #1F2937 |
E3-F6: Sector-to-Sector Transfer¶
Feature: E3-F6: Sector-to-Sector Transfer
| Status | Task | Verification |
|---|---|---|
| ⬜ | Implement POST /admin/tickets/sector-transfer endpoint | Accepts source seats and destination sector |
| ⬜ | Assign new seats in destination using snake algorithm | Adjacent seats assigned |
| ⬜ | Update ticket seat_id to new seats | Tickets point to new seats |
| ⬜ | Mark original seats as Blocked | Original seats status changed |
| ⬜ | Send notification to affected ticket holders | Email/push sent |
| ⬜ | Make transfer atomic (all or nothing) | Partial failure rolls back |
Last Updated: February 2026