With the backend now returning 200 (lazy-created profile) instead of 404, align the consumers: the profile lives at res.data.data (the endpoint double-nests), so the booking detail and dashboard read that instead of res.data / the raw envelope. Drop the obsolete 404 special handling (empty editable form now comes from the 200 payload), seed the dashboard empty state when the profile has no real data yet, and make the profile POST fall back to PATCH on 409 (already lazy-created). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.4 KiB
همخوانکردن مصرف پروفایل کاربر با endpoint اصلاحشده (بدون 404 برای کاربر جدید)
پروژه
nobat724_front — سایت عمومی. بعد از پرامپت backend اجرا شود.
Cross-repo: وابسته به اصلاح
GET /api/v1/user-profile/{uuid}درclinicpro/.claude/prompt/user-profile-resolve-by-user-uuid.mdکه بعد از آن، endpoint با user-uuid هم کار میکند و برای کاربر بدون پروفایل، پروفایل خالی (200) برمیگرداند بهجای 404.
زمینه
getUserProfile(uuid) در سه جا با uuid کاربر (از کوکی) صدا زده میشود:
components/appointment/index.js (دو جا) و components/dashboard/userAccount/detailUser/information/index.js. قبل از اصلاح backend، این فراخوانی برای کاربر تازهلاگینکرده 404 میداد و کد مجبور بود حالت 404 را بهصورت ویژه هندل کند (فیلدها قابلویرایش، خالی). بعد از اصلاح backend، همان فراخوانی 200 با پروفایل خالی برمیگرداند و دیگر 404ای در کار نیست.
مشکل / هدف
۱. تأیید کن که با endpoint اصلاحشده، مرحلهی Detail نوبت و داشبورد، پروفایل را درست لود میکنند (دیگر 404 نمیگیرند).
۲. منطق ویژهی 404 که دیگر لازم نیست را ساده کن (بدون شکستن حالت «پروفایل خالی»).
۳. شکل پاسخ را با backend همخوان نگهدار: پاسخ { success, data: {...profile...} } است → بعد از interceptor، پروفایل در res.data.
فایلهای مرتبط
| فایل | نقش |
|---|---|
components/appointment/index.js |
getUserProfile(parsedData.uuid) در mount و step 3؛ منطق 404 موجود |
components/appointment/detail/SubmitData.js |
بعد از تغییر اطلاعات، PATCH/POST پروفایل (uuid پروفایل لازم است) |
components/dashboard/userAccount/detailUser/information/index.js |
getUserProfile(parsedUserInfo.uuid) |
services/response.js |
getUserProfile, postUserProfile, patchUserProfile |
وضعیت فعلی (کد واقعی)
components/appointment/index.js — هندل ویژهی 404
const res = await request.getUserProfile(parsedData.uuid);
if (res?.data) {
const newData = buildProfileData(res.data, usernameFromCookie);
setData(newData);
setPrevData(newData);
}
// ...
} catch (error) {
if (error?.response?.status === 404) {
setData(prev => ({ ...prev, national_code: { value: "", isEdit: true }, ... })); // دیگر لازم نیست
}
}
SubmitData.js — انتخاب POST یا PATCH بر اساس وجود uuid
if (uuid) {
await request.patchUserProfile(payload, uuid); // uuid پروفایل
} else {
await request.postUserProfile(payload);
}
uuidاینجا ازdata.uuidمیآید که درbuildProfileData(profile)برابرprofile.uuid(uuid پروفایل) ست میشود. حالا که backend برای کاربر جدید پروفایل خالی (باuuidواقعی پروفایل) برمیگرداند،data.uuidهمیشه پر است و مسیر PATCH درست کار میکند.
وظایف
۱. تأیید جریان لود پروفایل (appointment + dashboard)
- مطمئن شو هر سه فراخوانی
getUserProfile(uuid)با uuid کاربر (از کوکی) کار میکنند وres.dataپروفایل را میدهد. buildProfileData(res.data, ...)بایدuuidپروفایل را ازres.data.uuidبگیرد (نه user uuid) تا PATCH بعدی درست باشد. بررسی کنbuildProfileDataفیلدuuidرا ازprofile.uuidمیخواند (پاسخ backend شاملuuidپروفایل وuser_uuidاست).
۲. سادهسازی هندل 404 منسوخ
- در
components/appointment/index.js، بلوکif (error?.response?.status === 404) { ... }در هر دوuseEffectدیگر لازم نیست (backend دیگر 404 نمیدهد). آن را حذف کن یا به یک هندل خطای عمومی ساده تبدیل کن (toast سراسری از قبل خطاها را نشان میدهد). حالت «پروفایل خالی» حالا از خود پاسخ 200 میآید، نه از catch. - مراقب باش منطق
defaultData/prevDataنشکند: اگرres.dataفیلدهای null دارد،buildProfileDataباید آنها را به{ value: "", isEdit: true }تبدیل کند (همان رفتار فعلی برای فیلدهای خالی).
۳. سازگاری POST/PATCH در SubmitData.js
- چون backend حالا پروفایل را lazy-create میکند،
data.uuidبرای کاربرِ «خودش» همیشه پر است → مسیرpatchUserProfile(payload, uuid)طی میشود. مطمئن شو این درست است و مسیرpostUserProfile(که ممکن بود 409 بدهد چون پروفایل از قبل ساخته شده) دیگر طی نمیشود مگر واقعاًuuidنباشد. - اگر
postUserProfileبه هر دلیل 409 داد (پروفایل از قبل هست)، آن را به PATCH تبدیل کن یا نادیده بگیر (نه خطای کاربر).
نکات مهم
- وابستگی cross-repo: بدون اصلاح backend، این هندلها هنوز 404 میگیرند. اگر backend هنوز اصلاح نشده، اول آن را اجرا کن.
- شکل پاسخ:
{ success, data: {...} }→ پروفایل درres.data(interceptor یکبار باز میکند).res.data.uuid= uuid پروفایل (برای PATCH)،res.data.user_uuid= uuid کاربر. - توهمسازی نکن: فیلدهای null پروفایل را خالی و قابلویرایش نشان بده، نه مقدار جعلی.
- RTL/Jalali/multi-domain حفظ شوند.
- تست:
npm run build؛ سپس دستی با کاربر09210651788(که پروفایل نداشت): بعد از لاگین، مرحلهی Detail نوبت و صفحهی داشبورد باید بدون 404 فرم خالی قابلویرایش نشان دهند؛ ذخیره (PATCH) باید کار کند. سپس commit.