5 个版本
0.0.5 | 2023 年 7 月 6 日 |
---|---|
0.0.4 | 2023 年 6 月 25 日 |
0.0.3 | 2023 年 6 月 18 日 |
0.0.2 | 2023 年 6 月 18 日 |
0.0.1 | 2023 年 6 月 17 日 |
#1459 在 命令行工具
每月 43 次下载
115KB
3K SLoC
Ultime
终极全栈体验。
警告 此项目处于早期预览阶段。
此项目可作为 CLI 使用
cargo install ultime
架构
此项目包含以下技术栈的功能,可为您提供更快、更好的开发工作流程:
主要功能是基于您的 SurrealDB 架构和查询自动生成代码。Ultime 项目应如下所示
/schemas
· 来自 surrealdb-migrations 的 schemas 文件夹/events
· 来自 surrealdb-migrations 的 events 文件夹/migrations
· 来自 surrealdb-migrations 的 migrations 文件夹/queries
· 包含项目特定查询的 .surql 文件列表(仅获取数据)/mutations
· 包含项目特定变更的 .surql 文件列表(更改数据)/src
/api
· API 端点列表/components
· 可在任何地方使用的组件列表/db
/crud
· 来自/schemas
文件的基本 CRUD 操作函数/events
· 执行 SurrealDB 事件的函数,来自/events
文件/mutations
· 更新数据库的函数,来自/mutations
文件/queries
· 查询数据库的函数,来自/queries
文件
/models
· 应用中使用的结构体列表queries.rs
· 来自/queries
文件的每个查询的响应类型(此文件目前未自动生成)mutations.rs
· 来自/mutations
文件的每个变更的响应类型(此文件目前未自动生成)
/pages
· 可用作路由的高阶组件列表
开始使用
首先,您需要使用 预定义模板之一 创建一个新项目。例如
ultime new my-blog --template blog
将创建一个新目录。您可以使用 cd
命令进入此新目录并运行以下命令
ultime
此命令将
- 启动新的SurrealDB本地实例
- 自动应用模式和迁移
- 从
/schemas
、/events
、/queries
和/mutations
文件夹生成db
模块 - 启动leptos应用
自动生成模型代码
目前,无法自动检测.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>
依赖关系
~67MB
~1M SLoC