POST /v2/config System Configuration & Tenant Init این متد حیاتی‌ترین اندپوینت برای راه‌اندازی اولیه اپلیکیشن (Bootstrapping) است. سیستم بر اساس هدر Domain تشخیص می‌دهد که کاربر مربوط به کدام شعبه (Office) است و تنظیمات ظاهری، مالی، حقوقی و ماژول‌های فعال آن شعبه را برمی‌گرداند. Get Office Configuration URL: /v2/config Method: POST Controller: V2BaseController@config Auth: Public (No Auth Middleware Required usually, relies on Domain Header) Headers (Required) Header Name Description Domain آدرس دامنه‌ای که اپلیکیشن روی آن اجرا می‌شود (مثلاً crm.example.com ). سیستم www. و پورت ( :8080 ) را به صورت خودکار حذف می‌کند تا دامنه پایه را پیدا کند. Response Structure (JSON) خروجی شامل چندین بخش اصلی است: Key Block Description office_id شناسه شعبه + 1000 (جهت Obfuscation). title / brand عنوان‌ها و نام برند به فارسی و انگلیسی. communicational اطلاعات تماس (تلفن، موبایل، ایمیل، آدرس، کد پستی و لوکیشن). design تنظیمات ظاهری شامل: logo/paper_logo/favicon : لینک تصاویر. base_color/theme/style : تنظیمات CSS و رنگ‌بندی. login_text : متن نمایش داده شده در صفحه ورود. support_online کدهای مربوط به ابزارهای چت آنلاین (مثل Raychat یا Crisp). details.financial_debt Boolean آیا شعبه بدهی پرداخت نشده بابت پشتیبانی دارد؟ (بررسی جدول airplus_bills ). details.official قوانین هاردکد شده سیستم برای مرخصی‌ها (Calendar Limit): leave : قوانین مرخصی روزانه/ساعتی. license : قوانین مجوزها. details.config تنظیمات داینامیک خوانده شده از جدول office_config (بصورت Key-Value). Example Response { "office_id": 1001, "title": { "fa": "آژانس مسافرتی نمونه", "en": "Sample Travel Agency" }, "brand": { "fa": "برند نمونه", "en": "Sample Brand" }, "short_domain": "smpl", "expiration": "2026-01-01", "communicational": { "phone": "02188888888", "mobile": "09120000000", "email": "info@example.com", "site": "example.com", "address": { "fa": "تهران، خیابان ولیعصر...", "en": "Tehran, Valiasr St..." } }, "design": { "login_text": "Welcome to Automation", "logo": "https://liara.../logo.png", "base_color": "#3b82f6", "theme": "light" }, "services": ["flight", "hotel", "train"], "details": { "financial_debt": false, "financial": { "value_added": 9 }, "official": { "calendar_limit": { "leave": { "1": { "overtime": -60, "substitute": true }, "2": { "overtime": -60, "substitute": false } } } }, "config": { "allow_negative_stock": "0", "print_footer_text": "Thanks for your purchase" } } } Technical Logic Flow Request Header: Domain ↓ Clean Domain Remove 'www.' and ':port' ↓ DB Query (offices) WHERE json_contains(domain, $baseDomain) ↓ Found? ↙ No Yes ↘ Return 400 "The office is not defined" Fetch Details 1. VAT Info 2. Office Configs 3. Check Expired Bills ↓ Return Complete JSON