# Mado Motor Admin API NestJS + Prisma + PostgreSQL backend for the admin dashboard. ## Features - **Auth**: phone (`09…`) + password, OTP one-time login, forgot-password OTP, register OTP - **SMS**: Meshkee partner gateway (same as Balout) - **Images**: Parspack S3 (same bucket as Balout/Meshkee), folder prefix `mado-motor/` - **Admin CRUD**: products, orders, customers, blogs, representations, reviews, call-requests, media upload ## Quick start ```bash cd backend cp .env.example .env # fill S3 + Meshkee SMS + JWT secrets npm install npm run db:up npx prisma migrate dev npm run create-super-admin -- --phone 09127004945 --password 'your-pass' --first علیرضا --last حسنی npm run start:dev ``` API: `http://localhost:3001/api/v1` Dashboard expects: `VITE_API_URL=http://api.madomotor.com:3001` (add hosts entry → `127.0.0.1`) ## Storage layout ``` mado-motor/ products/main/{uuid}.jpg products/gallery/{uuid}.jpg blogs/{uuid}.jpg users/{uuid}.jpg temp/{uuid}.jpg ``` Upload: `POST /api/v1/media/upload?kind=main|gallery|blog|temp` (multipart field `file`, admin JWT) ## SMS (Meshkee) Add partner on Meshkee production: ``` SMS_PARTNERS=…,madomotor.ir: ``` Then set in `.env`: ``` MESHKEE_SMS_URL=https://api.meshkee.com/api/v1/public/sms/send MESHKEE_SMS_API_KEY= MESHKEE_SMS_DOMAIN=madomotor.ir ``` ## Auth routes | Method | Path | Notes | |--------|------|-------| | POST | `/auth/login` | `{ cellNumber, password }` | | POST | `/auth/login/send-code` | OTP login | | POST | `/auth/login/verify` | `{ cellNumber, code }` | | POST | `/auth/forgot-password/*` | send-code / verify / reset | | POST | `/auth/register/*` | send-code / verify | | POST | `/auth/refresh` | `{ refreshToken }` | | GET | `/auth/me` | Bearer | ## Test SMS ```bash npm run send-sms -- --to 09127004945 --message "test" ```