ประสบการณ์เต็มรูปแบบที่สุด
คำเตือน โครงการนี้อยู่ในช่วงต้นตัวอย่าง
โครงการนี้สามารถใช้เป็น CLI:
cargo install ultime
โครงการนี้มีคุณสมบัติที่จะช่วยให้คุณมีขั้นตอนการพัฒนาที่เร็วขึ้นและดีขึ้นโดยใช้สแต็คเทคโนโลยีต่อไปนี้:
คุณสมบัติหลักคือการสร้างรหัสโดยอัตโนมัติตามแผนผัง Sanrealdb และการสืบค้นของคุณ โครงการ ultime ควรมีลักษณะเช่นนี้:
/schemas ·โฟลเดอร์ Schemas จาก Surrealdb-Migrations/events ·โฟลเดอร์กิจกรรมจากการย้ายถิ่นฐาน/migrations ·โฟลเดอร์การย้ายถิ่นจากการย้ายถิ่นฐานของ Surrealdb/queries ·รายการไฟล์. surql ที่มีการสืบค้นเฉพาะสำหรับโครงการของคุณ (เฉพาะข้อมูลดึงข้อมูล)/mutations ·รายการไฟล์. surql ที่มีการกลายพันธุ์เฉพาะสำหรับโครงการของคุณ (เปลี่ยนข้อมูล)/src/api ·รายการจุดสิ้นสุด API/components ·รายการส่วนประกอบที่สามารถใช้ได้ทุกที่/db/crud ·ฟังก์ชั่นสำหรับการดำเนินการ CRUD พื้นฐานที่สร้างขึ้นจากไฟล์ /schemas/events ·ฟังก์ชั่นในการดำเนินการเหตุการณ์ Surrealdb ที่สร้างขึ้นจากไฟล์ /events/mutations ·ฟังก์ชั่นในการอัปเดต dB สร้างจาก /mutations/queries ·ฟังก์ชั่นในการสืบค้น db สร้างจากไฟล์ /queries/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 Query:
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 query:
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>