Files
boursecu_server/.cursor/rules/sql-only-no-server-code.mdc
T

54 lines
4.2 KiB
Plaintext
Raw Normal View History

---
description: khaneghi_server — فقط SQL؛ کد سرور را تغییر نده؛ value را عوض نکن
alwaysApply: true
---
# khaneghi_server — SQL-only edits
این ریپو Laravel API پلتفرم خانگی است (`khaneghi_server`؛ روی سرور معمولاً `…/server`).
## قانون اصلی
- **هرگز** کد اپلیکیشن/سرور را تغییر نده، مگر کاربر صریحاً بگوید «کد PHP/Laravel را هم عوض کن».
- وقتی کاربر دستوری برای تغییر می‌دهد، **فقط فایل‌های `.sql`** را ویرایش/ایجاد کن — ترجیحاً زیر `database/sql/`.
- سؤال، توضیح، و خواندن کل پروژه آزاد است؛ نوشتن فقط در محدودهٔ SQL.
- **`value` ها تغییر نکنند:** برای ردیف‌های موجود در `settings` / `const` هرگز `UPDATE ... SET value = ...` ننویس و value زنده‌ای که ادمین/سیستم تنظیم کرده را عوض نکن. فقط کلید جدید با `INSERT ... WHERE NOT EXISTS` و پیش‌فرض اولیه. متادیتا (`title_fa`, `description`, `type`, `can_edit`) مجاز است. استثنا فقط اگر کاربر صریحاً بگوید value را عوض کن (و در SQL شرط خالی‌بودن مستند شود).
## مجاز (editable)
- `database/sql/**/*.sql` — patch، deploy، tenant merge، settings/const، ensure/alter
- در صورت نیاز برای اجرای همان SQL: فقط به‌روزرسانی توضیحات داخل همان `.sql` (هدر/کامنت)
## ممنوع (do not edit)
- `app/**` — Controllers، Models، Services، `MigrateCommand`، Providers، Jobs، …
- `routes/**`, `config/**`, `packages/**`, `resources/**`, `bootstrap/**`, `public/**`, `tests/**`
- `database/migrations/**` (PHP) — مگر کاربر صریحاً migration بخواهد
- `database/schema/mysql-schema.sql.reference` — dump مخرب با `DROP TABLE`؛ روی DB موجود اجرا/بازنویسی نکن
- `.env`, `composer.json`, `composer.lock`, Docker، اسکریپت‌های root ops
- بازنویسی `value` (و ترجیحاً `is_active`) ردیف‌های موجود settings یا const در SQLهای deploy
اگر کار فقط با تغییر PHP حل می‌شود: **رد کن**، راه SQL پیشنهاد بده، یا بپرس آیا مجاز به لمس کد هستی.
## قرارداد SQL
- Idempotent بنویس (قابل اجرای چندباره).
- **حفظ value:** در `deploy_settings_const*.sql` و هر patch جدید، برای ردیف موجود **هرگز** `UPDATE value` نزن. فقط INSERT کلید جدید با default؛ آپدیت فقط روی `title_fa` / `description` / `type` / `can_edit`. ترجیح آپگرید زنده: `deploy_settings_const_preserve_value_sync_can_edit.sql`.
- Schema جدول/ستون را در settings SQL نگذار؛ برای ستون جدید از الگوی `database/sql/_helpers/safe_add_column.sql` / `ensure_*.sql` / `deploy_safe_schema.sql` پیروی کن.
- نام‌گذاری: `add_*`, `alter_*`, `ensure_*`, `*_patch.sql`, `{tenant}_*`, `deploy_settings_const*.sql`.
- قبل از پیشنهاد اجرا روی سرور: بکاپ؛ ترتیب DB موجود معمولاً: `baseline_migrations.sql` → `php artisan migrate` → `deploy_settings_const*.sql` (جزئیات: `database/sql/DEPLOY_CHECKLIST.md`).
## ایمنی migrate
- `app/Console/MigrateCommand.php` از auto-load اسکیما جلوگیری می‌کند — آن را لمس/حذف نکن.
- روی DB موجود هرگز `mysql-schema.sql.reference` را پیشنهاد نکن.
## مثال
```text
❌ کاربر: «فلگ X را در SettingsController چک کن» → فایل PHP را ادیت نکن؛ در صورت نیاز کلید را در SQL settings اضافه کن.
❌ SQL: UPDATE settings SET value = 'false' WHERE key = 'referral_show'; — value زنده را عوض نکن.
✅ کاربر: «کلید support_messengers را به deploy settings اضافه کن» → فقط database/sql/*.sql با INSERT WHERE NOT EXISTS.
✅ SQL: UPDATE settings SET title_fa = '...', description = '...' WHERE key = 'referral_id'; — فقط متادیتا.
```