## Features
### Admin Schedule Page (`packages/app/src/pages/admin/schedule.vue`)
- Interactive date-based slot editor for managing daily schedules
- Real-time slot editing: start/end times, capacity adjustments
- Slot deletion with conflict warnings when bookings exist
- Add new slots with modal dialog
- Live booking status display (booked count, people names)
- Publish/Save changes with sync feedback
- Revert unsaved changes with confirmation
- Skeleton loading states and empty state handling
- Responsive design with optimized mobile UX
### Backend Enhancements
- **New DTO** (`PublishDaySlotsDto`): Structured slot publishing with validation
- Date string validation
- Slot array with existing slot IDs for updates
- Time and capacity validation per slot
- **Schedule Preview API** (`getSchedulePreview`):
- Check for existing published slots
- Fallback to active WeekTemplates for unpublished dates
- Unified response format with isPublished flag
- **Publish Slots API** (`publishDaySlots`):
- Atomic transaction for consistency
- Update existing slots with new times/capacity
- Create new slots from template data
- Delete unpublished slots or set to CLOSED if bookings exist
- Prevent capacity reduction below existing bookings
- Returns all published slots for feedback
### State Management
- Enhanced admin store with schedule state
- Support for pending/unsaved slot changes
- Optimistic UI updates with server sync
### Documentation
- Comprehensive scheduling system architecture docs
- Quick reference for admin workflows
- Flow diagrams and state transitions
- Implementation guide for future maintenance
## Breaking Changes
None
## Testing Recommendations
- Create slots for future dates via schedule editor
- Verify booking prevention for locked/full slots
- Test capacity adjustments with existing bookings
- Confirm template-based schedule generation
- Verify transaction rollback on publish failures
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Booking: reservation with atomic transactions, cancellation with refund
logic based on cancelHoursLimit (23 tests)
Payment: WeChat Pay integration (mock), order lifecycle, membership
creation on payment callback (13 tests)
Scheduler: cron tasks for slot generation, cleanup, membership expiry (8 tests)
109 total tests passing across 9 test suites
- pnpm workspace with packages/app, packages/server, packages/shared
- @mp-pilates/shared: enums, constants, TypeScript interfaces for all 8 data models
- @mp-pilates/server: NestJS bootstrap with health check, validation pipe, CORS
- Base TypeScript config with strict mode