أوامر التوليد
تُنشئ أوامر التوليد ملفات جديدة من قوالب Tera الخاصة بـ FORGE. كل مولّد يُنشئ كوداً مُهيكلاً ومتصلاً بشكل صحيح — نماذج، ترحيلات، معالجات، صفحات، ومكونات — لتقضي وقتاً أقل على الكود المتكرر.
forge make:model
توليد struct نموذج جديد مع ملفات مرتبطة اختيارية. يمكنك تعريف الحقول مباشرة لتوليد ترحيلات مُنوّعة بالكامل، وـ structs Rust، وـ DTOs، ونماذج الإدارة في خطوة واحدة.
الاستخدام
forge make:model <NAME> [FIELDS...] [OPTIONS]FIELDS... هي وسائط موضعية اختيارية باستخدام صيغة name:type. راجع مرجع أنواع الحقول لجميع الأنواع المدعومة.
الخيارات
| الخيار | النوع | الافتراضي | الوصف |
|---|---|---|---|
--migration, -m | flag | false | توليد ترحيل قاعدة بيانات أيضاً. |
--all, -a | flag | false | توليد الترحيل والمعالج وصفحات CRUD الإدارية — حزمة الموارد الكاملة. |
--translatable | flag | false | إضافة دعم الترجمة مع جدول _translations وتنفيذ سمة Translatable. |
--interactive, -i | flag | false | تشغيل منشئ حقول تفاعلي يطلب اسم ونوع كل حقل. |
أمثلة
نموذج فقط (بدون حقول):
forge make:model Categoryنموذج مع حقول مباشرة وترحيل:
forge make:model Product -m title:string price:decimal is_active:booleanحزمة موارد كاملة مع حقول:
forge make:model Product --all title:string price:decimal status:lookup category:belongs_toهذا يُولّد النموذج والترحيل (مع الأعمدة) والمعالج وصفحات CRUD الإدارية — كلها متصلة بتعريفات الحقول التي حددتها.
نموذج قابل للترجمة:
forge make:model Article --all --translatable title:string body:textمنشئ الحقول التفاعلي:
forge make:model Product --all --interactiveالوضع التفاعلي يطلب منك كل حقل واحداً تلو الآخر:
منشئ الحقول التفاعلي (أدخل اسماً فارغاً للإنهاء)
الأنواع المتاحة: string, text, integer, bigint, decimal, boolean,
date, datetime, uuid, json, lookup, belongs_to
اسم الحقل (أو اضغط Enter للإنهاء): title
نوع الحقل لـ 'title': string
✓ تمت الإضافة: title → string (SQL: VARCHAR(255))
اسم الحقل (أو اضغط Enter للإنهاء): price
نوع الحقل لـ 'price': decimal
✓ تمت الإضافة: price → decimal (SQL: DECIMAL(10,2))
اسم الحقل (أو اضغط Enter للإنهاء):
إجمالي الحقول: 2نصيحة
--all هو الخيار الموصى به للكيانات الجديدة. يُولّد الحزمة الكاملة — النموذج والترحيل والمعالج وصفحات CRUD الإدارية — في خطوة واحدة، مما يحافظ على اتساق قاعدة الكود.
forge make:migration
توليد ملف ترحيل SQL جديد. مثل make:model، يمكنك تمرير تعريفات حقول مباشرة لتوليد ترحيل بأعمدة مُنوّعة.
الاستخدام
forge make:migration <NAME> [FIELDS...] [OPTIONS]الخيارات
| الخيار | النوع | الافتراضي | الوصف |
|---|---|---|---|
--create | string | — | توليد ترحيل CREATE TABLE لاسم الجدول المُعطى. |
--table | string | — | توليد ترحيل ALTER TABLE لاسم الجدول المُعطى. |
أمثلة
# Create a new table (no fields — empty migration body)
forge make:migration create_categories_table --create=categories
# Create table with typed columns
forge make:migration create_products_table title:string price:decimal is_active:boolean
# Add a foreign key column
forge make:migration add_category_to_products category:belongs_to
# Modify an existing table
forge make:migration add_slug_to_products --table=productsالملفات المُولّدة تتبع اتفاقية التسمية المُرقّمة:
migrations/
00018_create_categories_table.sqlمرجع أنواع الحقول
عند تمرير FIELDS... إلى make:model أو make:migration، كل حقل يستخدم صيغة name:type. يُربط FORGE كل نوع بعمود SQL الصحيح ونوع Rust ونوع TypeScript ومكون النموذج الإداري.
الأنواع المدعومة
| النوع | عمود SQL | نوع Rust | نوع TS | مكون النموذج | مثال |
|---|---|---|---|---|---|
string | VARCHAR(255) | String | string | Input | title:string |
text | TEXT | String | string | Textarea | body:text |
integer | INTEGER | i32 | number | Input (number) | quantity:integer |
bigint | BIGINT | i64 | number | Input (number) | views:bigint |
decimal | DECIMAL(10,2) | BigDecimal | number | Input (number) | price:decimal |
boolean | BOOLEAN | bool | boolean | Switch | is_active:boolean |
date | DATE | NaiveDate | string | Input (date) | birth_date:date |
datetime | TIMESTAMPTZ | DateTime<Utc> | string | Input (datetime) | published_at:datetime |
uuid | UUID | Uuid | string | Input | external_id:uuid |
json | JSONB | serde_json::Value | Record<string, unknown> | Textarea | metadata:json |
lookup | UUID (FK → lookups) | Uuid | string | Select | status:lookup |
belongs_to | UUID (FK → الجدول المرتبط) | Uuid | string | Select | user:belongs_to |
الأسماء البديلة للأنواع
عدة أسماء بديلة مقبولة للراحة:
| البديل | يُحوّل إلى |
|---|---|
str, varchar | string |
longtext | text |
int, i32 | integer |
big_int, i64 | bigint |
float, double, money | decimal |
bool | boolean |
timestamp, timestamptz | datetime |
jsonb | json |
belongsto, relation, fk | belongs_to |
أنواع خاصة: Lookup و BelongsTo
Lookup — status:lookup
يُنشئ مفتاحاً أجنبياً إلى جدول lookups، باستخدام اسم الحقل كـ slug الأب. يصبح العمود status_id ونموذج الإدارة يعرض <Select> مملوء من قيم lookup لـ slug "status".
BelongsTo — user:belongs_to
يُنشئ مفتاحاً أجنبياً إلى جدول النموذج المرتبط (مُشتق من اسم الحقل). user:belongs_to يُنتج عمود user_id يُشير إلى جدول users، ونموذج الإدارة يعرض <Select> مملوء من ذلك الجدول.
forge make:seeder
توليد ملف بذرة قاعدة بيانات جديد.
الاستخدام
forge make:seeder <NAME>مثال
forge make:seeder categoriesيُنشئ:
seeders/
08_categories.sqlforge make:handler
توليد دوال معالج HTTP لمورد.
الاستخدام
forge make:handler <NAME> [OPTIONS]الخيارات
| الخيار | النوع | الافتراضي | الوصف |
|---|---|---|---|
--api | flag | false | توليد معالجات API فقط (بدون مسارات لوحة الإدارة). |
--only | string | — | قائمة إجراءات مفصولة بفواصل للتوليد: index, show, create, update, delete. |
أمثلة
# Full CRUD handler set
forge make:handler Product
# API only, limited to index and show
forge make:handler Product --api --only=index,showforge make:middleware
توليد middleware Axum جديد.
الاستخدام
forge make:middleware <NAME>مثال
forge make:middleware rate_limitيُنشئ:
src/middleware/
rate_limit.rsالملف المُولّد يتضمن توقيع دالة middleware، ومستخرج طلب، ومكان لمنطقك.
forge make:page
توليد صفحة Next.js (أو مجموعة صفحات CRUD كاملة) لتطبيق web أو admin.
الاستخدام
forge make:page <NAME> [OPTIONS]الخيارات
| الخيار | النوع | الافتراضي | الوصف |
|---|---|---|---|
--app | string | web | التطبيق الهدف: web أو admin. |
--crud | flag | false | توليد مجموعة صفحات CRUD كاملة: قائمة، إنشاء، تعديل، وعرض. |
أمثلة
# Single web page
forge make:page about --app=web
# Admin CRUD pages
forge make:page Product --app=admin --crudعند استخدام --crud مع --app=admin، تُنشأ الصفحات التالية:
admin/app/(dashboard)/products/
page.tsx # List view with data table
create/page.tsx # Create form
[id]/page.tsx # Detail view
[id]/edit/page.tsx # Edit formforge make:component
توليد مكون React.
الاستخدام
forge make:component <NAME> [OPTIONS]الخيارات
| الخيار | النوع | الافتراضي | الوصف |
|---|---|---|---|
--app | string | web | التطبيق الهدف: web أو admin. |
--shared | flag | false | وضع المكون في مجلد مشترك يمكن الوصول إليه من كلا التطبيقين. |
أمثلة
# Web-specific component
forge make:component hero-banner --app=web
# Shared component
forge make:component data-table --sharedمثال سير عمل كامل
المثال التالي يُظهر سير عمل ميزة نموذجي باستخدام المولّدات. بدءاً من أمر واحد بحقول مباشرة، يُنشئ FORGE كل ملف مطلوب لمورد Product يعمل بالكامل.
# 1. Generate full resource bundle with fields
forge make:model Product --all --translatable \
title:string price:decimal sku:string \
is_active:boolean status:lookup category:belongs_toهذا يُنشئ:
api/src/models/product.rs # Model struct with typed fields + Translatable trait
api/src/dto/product.rs # Request/response DTOs
api/src/handlers/admin/products.rs # Admin CRUD handlers
api/src/services/product.rs # Business logic service
migrations/00018_create_products_table.sql # With columns for each field
migrations/00019_create_product_translations_table.sql
seeders/08_products.sql
admin/app/(dashboard)/products/page.tsx # List page
admin/app/(dashboard)/products/create/page.tsx # Create form with inputs
admin/app/(dashboard)/products/[id]/edit/page.tsx # Edit formالترحيل يتضمن أعمدة مُنوّعة ومفاتيح أجنبية وقيم افتراضية — كلها مُشتقة من تعريفات الحقول:
CREATE TABLE products (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
title VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
sku VARCHAR(255) NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT false,
status_id UUID REFERENCES lookups(id),
category_id UUID REFERENCES categories(id),
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);# 2. Run migrations
forge migrate:run# 3. Seed initial data
forge seed --class products# 4. Start development
forge serveنصيحة
اجمع المولّدات مع أوامر قاعدة البيانات وأوامر التطوير للانتقال من الفكرة إلى ميزة عاملة في أقل من دقيقة.
انظر أيضاً
- أوامر المشروع — إنشاء مشاريع كاملة
- أوامر قاعدة البيانات — تشغيل الترحيلات والبذور المُولّدة
- أوامر اللغات — إدارة الترجمات للنماذج القابلة للترجمة