A melhor experiência de pilha completa.
Aviso que este projeto está em pré -visualização antecipada.
Este projeto pode ser usado como CLI:
cargo install ultime
Este projeto inclui recursos que fornecerão um fluxo de trabalho de desenvolvimento mais rápido e melhor usando a seguinte pilha de tecnologia:
O recurso principal é a automática de geração de código com base nos seus esquemas e consultas surrealdb. Um projeto Ultime deve ficar assim:
/schemas · Pasta de esquemas de migrações surrealdb/events · Pasta de eventos da SurrealDB Migração/migrations · Pasta de migrações de migrações surrealdb/queries · Uma lista de arquivos .surql que contém as consultas específicas para o seu projeto (apenas dados buscam dados)/mutations · Uma lista de arquivos .surql que contém as mutações específicas para o seu projeto (altere dados)/src/api · Lista de terminais da API/components · Lista de componentes que podem ser usados em qualquer lugar/db/crud · Funções para operações básicas de CRUD, geradas a partir de arquivos /schemas/events · Funções para executar eventos surrealdb, gerados a partir de arquivos /events/mutations · funções para atualizar o DB, geradas a partir de arquivos /mutations/queries · Funções para consultar o banco de dados, geradas a partir de arquivos /queries/models · Lista de estruturas usadas no aplicativoqueries.rs · Tipos de resposta de cada consulta de arquivos /queries (este arquivo não é gerado automaticamente)mutations.rs /mutations/pages · Lista de componentes de ordem superior que podem ser usados como uma rota Primeiro, você precisa criar um novo projeto usando um dos modelos predefinidos. Então, por exemplo:
ultime new my-blog --template blog
Um novo diretório será criado. Você pode cd para este novo diretório e executar o seguinte comando:
ultime
Este comando vai:
db a partir de /schemas , /events , /queries e /mutations pastas A partir de agora, não é possível detectar automaticamente a saída de um arquivo .surql: queries ou mutations . No entanto, um tipo é gerado automaticamente para você, para que tudo o que você precisa é definir as propriedades desse tipo. Todos os modelos devem ser definidos na pasta /src/models .
Aqui está um exemplo da definição do modelo da resposta 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 > ; Outro exemplo da resposta 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 > ;Para diferenciar variáveis internas e variáveis de entrada, estabelecemos um padrão a seguir para extrair com sucesso variáveis de consulta e mutação.
A seguinte mutação ...
// $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;... irá gerar esta função:
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 você pode ver, os comentários devem seguir as regras:
$ prefixo):Para ajudá -lo a começar rapidamente, há uma lista de modelos predefinidos que você pode usar:
| Modelo | Descrição |
|---|---|
| vazio | O menor projeto Ultime que você pode criar. Um esquema limpo com uma tabela de script_migration já definida para armazenar as migrações aplicadas.Um aplicativo básico leptos com um exemplo de contador. |
| blog | Um aplicativo de blog: crie novas postagens no blog, publique/não publique postagens e comentários. |
Você pode criar um novo projeto Ultime usando a seguinte linha de comando:
ultime new <PROJECT_NAME> --template <TEMPLATE>