# سامانه تیکتینگ فروش پیاده‌سازی Django Modular Monolith بر اساس سند نیازمندی همین مخزن. رابط فارسی و RTL است و جریان‌های مشتری، کارشناس، دسترسی خصوصی، پیام، فایل، OTP، Magic Link و Notification Outbox را پوشش می‌دهد. ## اجرای محلی ```powershell python -m venv .venv .\.venv\Scripts\python -m pip install -r requirements.txt .\.venv\Scripts\python manage.py migrate .\.venv\Scripts\python manage.py bootstrap .\.venv\Scripts\python manage.py createsuperuser .\.venv\Scripts\python manage.py runserver ``` در محیط توسعه SQLite فعال است. OTP در ترمینال با پیشوند `[DEV OTP]` چاپ می‌شود. برای تست سریع، شماره `09202202129` با کد ثابت `12345` فقط در تنظیمات Development قابل ورود است؛ تنظیمات Production این میان‌بر را غیرفعال نگه می‌دارند. برای ایجاد کارشناس، User با `account_type=STAFF` و StaffProfile بسازید و او را عضو گروه `Sales Expert` یا `Sales Manager` کنید. ## اجرای Production با Docker ```powershell Copy-Item .env.example .env docker volume create customer_ticket_static docker volume create customer_ticket_media docker compose up --build docker compose exec web python manage.py createsuperuser ``` قبل از استقرار مقادیر secret و host در `.env` را تغییر دهید. TLS و proxy اپلیکیشن توسط Traefik خود Coolify مدیریت می‌شود. migration، bootstrap و collectstatic هنگام شروع web به شکل خودکار اجرا می‌شوند. Nginx فقط static را سرو می‌کند و فایل‌های آپلودی خصوصی پس از کنترل مجوز مستقیماً توسط Django تحویل داده می‌شوند. راهنمای کامل تنظیم Coolify، volumeها، PostgreSQL خارجی و worker در [docs/DEPLOYMENT_COOLIFY.md](docs/DEPLOYMENT_COOLIFY.md) است. ## تست ```powershell .\.venv\Scripts\python -m pytest -q ``` قواعد کلیدی در `apps/tickets/policies.py` متمرکز شده‌اند و عملیات حساس در `apps/tickets/services.py` تراکنشی هستند. ## Environment files - Direct development with `config.settings.dev` automatically loads `.env.local`. - Production with `config.settings.prod` can load `.env`; Docker Compose also injects that file into its services. - Set `DJANGO_ENV_FILE` in the process environment to select another file, such as `/etc/customer-ticket/server.env`. - Existing process variables always take precedence over values in dotenv files. - Copy `.env.local.example` to `.env.local` for a safe local starting point; real dotenv files are excluded from Git and Docker images.