L'expérience ultime complète complète.
AVERTISSEMENT Ce projet est en prévisualisation précoce.
Ce projet peut être utilisé comme CLI:
cargo install ultime
Ce projet comprend des fonctionnalités qui vous donneront un flux de travail de développement plus rapide et meilleur en utilisant la pile technologique suivante:
La principale caractéristique est la automatique de la génération de code en fonction de vos schémas et requêtes surréaldb. Un projet Ultime devrait ressembler à ceci:
/schemas · dossier schémas de suraldb-migrations/events · Dossier d'événements de suraldb-migrations/migrations · Dossier Migrations à partir de suraldb-migrations/queries · Une liste de fichiers .surql qui contient les requêtes spécifiques pour votre projet (seuls les données)/mutations · Une liste de fichiers .surql qui contient les mutations spécifiques pour votre projet (modifier les données)/src/api · Liste des points de terminaison de l'API/components · Liste des composants qui peuvent être utilisés n'importe où/db/crud · Fonctions pour les opérations de base CRUD, générées à partir de fichiers /schemas/events · Fonctions pour exécuter des événements surréaldb, générés à partir de fichiers /events/mutations · Fonctions pour mettre à jour la base de données, générée à partir des fichiers /mutations/queries · Fonctions pour interroger db, généré à partir de fichiers /queries/models · Liste des structures utilisées dans l'applicationqueries.rs · Types de la réponse de chaque requête à partir de fichiers /queries (ce fichier n'est actuellement pas généré automatiquement)mutations.rs · types de la réponse de chaque mutation à partir de fichiers /mutations (ce fichier n'est actuellement pas généré automatiquement)/pages · Liste des composants d'ordre supérieur qui peuvent être utilisés comme itinéraire Tout d'abord, vous devez créer un nouveau projet en utilisant l'un des modèles prédéfinis. Ainsi, par exemple:
ultime new my-blog --template blog
Un nouveau répertoire sera créé. Vous pouvez cd à ce nouveau répertoire et exécuter la commande suivante:
ultime
Cette commande sera:
db à partir des dossiers /schemas , /events , /queries et /mutations Pour l'instant, il n'est pas possible de détecter automatiquement la sortie d'un fichier .surql: queries ou mutations . Cependant, un type est automatiquement généré pour vous afin que tout ce dont vous avez besoin soit de définir les propriétés de ce type. Tous les modèles doivent être définis dans le dossier /src/models .
Voici un exemple de la définition du modèle à partir de la réponse de /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 > ; Un autre exemple de la réponse de /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 > ;Afin de différencier les variables internes et les variables d'entrée, nous avons établi un modèle à suivre afin d'extraire avec succès les variables de requête et de mutation.
La mutation suivante ...
// $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;... générera cette fonction:
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 )
}Comme vous pouvez le voir, les commentaires doivent suivre les règles:
$ ):Pour vous aider à démarrer rapidement, il existe une liste de modèles prédéfinis que vous pouvez utiliser:
| Modèle | Description |
|---|---|
| vide | Le plus petit projet Ultime que vous pouvez créer. Un schéma propre avec une table script_migration déjà définie pour stocker les migrations appliquées.Une application Leptos de base avec un contre-exemple. |
| blog | Une application de blog: Créez de nouveaux articles de blog, publiez / messages et commentaires non publiés. |
Vous pouvez créer un nouveau projet Ultime en utilisant la ligne de commande suivante:
ultime new <PROJECT_NAME> --template <TEMPLATE>