# بررسی راه‌اندازی سرور با دیتابیس خالی > وضعیت: **بررسی فقط خواندنی** انجام شد. هیچ کدی تغییر نکرده و هیچ داده‌ای نوشته یا منتقل نشده است. > تاریخ: ۲۰۲۶-۱۰-۱۲ ## هدف روی سرور تولید فقط **یک** کاربر super admin باشد و هیچ داده‌ی دیگری (مشتری، محصول، سفارش، بدهی، نقش اضافه، حساب تست) وارد نشود. دیتابیس henza قدیمی در این مرحله منتقل نمی‌شود. ## یافته‌ها ### ۱. حساب ثابت در کد (مهم‌ترین مورد) - در [auth.service.ts:21](../apps/api/src/modules/auth/auth.service.ts#L21) شماره `09128081392` ثابت شده و در [خط ۴۹–۵۳](../apps/api/src/modules/auth/auth.service.ts#L49) اگر شماره همین باشد و رمز هم برابر خود شماره باشد، `ensureStaticAdmin` اجرا می‌شود. - [خط ۲۳۰–۲۴۵](../apps/api/src/modules/auth/auth.service.ts#L230) یک `SUPER_ADMIN` با نام «مدیر موقت» می‌سازد یا فعال می‌کند. - این شرط محیطی ندارد، پس روی سرور تولید هم فعال است. - همین شماره در `seed.ts` به‌عنوان «کاربر تست توسعه» هم آمده است. ### ۲. داده‌ی demo در seed - [seed.ts](../apps/api/prisma/seed.ts) بخش demo را فقط وقتی اجرا می‌کند که `NODE_ENV` برابر `production` نباشد یا `SEED_DEMO_DATA=true` باشد. - بخش demo شامل شهرها، شعبه‌ها، کارگاه، ادمین‌های تست، مشتری، محصول، سفارش و بدهی است. - [bootstrap.ts](../apps/api/src/prisma/bootstrap.ts) در اولین boot، اگر `RUN_SEED=false` نباشد، seed را اجرا می‌کند. ### ۳. نقش‌ها و permissionها - `seed.ts` همیشه کاربرتایپ‌های ۸۵ تا ۸۹ و permissionهایشان را می‌سازد. - گاردها فقط بر اساس rid کار می‌کنند و برای `SUPER_ADMIN` بای‌پس ندارند ([guards.ts:17](../apps/api/src/modules/auth/guards.ts#L17)). پس نقش ۸۵ با تمام دسترسی‌ها **لازم** است و نقش‌های ۸۶ تا ۸۹ **لازم نیستند**. ### ۴. migrationهای تغییردهنده‌ی داده روی دیتابیس خالی بدون اثر هستند (بر اساس خواندن SQL، هنوز روی دیتابیس اجرا نشده‌اند): | migration | کار | روی دیتابیس خالی | |---|---|---| | `20260922120000_customer_name_parts` | ستون و trigger نام | فقط ساختار | | `20260922180000_sales_expert_profile_and_admin_name_parts` | `INSERT` از `AdminUser` | no-op | | `20261005120000_accounting_integration` | permission فقط اگر نقش ۸۵ باشد | no-op | | `20261008090000_customer_identity_cleanup` | `UPDATE` روی `Customer` و `AdminUser` | no-op | | `20261008120000_order_sales_agent` | `UPDATE` روی `Order` | no-op | | `20261008150000_wage_formula_permission` | permission فقط اگر نقش ۸۵ باشد | no-op | | `20261008160000_dashboard_permission_merge` | `INSERT` و `DELETE` روی permission | no-op | | `20261008170000_city_tree` | ساخت استان از ردیف‌های موجود | no-op | ### ۵. شماره‌های ثابت در سرویس حسابداری `09121234567` و `09891212345` فقط مثال در docstring و تابع نرمال‌سازی هستند ([accounting-provider.ts:272](../apps/api/src/modules/accounting-sync/providers/accounting-provider.ts#L272)، [tahesab.provider.ts:224](../apps/api/src/modules/accounting-sync/providers/tahesab.provider.ts#L224)). داده نیستند. ## کارهای پیشنهادی (هنوز انجام نشده) 1. seed فقط نقش ۸۵ با `ALL_RIDS` بسازد؛ نقش‌های ۸۶ تا ۸۹ حذف شوند. 2. حساب ثابت `09128081392` و `ensureStaticAdmin` از `auth.service.ts` حذف شود. 3. روی سرور: `NODE_ENV=production` و `RUN_SEED=false`، و `SEED_DEMO_DATA` ست نشود. 4. یک اسکریپت یک‌بار اجرا برای ساخت super admin: شماره و نام و رمز را کاربر وارد می‌کند؛ داخل کد یا seed ذخیره نمی‌شود. 5. روی یک دیتابیس خالی تست شود: migrationها از صفر اجرا شوند و فقط یک کاربر و نقش ۸۵ باقی بماند. ## تصمیم‌های باز - شماره و نام super admin واقعی. - نقش‌های ۸۶ تا ۸۹ حذف شوند یا بمانند؟ - حذف حساب ثابت از کد تأیید شود. ## بررسی‌نشده - سطر به سطر بررسی نشده که migrationها روی دیتابیس واقعی خالی هیچ خطایی ندهند. این را باید با یک اجرای تست روی دیتابیس خالی تأیید کرد. - ساختار `docs/SERVER-SETUP-CHECKLIST.md` برای تنظیم سرور هنوز مرور نشده است.