Files

103 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ارسال دامنه‌ی شهر همراه درخواست کد تأیید (برای اسم سایت در پیامک OTP)
## پروژه
`nobat724_front`**cross-repo**؛ پرامپت همتای backend: `clinicpro/.claude/prompt/otp-sms-site-name.md` (اول backend اجرا شود).
## زمینه
سایت چند-دامنه‌ای است؛ هر شهر یک دامنه (`yasuj-nobat.ir`, `ahvaz-nobat.ir`, ...). backend قابلیت اضافه‌شدن اسم سایتِ شهر به پیامک کد تأیید را دارد، اما چون درخواست به `api.clinic-pro.ir` می‌رود، backend نمی‌داند از کدام شهر آمده. پس **frontend باید دامنه‌ی خودش را در body درخواست `send-code` بفرستد.**
## مشکل / هدف
فراخوانی `send-code` فعلی فقط `mobile` و `captcha_token` می‌فرستد. باید فیلد `domain` (دامنه‌ی فعلی مرورگر) هم ارسال شود تا backend اسم سایت شهر را در پیامک قرار دهد. تغییر باید ایمن باشد: اگر domain در دسترس نبود، ارسال نشود (backend fallback دارد).
## فایل‌های مرتبط
| فایل | نقش |
|------|-----|
| `services/response.js` | wrapper فراخوانی `request.sendCode` |
| `components/register/LogInPage.js` | صفحه لاگین — فراخوانی `sendCode` (خط ۲۷) |
| `components/register/verificationPage/Recode.js` | ارسال مجدد کد — فراخوانی `sendCode` (خط ۵۲) |
## وضعیت فعلی
`services/response.js`:
```js
export const request = {
sendCode: (mobile, captcha_token) =>
api.post(
"api/v1/user/send-code",
{
mobile,
captcha_token,
},
removeTokenHead
),
```
فراخوانی‌ها (client component، داخل مرورگر):
```js
// components/register/LogInPage.js:27
.sendCode(num, "")
// components/register/verificationPage/Recode.js:52
.sendCode(changeNumToDefault(num), "")
```
## وظایف
### ۱. افزودن `domain` به wrapper `sendCode`
`services/response.js` — پارامتر سوم اختیاری `domain`، فقط اگر مقدار داشت به body اضافه شود:
```js
sendCode: (mobile, captcha_token, domain) =>
api.post(
"api/v1/user/send-code",
{
mobile,
captcha_token,
...(domain ? { domain } : {}),
},
removeTokenHead
),
```
### ۲. پاس‌دادن دامنه‌ی فعلی از صفحه‌های فراخوان
چون این کامپوننت‌ها client هستند، دامنه از `window.location.hostname` گرفته می‌شود (SSR-safe با گارد).
`components/register/LogInPage.js` (خط ۲۷):
```js
const domain = typeof window !== "undefined" ? window.location.hostname : "";
// ...
.sendCode(num, "", domain)
```
`components/register/verificationPage/Recode.js` (خط ۵۲):
```js
const domain = typeof window !== "undefined" ? window.location.hostname : "";
// ...
.sendCode(changeNumToDefault(num), "", domain)
```
- `window.location.hostname` مقدار خالص دامنه می‌دهد (مثل `yasuj-nobat.ir`) بدون پروتکل — دقیقاً همان چیزی که backend برای lookup در `cities.domain` می‌خواهد.
## نکات مهم
- **اختیاری و ایمن**: اگر `domain` نبود (مثلاً `localhost` یا دامنه‌ی اصلی)، backend fallback به برند «نوبت ۷۲۴» دارد؛ پس هیچ رفتار موجودی نمی‌شکند.
- روی `localhost`/دامنه‌ی توسعه، `hostname` مقدار غیرشهری می‌دهد → backend شهر پیدا نمی‌کند → برند پیش‌فرض. اشکالی ندارد.
- **قرارداد API**: فیلد جدید body = `domain` (string، اختیاری) در `POST /api/v1/user/send-code`. مطابق backend نسخه‌ی `clinicpro/.claude/prompt/otp-sms-site-name.md`. مطمئن شو backend اول اجرا/دیپلوی شده باشد.
- این تغییر client-side است؛ نیازی به `generateMetadata` یا تغییر SSR ندارد.
- تست:
```bash
cd nobat724_front
npm run lint
npm run build
```
- الگوی پروژه: از همان `request.sendCode` استفاده کن؛ فراخوانی مستقیم axios نساز.