تجربة الكامل في نهاية المطاف.
تحذير هذا المشروع في معاينة مبكرة.
يمكن استخدام هذا المشروع كـ CLI:
cargo install ultime
يتضمن هذا المشروع ميزات من شأنها أن تمنحك سير عمل تطوير أسرع وأفضل باستخدام مكدس التكنولوجيا التالي:
الميزة الرئيسية هي التلقائي لتوليد الكود بناءً على مخططات SREREALDB واستعلاماتك. يجب أن يبدو مشروع Ultime هكذا:
/schemas · Schemas Folder from Surrealdb-Migrations/events · مجلد الأحداث من SREEREALDB-Migrations/migrations · مجلد الترحيل من SREEREALDB-Migrations/queries · قائمة ملفات .surql التي تحتوي على استعلامات محددة لمشروعك (جلب البيانات فقط)/mutations · قائمة ملفات .surql التي تحتوي على طفرات محددة لمشروعك (تغيير البيانات)/src/api · قائمة نقاط نهاية API/components · قائمة المكونات التي يمكن استخدامها في أي مكان/db/crud · وظائف لعمليات CRUD الأساسية ، التي تم إنشاؤها من /schemas/events · وظائف لتنفيذ أحداث SREREALDB ، التي تم إنشاؤها من /events الملفات/mutations · وظائف لتحديث DB ، التي تم إنشاؤها من /mutations/queries · وظائف للاستعلام عن DB ، تم إنشاؤها من /queries Files/models · قائمة الهياكل المستخدمة في التطبيقqueries.rs · أنواع استجابة كل استعلام من ملفات /queries (لا يتم إنشاء هذا الملف حاليًا تلقائيًا)mutations.rs · أنواع استجابة كل طفرة من ملفات /mutations (لا يتم إنشاء هذا الملف حاليًا تلقائيًا)/pages · قائمة مكونات الترتيب العليا التي يمكن استخدامها كطريق أولاً ، تحتاج إلى إنشاء مشروع جديد باستخدام أحد القوالب المحددة مسبقًا. لذلك ، على سبيل المثال:
ultime new my-blog --template blog
سيتم إنشاء دليل جديد. يمكنك cd لهذا الدليل الجديد وتشغيل الأمر التالي:
ultime
هذا الأمر سوف:
db من /schemas ، /events ، /queries و /mutations اعتبارًا من الآن ، لا يمكن اكتشاف إخراج ملف .SurQL تلقائيًا: queries أو mutations . ومع ذلك ، يتم إنشاء النوع تلقائيًا لك بحيث يكون كل ما تحتاجه هو تحديد خصائص هذا النوع. يجب تعريف جميع النماذج في مجلد /src/models .
فيما يلي مثال على تعريف النموذج من استجابة /queries/posts.surql استعلام:
use serde :: { Deserialize , Serialize } ;
# [ derive ( Debug , Clone , PartialEq , Serialize , Deserialize ) ]
pub struct PostsQueryItem {
pub id : String ,
pub title : String ,
pub content : String ,
pub status : String ,
pub number_of_comments : u16 ,
}
pub type PostsQuery = Vec < PostsQueryItem > ; مثال آخر من استجابة /mutations/comment.surql استعلام:
use serde :: { Deserialize , Serialize } ;
# [ derive ( Debug , Clone , PartialEq , Serialize , Deserialize ) ]
pub struct CommentMutationItem {
pub id : String ,
pub content : String ,
}
pub type CommentMutation = Vec < CommentMutationItem > ;من أجل التمييز بين المتغيرات الداخلية ومتغيرات الإدخال ، أنشأنا نمطًا لمتابعة من أجل استخراج متغيرات الاستعلام والطفرة بنجاح.
طفرة التالية ...
// $user_id: String
// $post_id: Option < String >
// $comment_id: Option < String >
// $content: String
LET $user = ( SELECT * FROM type::thing( " user " , $user_id));
LET $post_or_comment = ( SELECT * FROM type::thing( " post " , $post_id), type::thing( " comment " , $comment_id));
RELATE $user - > comment - > $post_or_comment
SET content = $content;... سوف يولد هذه الوظيفة:
pub async fn mutate_comment < C : Connection > (
db : & ' _ Surreal < C > ,
user_id : String ,
post_id : Option < String > ,
comment_id : Option < String > ,
content : String
) -> Result < CommentMutation > {
const QUERY : & str = include_str ! ( "../../../mutations/comment.surql" ) ;
let result : CommentMutation = db
. query ( QUERY )
. bind ( ( "user_id" , user_id ) )
. bind ( ( "post_id" , post_id ) )
. bind ( ( "comment_id" , comment_id ) )
. bind ( ( "content" , content ) )
. await ?
. take ( 0 ) ? ;
Ok ( result )
}كما ترون ، يجب أن تتبع التعليقات القواعد:
$ ):لمساعدتك في البدء بسرعة ، هناك قائمة بالقوالب المحددة مسبقًا التي يمكنك استخدامها:
| نموذج | وصف |
|---|---|
| فارغ | أصغر مشروع Ultime الذي يمكنك إنشاؤه. مخطط نظيف مع جدول script_migration محدد بالفعل لتخزين الترحيل المطبق.تطبيق Leptos الأساسي مع مثال مضاد. |
| مدونة | تطبيق المدونة: إنشاء منشورات مدونة جديدة ، نشر/غير نشر منشورات وتعليقات. |
يمكنك إنشاء مشروع ULTIME جديد باستخدام سطر الأوامر التالي:
ultime new <PROJECT_NAME> --template <TEMPLATE>