ultime
v0.0.5
究極のフルスタックエクスペリエンス。
警告このプロジェクトは早期プレビューです。
このプロジェクトは、CLIとして使用できます。
cargo install ultime
このプロジェクトには、次の技術スタックを使用して、より速く、より良い開発ワークフローを提供する機能が含まれています。
主な機能は、surreldbスキーマとクエリに基づいたコード生成の自動です。 ULTIMEプロジェクトは次のようになるはずです:
/schemas・surreldbの移行からのスキーマフォルダー/events・surreldb移行からのイベントフォルダー/migrations・surreldb移行からの移行フォルダー/queries・プロジェクトの特定のクエリを含む.surqlファイルのリスト(データのみデータのみ)/mutations・あなたのプロジェクトの特定の変異を含む.surqlファイルのリスト(データの変更)/src/api・APIエンドポイントのリスト/components・どこでも使用できるコンポーネントのリスト/db/crud・基本的なCRUD操作の機能、 /schemasファイルから生成された/events・surreldbイベントを実行する機能、 /eventsファイルから生成された機能/mutations・DBを更新する機能/mutationsファイルから生成された機能/queries・QUERY DBをクエリするための機能/queriesファイルから生成されます/models・アプリで使用される構造体のリストqueries.rs・/queriesファイルからの各クエリの応答のタイプ(このファイルは現在自動的に生成されていません)mutations.rs・/mutationsファイルからの各突然変異の応答のタイプ(このファイルは現在自動的に生成されていません)/pages・ルートとして使用できる高次コンポーネントのリストまず、事前定義されたテンプレートの1つを使用して新しいプロジェクトを作成する必要があります。だから、たとえば:
ultime new my-blog --template blog
新しいディレクトリが作成されます。この新しいディレクトリにcd使用して、次のコマンドを実行できます。
ultime
このコマンドは次のとおりです。
/schemas 、 /events 、 /queriesおよび/mutationsフォルダーからdbモジュールを生成します現在のところ、.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>