Files
sundynix-agentix/sundynix-gateway/internal/store/models.go
T
Blizzard 16c67dcb4f feat(gateway): 敏感操作审计日志(T4.B)
- store.AuditLog 表(sundynix_audit_log) + AppendAudit/ListAudit
- middleware.Audit(db):只审计变更类(POST/PUT/DELETE/PATCH),收尾 best-effort
  落库(独立超时 ctx,失败静默不拖垮主流程);挂管理组 + prompt 激活/撤销 + HITL 审批
- GET /api/v1/admin/audit:倒序审计流(limit/offset 翻页)
- live:PUT pricing / POST prompts/deactivate 留痕(actor/path/status/ip),GET 不记
- DEPTH_ROADMAP T4.B:overview + audit 打勾

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 09:19:52 +08:00

60 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package store
// 数据库映射模型。表名经 GORM NamingStrategy 统一加 sundynix_ 前缀 + 单数:
// User → sundynix_userTask → sundynix_task。
// 约定:均嵌入 BaseModel(雪花字符串 id + created_at/updated_at + 软删 deleted_at);
// 建表/改表一律走 AutoMigrate,不手写 DDL。
// User 是平台用户(Users)。
type User struct {
BaseModel
Email string `gorm:"uniqueIndex;size:255"`
Name string `gorm:"size:64"`
PasswordHash string `gorm:"size:255" json:"-"` // bcrypt;绝不出 JSON
}
// Task 是一次提交的 Agent 编排任务(DSL)。
// 业务 idtask_xxx,用于 NATS subject/stream)单列 TaskID,主键统一雪花。
type Task struct {
BaseModel
TaskID string `gorm:"uniqueIndex;size:64"` // task_xxx
Graph string `gorm:"type:jsonb"` // React Flow 导出的 DSL 原文
Status string `gorm:"size:32"` // submitted / running / done / failed / timeout
Detail string `gorm:"type:text"` // 失败/超时原因等(状态机回写)
// 收尾持久化:供「运行历史复盘」永久回放(Redis 流仅 10min TTL,过期后历史任务靠这两列)。
Output string `gorm:"type:text"` // 最终模型输出(收尾时由网关从流快照落库)
Trace string `gorm:"type:text"` // 执行轨迹事件 JSON 数组(存为文本,容忍空串;不在库内查它)
}
// Eval 是一次任务的自动化评测结果(dispatcher 评完经 NATS 回写,每任务一条,按 task_id upsert)。
type Eval struct {
BaseModel
TaskID string `gorm:"uniqueIndex;size:64"`
Overall float64 // 综合分 [0,1]
Rule float64 // 规则分
LLM float64 // LLM 质量分
Faithful float64 // RAG 忠实度分(0=无来源未评)
Level string `gorm:"size:16"` // ok / warn / poor
Flags string `gorm:"type:text"` // 命中问题(JSON 数组字符串)
Reason string `gorm:"type:text"` // 评语
Sources int // 检索来源数
Corrected bool // 是否经低分自动纠偏重生成后采纳(恒温器闭环)
}
func (Eval) TableName() string { return "sundynix_eval" }
// AuditLog 是一条敏感操作留痕(改模型/密钥/激活 prompt/审批 等)。
// 由 Audit 中间件在请求收尾时 best-effort 写入;只增不改,供运维溯源。
type AuditLog struct {
BaseModel
Actor string `gorm:"size:64;index"` // 操作者 uid(未登录/系统留空)
Action string `gorm:"size:8"` // HTTP 方法:POST / PUT / DELETE
Route string `gorm:"size:128"` // 路由模式,如 /api/v1/admin/models/:id
Path string `gorm:"size:256"` // 实际请求路径
Status int // HTTP 响应状态码
IP string `gorm:"size:64"`
Detail string `gorm:"type:text"` // 备注(可选,如目标名/关键参数)
}
func (AuditLog) TableName() string { return "sundynix_audit_log" }