forked from jamesp/sasa-membership
updated readme files to reflect earlier changes in last commit
This commit is contained in:
@@ -10,6 +10,8 @@ A membership management system for Swansea Airport Stakeholders' Alliance, built
|
||||
- **Membership tiers**: Configurable Personal, Aircraft Owners, Corporate, and custom tiers with annual fees, descriptions, active/inactive state, and benefits.
|
||||
- **Memberships and payments**: Membership lifecycle tracking, Square card payments, cash/check/manual payments, dummy test payments, payment history, transaction IDs, refund state, and payment-to-membership linking.
|
||||
- **Events and RSVPs**: Event CRUD, upcoming event listing, member RSVP updates, RSVP status tracking, attendance fields, and admin RSVP visibility.
|
||||
- **Time handling**: Backend timestamps are stored and returned as UTC/Zulu, the frontend renders member-facing dates and times in Europe/London, and event entry is converted back to UTC before save.
|
||||
- **ESP RFID**: Reader provisioning, heartbeat, time sync, tap capture, queued card writes, and admin review of readers/cards/attendance.
|
||||
- **Volunteer and profile data**: Volunteer flag/level support, configurable member profile questions, conditional questions, admin-only answers, seeded aviation/volunteering questions, and data models for volunteer roles, assignments, schedules, and certificates.
|
||||
- **Email system**: SMTP2GO-backed email sending, default database templates, editable templates, welcome/password-reset/test emails, bounce webhooks, bounce stats, cleanup, and manual deactivation.
|
||||
- **Feature flags**: Backend feature-flag service with frontend context and admin status/reload controls.
|
||||
@@ -49,11 +51,13 @@ membership/
|
||||
│ │ │ │ ├── email.py # SMTP2GO email and bounces
|
||||
│ │ │ │ ├── email_templates.py
|
||||
│ │ │ │ ├── events.py # Events and RSVPs
|
||||
│ │ │ │ ├── esp.py # ESP RFID provisioning, taps, attendance, write jobs
|
||||
│ │ │ │ └── feature_flags.py
|
||||
│ │ │ └── dependencies.py # Auth dependencies
|
||||
│ │ ├── core/
|
||||
│ │ │ ├── config.py # Configuration
|
||||
│ │ │ ├── database.py # Database setup
|
||||
│ │ │ ├── datetime.py # UTC helpers and Zulu serialization helpers
|
||||
│ │ │ └── security.py # Security utilities
|
||||
│ │ ├── models/
|
||||
│ │ │ └── models.py # Database models
|
||||
@@ -64,11 +68,11 @@ membership/
|
||||
│ └── requirements.txt
|
||||
├── frontend/
|
||||
│ ├── src/
|
||||
│ │ ├── components/ # Dashboard, payment, admin, profile components
|
||||
│ │ ├── contexts/ # Feature flag context
|
||||
│ │ ├── components/ # Dashboard, payment, admin, profile, ESP components
|
||||
│ │ ├── contexts/ # Feature flag, toast, and confirm contexts
|
||||
│ │ ├── pages/ # Login, register, dashboard, policy pages
|
||||
│ │ ├── services/ # API clients
|
||||
│ │ └── utils/ # Tested frontend logic
|
||||
│ │ └── utils/ # Tested frontend logic and timezone helpers
|
||||
├── docker-compose.yml
|
||||
├── .env.example
|
||||
└── README.md
|
||||
@@ -261,6 +265,38 @@ docker compose --profile prod down
|
||||
- `GET /api/v1/feature-flags/flags` - List flags
|
||||
- `POST /api/v1/feature-flags/flags/reload` - Reload flags (super admin)
|
||||
|
||||
### ESP RFID
|
||||
- `POST /api/v1/esp/device/register` - Reader registration and one-time token issuance
|
||||
- `GET /api/v1/esp/device/provisioning-status` - Poll reader provisioning
|
||||
- `GET /api/v1/esp/device/time` - UTC clock sync for ESP firmware
|
||||
- `POST /api/v1/esp/device/heartbeat` - Reader heartbeat with UTC server time
|
||||
- `POST /api/v1/esp/device/taps` - RFID tap capture with UTC-normalized timestamps
|
||||
- `GET /api/v1/esp/device/write-jobs/next` - Poll queued card write job
|
||||
- `POST /api/v1/esp/device/write-jobs/{job_id}/complete` - Complete a queued write job
|
||||
- `POST /api/v1/esp/device/dashboard-login` - Validate ESP-hosted dashboard login
|
||||
- `GET /api/v1/esp/admin/readers` - Admin reader list
|
||||
- `POST /api/v1/esp/admin/readers` - Admin reader create/provision fallback
|
||||
- `PUT /api/v1/esp/admin/readers/{reader_id}` - Admin reader update / key rotation
|
||||
- `POST /api/v1/esp/admin/readers/{reader_id}/approve` - Approve a reader
|
||||
- `POST /api/v1/esp/admin/readers/{reader_id}/reject` - Reject a reader
|
||||
- `DELETE /api/v1/esp/admin/readers/{reader_id}` - Delete a reader
|
||||
- `GET /api/v1/esp/admin/cards` - Admin RFID card list
|
||||
- `POST /api/v1/esp/admin/cards` - Create RFID card
|
||||
- `PUT /api/v1/esp/admin/cards/{card_id}` - Update RFID card
|
||||
- `GET /api/v1/esp/admin/write-jobs` - Admin queued write jobs
|
||||
- `POST /api/v1/esp/admin/write-jobs` - Queue a write job
|
||||
- `POST /api/v1/esp/admin/write-jobs/{job_id}/cancel` - Cancel a queued write job
|
||||
- `GET /api/v1/esp/admin/taps` - Admin tap history
|
||||
- `GET /api/v1/esp/admin/attendance` - Admin attendance sessions
|
||||
- `POST /api/v1/esp/admin/attendance/close-stale` - Close stale attendance sessions
|
||||
|
||||
## Time Handling
|
||||
|
||||
- Database timestamps are stored as UTC and serialized as Zulu (`...Z`) in API responses.
|
||||
- Frontend display uses Europe/London for member-facing dates and times.
|
||||
- Event creation/editing converts London-local input back to UTC before sending it to the backend.
|
||||
- ESP devices sync their clocks from `/api/v1/esp/device/time` and persist tap times as UTC.
|
||||
|
||||
## Docker Compose Commands
|
||||
|
||||
### Basic Operations
|
||||
|
||||
Reference in New Issue
Block a user