# پنل ادمین دلدل پنل مدیریت دسکتاپ‌محور (Next.js + Basis Design System) برای همون بک‌اند Go/Gin/GORM اپ دیتینگ. با این پنل می‌تونی بدون لمس کد، تمام لیست‌های انتخابی و سوالات پروفایل اپ رو مدیریت کنی. ## ویژگی‌ها - **ورود امن:** همون فلوی OTP اپ اصلی، ولی فقط کاربرهایی که `is_admin=true` دارن اجازه‌ی ورود می‌گیرن (پیام «دسترسی نداری» برای بقیه). - **مدیریت ۶ دسته‌ی انتخابی:** سطح تحصیلات، رشته تحصیلی، فعالیت‌ها، اهمیت در رابطه، علاقه‌مندی‌ها، دنبال چی می‌گردی — برای هر کدوم: - ویرایش عنوان و حداقل/حداکثر تعداد انتخاب مجاز - افزودن/ویرایش/حذف گزینه - فعال/غیرفعال کردن آنی با یک کلیک (گزینه‌ی غیرفعال فوراً از دید کاربر مخفی می‌شه) - **مدیریت سوالات پروفایل:** افزودن/ویرایش/حذف/فعال‌سازی سوالاتی که کاربر توی مرحله‌ی سوم آنبوردینگ ۳ تاشو انتخاب می‌کنه. - فیدبک فوری با Toast بعد از هر عملیات، تایید قبل از حذف. ## ✅ تست شده قبل از تحویل، یک اسکریپت Node که دقیقاً همون درخواست‌های `src/lib/api.ts` رو می‌فرسته، روی یک نمونه‌ی واقعی از بک‌اند اجرا شد: ورود ادمین، GET/PATCH دسته، CRUD کامل گزینه، toggle فعال/غیرفعال (با تایید اینکه گزینه‌ی غیرفعال از API عمومی کاربر واقعاً حذف می‌شه)، CRUD کامل سوالات، و مهم‌تر از همه — تست کردیم که یک کاربر عادی (غیرادمین) با کد ۴۰۳ از تمام `/admin/*` endpoint ها بلاک می‌شه. همه‌ی ۱۴ چک پاس شد. ## راه‌اندازی ```bash cp .env.local.example .env.local # NEXT_PUBLIC_API_URL رو به آدرس بک‌اندت تنظیم کن npm install npm run dev ``` `http://localhost:3000` رو باز کن، با شماره‌ی موبایلِ یک کاربر ادمین (همونی که با `ADMIN_BOOTSTRAP_PHONE` در بک‌اند ساخته شده، یا هر کاربری که دستی `is_admin=true` شده) وارد شو. ## ساختار پروژه ``` src/ ├── app/ │ ├── login/, verify/ ← ورود OTP (مثل اپ اصلی) │ └── (dashboard)/ │ ├── layout.tsx ← گارد ادمین + سایدبار │ ├── page.tsx ← داشبورد با آمار سریع │ ├── categories/page.tsx ← لیست ۶ دسته │ ├── categories/[key]/ ← ویرایش تنظیمات دسته + CRUD گزینه‌ها │ └── questions/page.tsx ← CRUD سوالات پروفایل ├── components/ │ ├── ui/ ← دیزاین‌سیستم مشترک + Modal/Toast/ConfirmDialog جدید │ └── Sidebar.tsx └── lib/ ├── api.ts ← کلاینت تایپ‌شده‌ی endpoint های /admin/* ├── auth-context.tsx ← ورود + چک is_admin └── hooks.ts ``` ## نکته‌ی امنیتی این پنل فقط روی احراز هویت سمت بک‌اند (`middleware.AdminRequired`) تکیه می‌کنه — یعنی حتی اگه کسی مستقیم به route های این پنل دسترسی پیدا کنه، بدون توکن معتبرِ یک کاربر `is_admin=true`، هیچ عملیاتی از سمت بک‌اند رد نمی‌شه (این رو با تست ۴۰۳ بالا تایید کردیم). با این حال توصیه می‌شه این پنل رو پشت یک دامنه‌ی جدا یا حداقل VPN/IP-allowlist در پروداکشن قرار بدی.