# ڈویلپر گائیڈ

<div dir="rtl">

## پروجیکٹ ڈھانچہ (beta/)

```
app/
  Models/             ← Eloquent ماڈلز (تمام BaseModel سے وراثت)
    Concerns/         ← HasTenant trait
  Providers/          ← AppServiceProvider، TenancyServiceProvider
  Http/
    Controllers/      ← ویب اور API کنٹرولرز
    Requests/         ← فارم توثیق
    Middleware/       ← توثیق اور tenancy middleware

database/
  migrations/         ← تمام اسکیما مائیگریشنز
  seeders/            ← RolesAndPermissionsSeeder، DemoTenantSeeder

docs/
  en/                 ← انگریزی دستاویز
  ur/                 ← اردو دستاویز (RTL)

resources/
  views/              ← Blade ٹیمپلیٹس (AdminLTE 3)
    pdf/              ← A4 بل dompdf ٹیمپلیٹ
```

---

## اہم نمونے

### تمام ماڈلز BaseModel سے وراثت

```php
class Package extends BaseModel
{
    use HasTenant;
}
```

`BaseModel` فراہم کرتا ہے: `HasUlids`، `LogsActivity`، `$keyType = 'string'`

### ٹیننٹ اسکوپنگ

```php
// یہ query صرف موجودہ ٹیننٹ کے پیکجز لائے گی:
Package::all();

// سوپر ایڈمن کراس ٹیننٹ query:
Package::withoutTenantScope()->where('tenant_id', $tid)->get();
```

### ULID روٹ کیز

```php
Route::get('/customers/{customer}', [CustomerController::class, 'show']);
// URL: /customers/01HWZP2J3KXXXXXXXXXXXXXX
// کبھی نہیں: /customers/5
```

---

## مائیگریشن چلانا

```bash
# مکمل تازہ مائیگریشن اور سیڈنگ
php artisan migrate:fresh --seed

# عام مائیگریشن
php artisan migrate
```

---

## کوڈنگ اصول

- کنٹرولر طریقے: `index`، `create`، `store`، `show`، `edit`، `update`، `destroy`
- ہر write operation کا الگ `FormRequest` کلاس
- Blade میں `@can('create.customer')` بٹن دکھانے سے پہلے
- URL میں integer ID کبھی نہیں — ULID route model binding استعمال کریں

</div>
