feat(profile): role-aware nav + avatar menu + full editable profile
Build backend images / build content-svc (push) Failing after 1m59s
Build backend images / build file-svc (push) Failing after 3m18s
Build backend images / build gateway (push) Failing after 3m28s
Build backend images / build identity-svc (push) Failing after 2m1s
Build backend images / build notification-svc (push) Failing after 4m45s
Build backend images / build render-svc (push) Failing after 5m18s
Build backend images / build studio-svc (push) Failing after 2m12s

Navigation:
- UserMenu (avatar + role-aware dropdown: Dashboard, Admin Panel for admins,
  Profile, Sign out) replaces Sign In/Try Free when logged in (desktop + mobile).
- Real avatars in dashboard sidebar + a new admin-shell profile section.
- Shared Avatar primitive (image with initials fallback). SiteChrome excludes /admin.

Profile (data-collection surface for future AI video generation):
- SettingsProfile rebuilt: avatar upload + slogan, about, company, website,
  country, national code, birthdate, gender. No resume builder (per scope change).
- /api/profile forwards all fields; new user-scoped /api/profile/upload (avatar →
  MinIO via file-svc, sets avatar). Identity UpdateUserRequest/UserResponse widened
  (country/national/method); no DB migration (columns already exist).
- fa+en strings; verified GET/PATCH round-trip + logged-in SSR render.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-05 00:34:25 +03:30
parent 718564bce4
commit d4fee8d1d7
21 changed files with 659 additions and 116 deletions
+30 -2
View File
@@ -12,6 +12,13 @@
"learn": "یادگیری",
"signIn": "ورود",
"tryForFree": "رایگان شروع کنید",
"accountMenu": "منوی حساب",
"roleAdmin": "مدیر",
"roleUser": "کاربر",
"menuDashboard": "داشبورد",
"menuAdminPanel": "پنل مدیریت",
"menuProfile": "پروفایل و تنظیمات",
"menuSignOut": "خروج",
"openMenuAriaLabel": "باز کردن منو",
"mobileMenuTitle": "منو",
"videoMakerBrowse": "مرور قالب‌ها",
@@ -521,7 +528,7 @@
},
"componentsDashboardSettingsSettingsProfile": {
"title": "پروفایل",
"subtitle": "نام عمومی و ایمیل حساب شما.",
"subtitle": "پروفایل عمومی، تصویر و اطلاعات حساب شما.",
"displayNameLabel": "نام نمایشی",
"displayNamePlaceholder": "نام شما",
"emailLabel": "ایمیل",
@@ -530,7 +537,28 @@
"saveChanges": "ذخیره تغییرات",
"updateFailed": "به‌روزرسانی پروفایل ممکن نشد.",
"updateSuccess": "پروفایل با موفقیت به‌روزرسانی شد.",
"networkError": "خطای شبکه. لطفاً دوباره تلاش کنید."
"networkError": "خطای شبکه. لطفاً دوباره تلاش کنید.",
"changeAvatar": "تغییر تصویر پروفایل",
"uploading": "در حال بارگذاری تصویر…",
"avatarUpdated": "تصویر پروفایل به‌روزرسانی شد.",
"uploadFailed": "بارگذاری تصویر ممکن نشد.",
"sloganLabel": "شعار / عنوان",
"sloganPlaceholder": "مثلاً طراح موشن گرافیک",
"aboutLabel": "درباره من",
"aboutPlaceholder": "کمی درباره خودتان بنویسید…",
"companyLabel": "شرکت / کسب‌وکار",
"websiteLabel": "وب‌سایت",
"countryLabel": "کشور",
"countryPlaceholder": "ایران",
"nationalCodeLabel": "کد ملی",
"birthDateLabel": "تاریخ تولد",
"genderLabel": "جنسیت",
"genderUnset": "انتخاب نشده",
"genderMale": "مرد",
"genderFemale": "زن",
"genderOther": "سایر",
"genderPreferNotToSay": "ترجیح می‌دهم نگویم",
"dataCollectionHint": "این اطلاعات برای شخصی‌سازی و ساخت خودکار ویدیو با هوش مصنوعی در آینده استفاده می‌شود."
},
"componentsDashboardSettingsSettingsSecurity": {
"title": "امنیت",