Include Loyalty/Communication/Sports Center backends and registry updates alongside production nginx and compose wiring. Co-authored-by: Cursor <cursoragent@cursor.com>
87 lines
3.4 KiB
Markdown
87 lines
3.4 KiB
Markdown
# Phase 9.2 — Sports Center Member Management
|
|
|
|
| Field | Value |
|
|
| --- | --- |
|
|
| Status | Complete |
|
|
| Module | sports-center |
|
|
| Version | 0.9.2.0 |
|
|
| Database | `sports_center_db` |
|
|
| API Port | 8006 |
|
|
| ADR | ADR-001, ADR-003, ADR-006, ADR-014 |
|
|
|
|
## Goal
|
|
|
|
Deliver **Member Management** on the independent Sports Center Platform: sports members, family links, medical shells, emergency contacts, membership assignment (consuming the Phase 9.1 catalog), cards/QR/digital passes, waivers, and document attachments — without coach/attendance/booking engines.
|
|
|
|
## Scope Completed
|
|
|
|
- Separate `Member` aggregate (distinct from Platform Member and Loyalty Member)
|
|
- Family members, emergency contacts, medical information (privacy-aware; Storage file refs only)
|
|
- Membership assignment via `member_id` + status transitions (activate/suspend/cancel/freeze/unfreeze)
|
|
- Membership cards (physical/digital/QR), digital membership passes, waivers (sign), member documents
|
|
- Validators, permissions, publish-only events, Alembic `0003_phase_92_member_management`
|
|
- `/capabilities` advertises `member_management: true` (version `0.9.2.0`)
|
|
|
|
## Out of Scope
|
|
|
|
- Coach & staff engines (9.3)
|
|
- Scheduling & booking (9.4)
|
|
- Attendance & access control engines (9.5)
|
|
- Accounting postings / payment capture
|
|
- Binary file storage (refs only)
|
|
- Recreating Membership Catalog tables (9.1)
|
|
|
|
## Owned Aggregates
|
|
|
|
| Aggregate | Table |
|
|
| --- | --- |
|
|
| Member | `members` |
|
|
| FamilyMember | `family_members` |
|
|
| EmergencyContact | `emergency_contacts` |
|
|
| MedicalInformation | `medical_information` |
|
|
| MembershipCard | `membership_cards` |
|
|
| DigitalMembership | `digital_memberships` |
|
|
| Waiver | `waivers` |
|
|
| MemberDocument | `member_documents` |
|
|
|
|
Additive on `memberships`: `member_id`, `freeze_starts_on`, `freeze_ends_on`; status enum adds `frozen`.
|
|
|
|
## APIs
|
|
|
|
| Resource | Prefix |
|
|
| --- | --- |
|
|
| Members | `/api/v1/members` |
|
|
| Family members | `/api/v1/family-members` |
|
|
| Emergency contacts | `/api/v1/emergency-contacts` |
|
|
| Medical | `/api/v1/medical-information` |
|
|
| Cards | `/api/v1/membership-cards` |
|
|
| Digital | `/api/v1/digital-memberships` |
|
|
| Waivers | `/api/v1/waivers` (+ `/{id}/sign`) |
|
|
| Documents | `/api/v1/member-documents` |
|
|
| Membership status | `/api/v1/memberships/{id}/activate|suspend|cancel|freeze|unfreeze|assign-member` |
|
|
|
|
## Events
|
|
|
|
`sports_center.member.updated`, `membership.assigned`, `membership.status_changed`, `membership.frozen`, `membership.unfrozen`, `family_member.created`, `emergency_contact.created`, `medical_information.upserted`, `membership_card.issued|revoked`, `digital_membership.issued`, `waiver.created|signed`, `member_document.attached`.
|
|
|
|
## Permissions
|
|
|
|
`sports_center.members.*`, `family_members.*`, `emergency_contacts.*`, `medical.*`, `membership_cards.*`, `digital_memberships.*`, `waivers.*`, `member_documents.*`, plus `memberships.assign` / `memberships.status`.
|
|
|
|
## Migration
|
|
|
|
| Revision | Description |
|
|
| --- | --- |
|
|
| `0003_phase_92_member_management` | Member tables + additive membership columns |
|
|
|
|
## Tests
|
|
|
|
`test_members.py` (happy path, assign/isolation, invalid freeze transition, capabilities) + architecture/migration/docs updates.
|
|
|
|
## Related Documents
|
|
|
|
- [Handover 9.2](phase-handover/phase-9-2.md)
|
|
- [Phase 9.1](sports-center-phase-9-1.md)
|
|
- [ADR-014](architecture/adr/ADR-014.md)
|
|
- [Module Registry](module-registry.md#sports_center)
|