--- name: prompt-writer description: تولید فایل پرامپت .md برای یک قابلیت یا باگ‌فیکس در پروژه ClinicPro. استفاده کن وقتی کاربر می‌گوید «یک پرامپت بنویس»، «پرامپت بساز»، «write a prompt»، «برام پرامپت بنویس برای X». این skill پروژه را تحلیل می‌کند، سپس یک فایل .md کامل در .claude/prompt/ می‌سازد و دستور اجرا را نمایش می‌دهد. --- ## نحوه دریافت ورودی کاربر موضوع یا مشکل را توضیح می‌دهد. اگر توضیح کافی نبود، یک سوال کوتاه بپرس. --- ## مراحل اجرا ### مرحله ۱ — درک موضوع قبل از نوشتن پرامپت: 1. **موضوع را تحلیل کن**: باگ‌فیکس است یا قابلیت جدید؟ 2. **فایل‌های مرتبط را شناسایی کن**: - Backend: `src/` — Controllers، Services، Entities، Repositories - Frontend: `assets/admin/pages/`، `assets/admin/components/` - مستندات: `docs/api/` 3. **APIهای موجود را بررسی کن**: `ddev exec php bin/console debug:router | grep api` 4. **کد مرتبط را بخوان**: فقط فایل‌هایی که مستقیم به موضوع مربوطند ### مرحله ۲ — نام‌گذاری فایل نام فایل: `kebab-case`، توصیفی، کوتاه. مثال‌ها: - `fix-invitation-accept.md` - `doctor-dashboard-stats.md` - `clinic-gallery-upload.md` - `appointment-sms-notification.md` ### مرحله ۳ — ساخت فایل پرامپت فایل را در `.claude/prompt/.md` بساز با این ساختار: --- ```markdown # <عنوان واضح> ## زمینه <یک پاراگراف: چرا این تغییر لازم است؟ وضعیت فعلی چیست؟> ## مشکل / هدف <توضیح دقیق مشکل یا قابلیت مورد نیاز> ## فایل‌های مرتبط | فایل | نقش | |------|-----| | `src/...` | ... | | `assets/admin/...` | ... | ## وضعیت فعلی <کد یا رفتار فعلی — فقط بخش مرتبط> ```php / tsx // کد فعلی مشکل‌دار یا ناقص ``` ## وظایف ### ۱. <اولین وظیفه> <توضیح دقیق + راه‌حل پیشنهادی> ```php / tsx // نمونه کد یا pseudocode ``` ### ۲. <دومین وظیفه> ... ## نکات مهم - <نکته معماری یا محدودیت مهم> - - <الگوی پروژه که باید رعایت شود> ``` --- ### قوانین محتوای پرامپت **باید داشته باشد:** - مسیر دقیق فایل‌هایی که باید تغییر کنند - وضعیت فعلی کد (کپی از کد واقعی، نه توصیف کلی) - راه‌حل پیشنهادی با نمونه کد - edge caseها - الگوهای پروژه که باید رعایت شوند (BaseController، TanStack Query، Zod، ...) **نباید داشته باشد:** - توضیحات کلی و بدیهی - کدی که از پروژه واقعی کپی نشده - وظایف نامشخص مثل «بررسی کن» بدون مشخص کردن چه چیزی **قوانین خاص پروژه که باید در پرامپت منعکس شود:** - Backend: همه controllerها از `BaseController` ارث می‌برند؛ پاسخ‌ها با `$this->success()` / `$this->paginated()` / `$this->error()` - Frontend paginated: items از `data?.data`، total از `data?.meta?.totalRecords` - Frontend single: از `data?.data` (ممکن است double-nested باشد) - Category API: triple-nested → `data?.data?.data ?? []` - تاریخ‌ها: Unix timestamp صحیح؛ نمایش با `formatDate()` شمسی - اگر Entity تغییر کرد: migration لازم است - مستندات: بعد از هر تغییر API، فایل مربوطه در `docs/api/` باید به‌روز شود ### مرحله ۴ — خروجی نهایی بعد از ساخت فایل، فقط این سه مورد را نمایش بده: ``` توضیح: <یک جمله توصیف پرامپت> فایل پرامپت: .claude/prompt/.md دستور اجرا: /run-prompt .claude/prompt/.md ``` --- ## مثال ``` کاربر: برام یک پرامپت بنویس — وقتی دکتر دعوت کلینیک را قبول می‌کند به لیست پزشکان اضافه نمی‌شود → بررسی می‌کنم... - src/ClinicInvitation/Service/ClinicInvitationService.php خوانده شد - متد accept() فقط status تغییر می‌دهد، clinic->getDoctors()->add() صدا نمی‌زند - Clinic entity دارای ManyToMany $doctors است → فایل .claude/prompt/fix-invitation-accept.md ساخته شد توضیح: رفع باگ پذیرش دعوت — پزشک باید پس از accept به clinic_doctors اضافه شود. فایل پرامپت: .claude/prompt/fix-invitation-accept.md دستور اجرا: /run-prompt .claude/prompt/fix-invitation-accept.md ```