La mejor experiencia de pila completa.
Advertencia Este proyecto está en una vista previa temprana.
Este proyecto se puede usar como una CLI:
cargo install ultime
Este proyecto incluye características que le darán un flujo de trabajo de desarrollo más rápido y mejor utilizando la siguiente pila tecnológica:
La característica principal es la automática de la generación de código basada en sus esquemas y consultas SurreLAlDB. Un proyecto de Ultime debería verse así:
/schemas · Carpeta de esquemas de SurrealDb-Migrations/events · Carpeta de eventos de SurrealDb-Migrations/migrations · Carpeta de migraciones de SurrealDB-Migrations/queries · Una lista de archivos .surql que contiene las consultas específicas para su proyecto (solo obtenga datos)/mutations · Una lista de archivos .surql que contiene las mutaciones específicas para su proyecto (datos de cambio)/src/api · Lista de puntos finales de API/components · Lista de componentes que se pueden usar en cualquier lugar/db/crud · Funciones para operaciones CRUD básicas, generadas a partir de archivos /schemas/events · Funciones para ejecutar eventos SurreLAlDB, generados a partir de archivos de /events/mutations · Funciones para actualizar DB, generadas a partir de archivos de /mutations/queries · Funciones para consultar DB, generadas a partir de archivos /queries/models · Lista de estructuras utilizadas en la aplicaciónqueries.rs · tipos de la respuesta de cada consulta de los archivos /queries (este archivo no se genera automáticamente)mutations.rs · Tipos de la respuesta de cada mutación de /mutations (este archivo no se genera automáticamente)/pages · Lista de componentes de orden superior que se pueden usar como ruta Primero, debe crear un nuevo proyecto utilizando una de las plantillas predefinidas. Entonces, por ejemplo:
ultime new my-blog --template blog
Se creará un nuevo directorio. Puede cd a este nuevo directorio y ejecutar el siguiente comando:
ultime
Este comando:
db desde /schemas , /events , /queries y carpetas de /mutations A partir de ahora, no es posible detectar automáticamente la salida de un archivo .surql: queries o mutations . Sin embargo, se genera automáticamente un tipo para usted para que todo lo que necesita es definir las propiedades de este tipo. Todos los modelos deben definirse en la carpeta /src/models .
Aquí hay un ejemplo de la definición del modelo de la respuesta de /queries/posts.surql consulta:
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 > ; Otro ejemplo de la respuesta de /mutations/comment.surql consulta:
use serde :: { Deserialize , Serialize } ;
# [ derive ( Debug , Clone , PartialEq , Serialize , Deserialize ) ]
pub struct CommentMutationItem {
pub id : String ,
pub content : String ,
}
pub type CommentMutation = Vec < CommentMutationItem > ;Para diferenciar las variables internas y las variables de entrada, establecimos un patrón a seguir para extraer con éxito la consulta y las variables de mutación.
La siguiente mutación ...
// $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;... generará esta función:
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 )
}Como puede ver, los comentarios deben seguir las reglas:
$ prefijo):Para ayudarlo a comenzar rápidamente, hay una lista de plantillas predefinidas que puede usar:
| Plantilla | Descripción |
|---|---|
| vacío | El proyecto ULTime más pequeño que puede crear. Un esquema limpio con una tabla de script_migration ya definida para almacenar las migraciones aplicadas.Una aplicación Básica de Leptos con un contragolpe. |
| blog | Una aplicación de blog: crear nuevas publicaciones de blog, publicar/no publicar publicaciones y comentarios. |
Puede crear un nuevo proyecto ULTIME utilizando la siguiente línea de comando:
ultime new <PROJECT_NAME> --template <TEMPLATE>