mirror of
https://gitee.com/dromara/mayfly-go
synced 2026-05-15 23:45:25 +08:00
1.4 KiB
1.4 KiB
trigger
| trigger |
|---|
| always_on |
API 层规范
Handler 标准结构
type Db struct {
dbApp application.Db `inject:"T"`
tagApp tagapp.TagTree `inject:"T"`
}
// @router /api/dbs [get]
func (d *Db) Dbs(rc *req.Ctx) {
queryCond := req.BindQuery[entity.DbQuery](rc) // 1. 绑定参数
loginAccount := rc.GetLoginAccount() // 2. 获取上下文
result, err := d.dbApp.GetPageList(queryCond) // 3. 调用应用层
biz.ErrIsNil(err) // 4. 断言错误(仅API层)
rc.ResData = result // 5. 返回结果
}
路由配置
func (d *Db) ReqConfs() *req.Confs {
return req.NewConfs("/dbs",
req.NewGet("", d.Dbs),
req.NewPost("", d.Save).Log(req.NewLogSaveI(imsg.LogDbSave)),
req.NewDelete(":dbId", d.DeleteDb).Log(req.NewLogSaveI(imsg.LogDbDelete)),
)
}
断言边界
✅ API 层可用断言:
func (d *Db) Save(rc *req.Ctx) {
form := req.BindFormAndValid[form.DbForm](rc)
biz.IsTrue(form.InstanceId > 0, "实例ID不能为空")
biz.ErrIsNil(d.dbApp.SaveDb(rc, &entity.Db{Name: form.Name}))
rc.ResData = "保存成功"
}
🚫 Application 层禁止断言,必须返回 error:
func (d *dbAppImpl) SaveDb(ctx context.Context, db *entity.Db) error {
if db.Name == "" {
return errorx.NewBiz("名称不能为空")
}
return d.Save(ctx, db)
}