# Phase 9.0 — Sports Center Platform Foundation | Field | Value | | --- | --- | | Status | Complete | | Module | sports-center | | Version | 0.9.0.0 | | Database | `sports_center_db` | | API Port | 8006 | | ADR | ADR-001, ADR-003, ADR-006, ADR-014 | ## Goal Establish the **Sports Center Platform** as a completely independent enterprise microservice foundation. This is **not** a Gym Management system. It is a generic sports platform capable of supporting Gym, CrossFit, Yoga, Pilates, Swimming, Football Academy, Basketball/Volleyball clubs, Martial Arts, Dance, Cycling, Climbing, Tennis, Skating, and future sports — without hardcoding sport-specific business rules. ## Sports Center Responsibilities (Phase 9.0) Owns foundation aggregates only: - sports_centers, branches, sports - membership_types, memberships - coaches, sports_roles, sports_permissions - facilities, courts, rooms, locker_rooms, lockers - devices, device_providers, attendance_gateways - sports_configuration, sports_events, sports_settings, sports_audit Plus adapter-based connector interfaces (QR, RFID, Barcode, Fingerprint, Face Recognition, Turnstile, Door Controllers, Payment Terminals, Attendance Devices). **Does not** implement business workflows yet (booking, attendance engine, billing, class scheduling). ## Service Boundaries | Sports Center owns | Sports Center does not own | | --- | --- | | Aggregates above | Accounting / Posting Engine | | Sports HTTP APIs under `/api/v1/*` | CRM sales entities | | `sports_center.*` permissions | Loyalty ledger / points | | Publish-only sports events | Communication / SMS providers | | Connector **interfaces** | Notification delivery | | Tenant sports configuration | Identity / Storage blobs / AI inference | Communication with platform services is **API + Events only**. No cross-DB access. ## Owned Modules (aggregates) Independent aggregates in `backend/services/sports_center/app/models/foundation.py` (UUID refs only, no ORM relationship graphs). ## External Platform Dependencies (contracts only) Defined in `app/providers/contracts.py` — **no implementations**: - AccountingProvider, CRMProvider, LoyaltyProvider - CommunicationProvider, NotificationProvider, StorageProvider - AIProvider, IdentityProvider, Customer360Provider ## Connector Framework `app/connectors/` provides Protocol interfaces + `ConnectorRegistry`. Vendor adapters register by `adapter_key`. Business services never embed vendor SDKs. ## Published Events | Event | Aggregate | | --- | --- | | `sports_center.member.created` | membership (member identity) | | `sports_center.membership.created` | membership | | `sports_center.coach.created` | coach | | `sports_center.facility.created` | facility | | `sports_center.device.connected` / `disconnected` | device | | `sports_center.attendance.provider.changed` | attendance_gateway | | `sports_center.locker.assigned` / `released` | locker | Additional supporting foundation events for centers, branches, sports, configuration, settings. ## Configuration Support `sports_configurations` stores tenant/branch configuration shells for: Working Hours · Membership Policies · Attendance Policies · Booking Policies · Waiting List · Custom Fields · Time Zone · Language · Currency ## API Contracts (foundation) | Resource | Prefix | | --- | --- | | Sports centers | `/api/v1/sports-centers` | | Branches | `/api/v1/branches` | | Sports catalog | `/api/v1/sports` | | Membership types / memberships | `/api/v1/membership-types`, `/api/v1/memberships` | | Coaches / roles / permissions | `/api/v1/coaches`, `/roles`, `/permissions` | | Facilities / courts / rooms / lockers | `/api/v1/facilities`, `/courts`, `/rooms`, `/locker-rooms`, `/lockers` | | Devices / providers / gateways | `/api/v1/devices`, `/device-providers`, `/attendance-gateways` | | Configuration / events / settings | `/api/v1/configurations`, `/events`, `/settings` | | Health | `/health` | Special actions: `POST /devices/{id}/connect|disconnect`, `POST /lockers/{id}/assign|release`. ## Permissions `sports_center.*` trees covering centers, branches, sports, memberships, coaches, facilities, devices, configuration, audit, etc. ## Architecture Decisions 1. Database-per-service (`sports_center_db`) — ADR-001 / ADR-014 2. Row-level `tenant_id` — ADR-003 3. Event publish contracts via `EventEnvelope` — ADR-006 4. Sport-agnostic catalog model — no hardcoded sport engines 5. Adapter-based connectors — vendor logic outside business services 6. Soft delete + actor audit + sports audit log 7. Optimistic locking on centers, memberships, lockers, devices, configurations ## Folder Structure ``` backend/services/sports_center/ app/ api/v1/ core/ middlewares/ models/ repositories/ services/ validators/ schemas/ events/ permissions/ providers/ connectors/ policies/ specifications/ commands/ queries/ tests/ alembic/versions/0001_initial.py scripts/ensure_db.py README.md ``` ## Tests Executed Architecture · API foundation flow · permissions · migration · dependency · connectors · docs ## Related Documents - [Phase Handover 9.0](phase-handover/phase-9-0.md) - [ADR-014](architecture/adr/ADR-014.md) - [Module Registry](module-registry.md) - [Progress](progress.md)