46af911a06
What I implemented Phone-first auth endpoints with OTP → JWT issuance. views.py urls.py Phone normalization (KSA-focused, E.164 or Saudi mobile) and validation. phone.py serializers.py OTP protections: rate limit, resend cooldown, attempt counting. otp.py models.py Email is now optional to allow phone-only users. models.py 0002_phone_auth_fields.py Admin OTP visibility improved. admin.py Risks updated. risks.md
55 lines
1.2 KiB
Markdown
55 lines
1.2 KiB
Markdown
# Salon Booking Platform
|
|
|
|
Scaffolded Django + React starter for a salon booking platform.
|
|
|
|
## Backend
|
|
|
|
Location: `backend/`
|
|
|
|
### Setup
|
|
|
|
1. Create a virtualenv and install dependencies.
|
|
2. Copy `backend/.env.example` to `backend/.env` and adjust values.
|
|
3. Run migrations and start the server.
|
|
|
|
### Demo data
|
|
|
|
After migrations, you can seed demo data:
|
|
|
|
- `python manage.py seed_demo`
|
|
|
|
### Core API endpoints (current scaffold)
|
|
|
|
- `POST /api/auth/register/`
|
|
- `POST /api/auth/token/`
|
|
- `POST /api/auth/token/refresh/`
|
|
- `GET/PATCH /api/auth/me/`
|
|
- `POST /api/auth/otp/request/`
|
|
- `POST /api/auth/otp/verify/`
|
|
- `POST /api/auth/phone/request/`
|
|
- `POST /api/auth/phone/verify/`
|
|
- `POST /api/auth/social/<provider>/` (placeholder)
|
|
- `GET /api/salons/`
|
|
- `GET /api/salons/<id>/`
|
|
- `GET /api/salons/<id>/services/`
|
|
- `GET /api/salons/<id>/staff/`
|
|
- `GET /api/salons/<id>/reviews/`
|
|
- `GET/POST /api/bookings/`
|
|
- `GET /api/bookings/<id>/`
|
|
- `GET/POST /api/payments/`
|
|
|
|
## Frontend
|
|
|
|
Location: `frontend/`
|
|
|
|
### Setup
|
|
|
|
1. Install dependencies via `npm install`.
|
|
2. Run `npm run dev`.
|
|
|
|
The dev server proxies `/api` to `http://localhost:8000`.
|
|
|
|
## Project Notes
|
|
|
|
- Known gaps and risks: `docs/risks.md`
|