Das ultimative Erlebnis mit voller Stapel.
Warnung dieses Projekts ist in einer frühen Vorschau.
Dieses Projekt kann als CLI verwendet werden:
cargo install ultime
Dieses Projekt enthält Funktionen, die Ihnen einen schnelleren und besseren Entwicklungsworkflow mit dem folgenden Tech -Stack bieten:
Die Hauptmerkmale ist die Automatik der Codegenerierung basierend auf Ihren SureLDB -Schemata und -Anfragen. Ein ULTime -Projekt sollte so aussehen:
/schemas · Schemasordner aus SureLDB-Migrierungen/events · Ereignisordner aus Surladb-Migrationen/migrations · Migrationsordner aus Surladb-Migrationen/queries · Eine Liste von .surql -Dateien, die die spezifischen Abfragen für Ihr Projekt enthält (nur Daten abrufen)/mutations · Eine Liste von .surql -Dateien, die die spezifischen Mutationen für Ihr Projekt enthält (Daten ändern)/src/api · Liste der API -Endpunkte/components · Liste der Komponenten, die überall verwendet werden können/db/crud · Funktionen für grundlegende CRUD -Operationen, generiert aus /schemas -Dateien/events · Funktionen zur Ausführung von Ereignissen von Surladb, generiert aus /events/mutations · Funktionen zum Aktualisieren von DB, generiert aus /mutations -Dateien/queries · Funktionen zum Abfragen von DB, generiert aus /queries Dateien/models · Liste der in der App verwendeten Strukturenqueries.rs /queriesmutations.rs /mutations/pages · Liste der Komponenten höherer Ordnung, die als Route verwendet werden können Zunächst müssen Sie ein neues Projekt mit einem der vordefinierten Vorlagen erstellen. Also zum Beispiel:
ultime new my-blog --template blog
Ein neues Verzeichnis wird erstellt. Sie können dieses neue Verzeichnis cd und den folgenden Befehl ausführen:
ultime
Dieser Befehl wird:
db -Modul aus /schemas , /events , /queries und /mutations Ordnern Ab sofort ist es nicht möglich, die Ausgabe einer .surql -Datei automatisch zu erkennen: queries oder mutations . Für Sie wird jedoch automatisch ein Typ generiert, damit Sie nur die Eigenschaften dieser Art definieren müssen. Alle Modelle sollten im Ordner /src/models definiert werden.
Hier ist ein Beispiel für die Modelldefinition aus der Antwort von /queries/posts.surql Abfrage:
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 > ; Ein weiteres Beispiel aus der Antwort von /mutations/comment.surql Abfrage:
use serde :: { Deserialize , Serialize } ;
# [ derive ( Debug , Clone , PartialEq , Serialize , Deserialize ) ]
pub struct CommentMutationItem {
pub id : String ,
pub content : String ,
}
pub type CommentMutation = Vec < CommentMutationItem > ;Um interne Variablen und Eingabevariablen zu differenzieren, haben wir ein Muster festgelegt, das folgt, um erfolgreiche Abfrage- und Mutationsvariablen zu extrahieren.
Die folgende Mutation ...
// $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;... wird diese Funktion erzeugen:
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 )
}Wie Sie sehen können, sollten Kommentare den Regeln folgen:
$ Präfix):Um Ihnen schnell zu beginnen, gibt es eine Liste vordefinierter Vorlagen, die Sie verwenden können:
| Vorlage | Beschreibung |
|---|---|
| leer | Das kleinste ULTime -Projekt, das Sie erstellen können. Ein sauberes Schema mit einer bereits definierten script_migration , um die angewandten Migrationen zu speichern.Eine grundlegende Leptos -App mit einem Zählerbeispiel. |
| Blog | Eine Blog -App: Erstellen Sie neue Blog -Beiträge, veröffentlichen/unveröffentlicht Beiträge und Kommentare. |
Sie können ein neues ULTime -Projekt mit der folgenden Befehlszeile erstellen:
ultime new <PROJECT_NAME> --template <TEMPLATE>