# Sprint 2 — كتالوج المزوّد (Provider catalog + approval)

> يبني بيانات المزوّد التي يتصفّحها المستخدم لاحقاً، + إدارة الأدمن واعتماد المزوّدين.
> المرجع: [`../analysis.md`](../analysis.md) §4/§6/§7. الـ schema: `catalog.json`.

## النطاق
- **CRUD أدمن:**
  - `cruds/providers.md` — المزوّدون: عرض/تعديل، **اعتماد/رفض/توثيق/تعليق** (status transitions), عرض الوثائق (media `documents`), المعرض (`gallery`), إحصائيات. فلترة بالتصنيف/المدينة/الحالة/موثّق/مميّز.
  - `cruds/services.md` · `cruds/packages.md` — إشراف (عرض/تفعيل/حذف) على خدمات/باقات المزوّدين.
- **API مزوّد:**
  - `api/provider/profile/*` — me · update-profile · upload-documents · change-password · change-phone(4) (REUSE نمط base).
  - `api/provider/services/*` — list · create · update · delete · toggle (ملكية: المزوّد الحالي فقط).
  - `api/provider/packages/*` — list · create(+items) · update · delete · toggle.
  - `api/provider/works/*` — list · create · delete.
  - `api/provider/availability/*` — list · set-day · time-slots create/delete.

## الاعتماديات
- Sprint 1 (provider auth + service_categories + occasions) — DONE.

## فكّر-الأول
- **الكيانات:** providers, services, packages, package_items, works, provider_time_slots, occasion_provider.
- **لبنات Laravel:** Policies/Gates لملكية الموارد (المزوّد لا يعدّل موارد غيره — anti‑IDOR) · Observer يحدّث `providers.price_from` عند تغيير أسعار الخدمات · Form Requests (enum `Rule::enum`, files عبر FILES/BaseFilesTrait) · API Resources.
- **قواعد أعمال:** الباقة قد تجمع عدة مشمولات (`package_items`) + خدمة رئيسية (`service_id`). الإتاحة per-date (`provider_time_slots`). اعتماد الأدمن ينقل `pending→approved`؛ `suspended` يخفي المزوّد.
- **حواف:** حذف خدمة مرتبطة بباقة/حجز · toggle إتاحة سلوت محجوز · رفع وثائق بصيغ/أحجام محدّدة.

## design pattern (اقتراح)
- **Policy-based ownership** (نمط base) لكل موارد المزوّد. 
- **State** مبسّط لحالة المزوّد (pending→approved/rejected/suspended) — أو enum + حرّاس انتقال في الخدمة. (موافقة عند التنفيذ.)

## نتيجة الإنجاز (DoD)
```
migrate:fresh --seed: ⬜ · pint: ⬜ · dump-autoload -o: ⬜ · schema:check: ⬜ · test: ⬜ · smoke: ⬜ · commit: <hash>
```
