Files
clinicpro/.claude/skills/prompt-writer/SKILL.md
T

5.0 KiB
Raw Blame History

name, description
name description
prompt-writer تولید فایل پرامپت .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/<name>.md بساز با این ساختار:


# <عنوان واضح>

## زمینه

<یک پاراگراف: چرا این تغییر لازم است؟ وضعیت فعلی چیست؟>

## مشکل / هدف

<توضیح دقیق مشکل یا قابلیت مورد نیاز>

## فایل‌های مرتبط

| فایل | نقش |
|------|-----|
| `src/...` | ... |
| `assets/admin/...` | ... |

## وضعیت فعلی

<کد یا رفتار فعلی — فقط بخش مرتبط>

```php / tsx
// کد فعلی مشکل‌دار یا ناقص

وظایف

۱. <اولین وظیفه>

<توضیح دقیق + راه‌حل پیشنهادی>

// نمونه کد یا pseudocode

۲. <دومین وظیفه>

...

نکات مهم

  • <نکته معماری یا محدودیت مهم>
  • <edge case که باید پوشش داده شود>
  • <الگوی پروژه که باید رعایت شود>

---

### قوانین محتوای پرامپت

**باید داشته باشد:**
- مسیر دقیق فایل‌هایی که باید تغییر کنند
- وضعیت فعلی کد (کپی از کد واقعی، نه توصیف کلی)
- راه‌حل پیشنهادی با نمونه کد
- 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