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,18 @@
# 后台发布计划接口
后台接口创建发布计划。
- 包:`publishing.schedule.api.admin.manage`
- 公开类型:无
- 公开方法:无
- 使用:无
## 创建计划
创建请求委托给计划应用。
- 声明:`post schedule`
```dever
post schedule = app.create
```
@@ -0,0 +1,166 @@
# 发布计划应用
发布计划应用在事务中写入计划并提交持久化 Job。
- 包:`publishing.schedule.app`
- 公开类型:
- `PublishRequest`
- `ScheduleView`
- 公开方法:
- `create`
- `publish`
- `complete`
- `publish_claimed`
- 使用:
- `publishing.schedule.create(article_id, publish_at)`
- `publishing.schedule.publish(input)`
- `publishing.schedule.complete(status, schedule_id)`
- `publishing.schedule.publish_claimed(changed, article_id)`
## 发布请求
Job 只携带计划 ID。
- 类型:`PublishRequest`
- 字段:
- `schedule_id: model.id`:持久计划标识
```dever
type PublishRequest {
schedule_id: model.id
}
```
## 计划视图
返回计划的公开字段。
- 类型:`ScheduleView`
- 字段:
- `id: model.id`:记录标识
- `article_id: news.article.model.id`:文章标识
- `publish_at: DateTime`:计划执行时间
- `status: Text`:业务状态
```dever
type ScheduleView {
id: model.id
article_id: news.article.model.id
publish_at: DateTime
status: Text
}
```
## 创建计划
业务记录、Job 和返回视图在同一事务内完成。
- 函数:`create`
- 输入:
- `article_id: news.article.model.id`:文章标识
- `publish_at: DateTime`:计划执行时间
- 输出:
- `schedule: ScheduleView`:该声明的业务值
```dever
transaction create(article_id: news.article.model.id, publish_at: DateTime) (
schedule: ScheduleView
) {
news.article.require_schedulable(article_id)
stored = model.create(
{
article_id = article_id
publish_at = publish_at
}
)
queued = dever.job.enqueue_at(
job.publish,
PublishRequest {
schedule_id = stored.id
},
uuid.to_text(stored.uuid),
publish_at
)
discarded = queued
schedule = ScheduleView {
id = stored.id
article_id = stored.article_id
publish_at = stored.publish_at
status = "pending"
}
}
```
## 执行计划
Worker 首先检查计划状态,再调用文章领域的定时发布入口。
- 函数:`publish`
- 输入:
- `input: PublishRequest`:经过类型检查的输入
- 输出:无
```dever
transaction publish(input: PublishRequest) () {
scheduled = model.get(input.schedule_id)
complete(scheduled.status, scheduled.id)
}
```
## complete
发布计划应用在事务中写入计划并提交持久化 Job。
- 函数:`complete`
- 输入:
- `status: publishing.schedule.model.ScheduleStatus`:业务状态
- `schedule_id: publishing.schedule.model.id`:持久计划标识
- 输出:无
```dever
complete(status: model.ScheduleStatus.Completed, schedule_id: model.id) () {}
complete(status: model.ScheduleStatus.Cancelled, schedule_id: model.id) () {}
complete(status: model.ScheduleStatus.Pending, schedule_id: model.id) () {
scheduled = model.get(schedule_id)
domain.require_due(
model.exists(
{
where = id == schedule_id and publish_at <= dever.time.now()
}
)
)
changed = model.update(
{
where = id == scheduled.id and status == model.ScheduleStatus.Pending
},
{
status = model.ScheduleStatus.Completed
}
)
publish_claimed(changed, scheduled.article_id)
}
```
## publish_claimed
发布计划应用在事务中写入计划并提交持久化 Job。
- 函数:`publish_claimed`
- 输入:
- `changed: Int`:条件更新影响行数
- `article_id: news.article.model.id`:文章标识
- 输出:无
```dever
publish_claimed(changed: 0, article_id: news.article.model.id) () {}
publish_claimed(changed: 1, article_id: news.article.model.id) () {
publication = news.article.publish_scheduled(article_id)
}
publish_claimed(changed: other, article_id: news.article.model.id) () {
fail(dever.api.Error.Conflict)
}
```
@@ -0,0 +1,25 @@
# 发布计划规则
计划任务只允许待发布记录进入执行流程。
- 包:`publishing.schedule.domain`
- 公开类型:无
- 公开方法:无
- 使用:无
## require_due
计划任务只允许待发布记录进入执行流程。
- 函数:`require_due`
- 输入:
- `valid: Bool`:该声明的业务值
- 输出:无
```dever
require_due(valid: true) () pure {}
require_due(valid: false) () pure {
fail(dever.api.Error.Invalid)
}
```
@@ -0,0 +1,33 @@
# 发布计划任务
发布计划任务由持久化 Job 执行。
- 包:`publishing.schedule.job`
- 公开类型:无
- 公开方法:无
- 使用:无
## 队列连接
使用默认数据库连接。
- 声明:`database default`
```dever
database default
```
## 发布任务
任务委托给发布计划应用。
- 函数:`publish`
- 输入:
- `input: publishing.schedule.PublishRequest`:发布请求
- 输出:无
```dever
job publish(input: app.PublishRequest) () retry(3) timeout(30000) {
app.publish(input)
}
```
@@ -0,0 +1,48 @@
# 发布计划模型
发布计划保存文章的计划时间和幂等状态。
- 包:`publishing.schedule.model`
- 公开类型:
- `ScheduleStatus`
- `Schedule`
- 公开方法:无
- 使用:无
## 计划状态
计划状态枚举。
- 类型:`ScheduleStatus`
- 分支:
- `Pending`:该声明的业务值
- `Completed`:该声明的业务值
- `Cancelled`:该声明的业务值
```dever
type ScheduleStatus {
Pending = "待发布"
Completed = "已完成"
Cancelled = "已取消"
}
```
## 发布计划
计划关联文章和执行时间。
- 类型:`Schedule`
- 字段:
- `uuid: Uuid`:计划独立去重标识
- `article_id: news.article.model.id`:文章标识
- `publish_at: DateTime`:计划执行时间
- `status: ScheduleStatus`:业务状态
```dever
type Schedule {
uuid: Uuid generated unique
article_id: news.article.model.id unique
publish_at: DateTime index
status: ScheduleStatus default ScheduleStatus.Pending index
}
```