feat: publish Dever core with project scaffolding and versioned AI skills

This commit is contained in:
Antigravity committed 2026-10-04 13:37:30 +00:00
1 parent 70fa73cdc2
commit ac458ffa7f
960 files changed
+221319 -1163

No files matched your search

@@ -0,0 +1,28 @@
# 后台分类接口
后台分类接口创建和停用分类。
- 包:`content.category.api.admin.manage`
- 公开类型:无
- 公开方法:无
- 使用:无
## 创建分类
创建分类委托给应用。
- 声明:`post create`
```dever
post create = app.create
```
## 停用分类
停用分类委托给应用。
- 声明:`delete disable`
```dever
delete disable = app.disable
```
@@ -0,0 +1,105 @@
# 内容分类应用
分类应用负责创建和停用分类。
- 包:`content.category.app`
- 公开类型:
- `CategoryView`
- 公开方法:
- `create`
- `disable`
- `require_active`
- 使用:
- `content.category.create(name)`
- `content.category.disable(id)`
- `content.category.require_active(id)`
## 分类视图
返回分类公开字段。
- 类型:`CategoryView`
- 字段:
- `id: model.id`:记录标识
- `name: Text`:该声明的业务值
- `slug: Text`:规范化标识
- `status: Text`:业务状态
```dever
type CategoryView {
id: model.id
name: Text
slug: Text
status: Text
}
```
## 创建分类
创建规范化分类。
- 函数:`create`
- 输入:
- `name: Text`:该声明的业务值
- 输出:
- `category: CategoryView`:该声明的业务值
```dever
create(name: Text) (category: CategoryView) {
normalized = domain.normalize_name(name)
domain.require_name(normalized)
stored = model.create(
{
name = normalized
slug = domain.normalize_slug(normalized)
}
)
category = CategoryView {
id = stored.id
name = stored.name
slug = stored.slug
status = "active"
}
}
```
## 停用分类
停用已有分类。
- 函数:`disable`
- 输入:
- `id: content.category.model.id`:记录标识
- 输出:
- `ok: Bool`:该声明的业务值
```dever
disable(id: model.id) (ok: Bool) {
changed = model.update(
id,
{
status = model.CategoryStatus.Disabled
}
)
discarded = changed
ok = true
}
```
## require_active
分类应用负责创建和停用分类。
- 函数:`require_active`
- 输入:
- `id: content.category.model.id?`:记录标识
- 输出:无
```dever
require_active(id: model.id) () {
stored = model.get(id)
domain.require_active(stored.status == model.CategoryStatus.Active)
}
require_active(id: null) () {}
```
@@ -0,0 +1,89 @@
# 内容分类规则
分类名称和标识在领域规则中统一规范化。
- 包:`content.category.domain`
- 公开类型:无
- 公开方法:无
- 使用:无
## 规范名称
去除分类名称两端空白。
- 函数:`normalize_name`
- 输入:
- `value: Text`:该声明的业务值
- 输出:
- `name: Text`:该声明的业务值
```dever
normalize_name(value: Text) (name: Text) pure {
name = text.trim(value)
}
```
## 规范标识
统一分类标识大小写。
- 函数:`normalize_slug`
- 输入:
- `value: Text`:该声明的业务值
- 输出:
- `slug: Text`:规范化标识
```dever
normalize_slug(value: Text) (slug: Text) pure {
slug = text.lower(text.trim(value))
}
```
## 检查名称
拒绝空分类名称。
- 函数:`require_name`
- 输入:
- `value: Text`:该声明的业务值
- 输出:无
```dever
require_name(value: Text) () pure {
check_name(value != "")
}
```
## 检查名称结果
有效名称继续执行,无效名称返回标准错误。
- 函数:`check_name`
- 输入:
- `value: Bool`:该声明的业务值
- 输出:无
```dever
check_name(value: true) () pure {}
check_name(value: false) () pure {
fail(dever.api.Error.Invalid)
}
```
## require_active
分类名称和标识在领域规则中统一规范化。
- 函数:`require_active`
- 输入:
- `active: Bool`:该声明的业务值
- 输出:无
```dever
require_active(active: true) () pure {}
require_active(active: false) () pure {
fail(dever.api.Error.Conflict)
}
```
@@ -0,0 +1,44 @@
# 内容分类模型
内容分类保存标题、标识和状态。
- 包:`content.category.model`
- 公开类型:
- `CategoryStatus`
- `Category`
- 公开方法:无
- 使用:无
## 分类状态
状态枚举。
- 类型:`CategoryStatus`
- 分支:
- `Active`:启用
- `Disabled`:禁用
```dever
type CategoryStatus {
Active = "启用"
Disabled = "禁用"
}
```
## 分类
分类记录。
- 类型:`Category`
- 字段:
- `name: Text(1, 80)`:名称
- `slug: Text(1, 100)`:标识
- `status: CategoryStatus`:状态
```dever
type Category {
name: Text(1, 80)
slug: Text(1, 100) unique
status: CategoryStatus default CategoryStatus.Active index
}
```
@@ -0,0 +1,18 @@
# 后台修订接口
后台修订接口创建文章修订记录。
- 包:`content.revision.api.admin.manage`
- 公开类型:无
- 公开方法:无
- 使用:无
## 创建修订
创建修订委托给应用。
- 声明:`post create`
```dever
post create = app.create
```
@@ -0,0 +1,89 @@
# 内容修订应用
修订应用创建文章历史版本并返回公开视图。
- 包:`content.revision.app`
- 公开类型:
- `RevisionView`
- 公开方法:
- `create`
- 使用:
- `content.revision.create(selected_article_id, expected_version, title, body, category_id, asset_id)`
## 修订视图
不暴露存储实现细节的修订结果。
- 类型:`RevisionView`
- 字段:
- `id: model.id`:记录标识
- `article_id: news.article.model.id`:文章标识
- `version: Int`:当前编辑版本
- `title: Text`:文章标题
- `body: Text`:正文
- `status: Text`:业务状态
```dever
type RevisionView {
id: model.id
article_id: news.article.model.id
version: Int
title: Text
body: Text
status: Text
}
```
## 创建修订
按文章已有版本数生成下一个版本。
- 函数:`create`
- 输入:
- `selected_article_id: news.article.model.id`:待编辑文章标识
- `expected_version: Int`:调用者读取的编辑版本
- `title: Text`:文章标题
- `body: Text`:正文
- `category_id: content.category.model.id?`:可选分类引用
- `asset_id: media.asset.model.id?`:可选媒体引用
- 输出:
- `revision: RevisionView`:该声明的业务值
```dever
transaction create(
selected_article_id: news.article.model.id,
expected_version: Int,
title: Text,
body: Text,
category_id: content.category.model.id?,
asset_id: media.asset.model.id?
) (revision: RevisionView) {
edited = news.article.edit(
selected_article_id,
expected_version,
title,
body,
category_id,
asset_id
)
stored = model.create(
{
article_id = selected_article_id
version = edited.version
title = edited.title
body = edited.body
category_id = edited.category_id
asset_id = edited.asset_id
status = model.RevisionStatus.Draft
}
)
revision = RevisionView {
id = stored.id
article_id = stored.article_id
version = stored.version
title = stored.title
body = stored.body
status = "draft"
}
}
```
@@ -0,0 +1,62 @@
# 内容修订模型
修订记录保存文章历史内容和版本。
- 包:`content.revision.model`
- 公开类型:
- `RevisionStatus`
- `Revision`
- 公开方法:无
- 使用:无
## 修订状态
修订状态枚举。
- 类型:`RevisionStatus`
- 分支:
- `Draft`:该声明的业务值
- `Published`:该声明的业务值
```dever
type RevisionStatus {
Draft = "草稿"
Published = "已发布"
}
```
## 修订记录
文章的一个历史版本。
- 类型:`Revision`
- 字段:
- `article_id: news.article.model.id`:文章标识
- `version: Int`:当前编辑版本
- `title: Text(1, 160)`:文章标题
- `body: Text`:正文
- `category_id: content.category.model.id?`:可选分类引用
- `asset_id: media.asset.model.id?`:可选媒体引用
- `status: RevisionStatus`:业务状态
```dever
type Revision {
article_id: news.article.model.id index
version: Int
title: Text(1, 160)
body: Text
category_id: content.category.model.id?
asset_id: media.asset.model.id?
status: RevisionStatus default RevisionStatus.Draft index
}
```
## 版本唯一约束
同一文章的版本号唯一。
- 声明:`unique(article_id, version)`
```dever
unique(article_id, version)
```