Files

35 lines
1.3 KiB
Markdown

# Mana Collection Backend — Context
## Product
Multi-seller fashion marketplace. Each seller is a `Store` with one `STORE_ADMIN` owner.
Future dashboards:
- `store.manacollections.ir` — store admin
- `customer.manacollections.ir` — customer
- `admin.manacollections.ir` — super admin
## Patterns (from Mado Motor)
- Nest 11, Prisma 6, bcrypt, passport-jwt
- Meshkee SMS (`MESHKEE_SMS_*`)
- Parspack S3 with project prefix `mana-collection/` (Mado uses `mado-motor/`)
- Opaque refresh tokens (hashed in DB), JWT access with `{ sub, role, storeId? }`
- OTP: SHA-256 hash, 6 digits, 5 min TTL, 60s resend, 5 attempts
## Store lifecycle
1. Public `storeRegister` OTP → creates `User(STORE_ADMIN)` + `Store(pending)`
2. Super admin sets status `active` (or `rejected` with reason)
3. Pending store: only `GET/PATCH /stores/me`
4. Active store: full products/categories/brands/blogs/orders/customers CRUD
## Multi-store orders
`Order` can span multiple stores via `OrderItem.storeId` and per-store `OrderStoreFulfillment`. Store admins see only their items + update their fulfillment status. Super admin manages overall `Order.status`.
## Catalog variants
Categories hold `colors[]`, `sizes[]`, `packages[]` (catalog ids). Products have nested `ProductVariant` rows with `colorId` / `sizeId` / `packageId` + prices. Static catalogs exposed at `/catalog`.