# ارسال دامنه‌ی شهر همراه درخواست کد تأیید (برای اسم سایت در پیامک 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 نساز.