重构: 根目录 resource.go 精简,res_event.go 替换为 res_watcher.go,新增 di.go

resource.go 只保留跟 base 包无关的部分接口定义。res_event.go(旧资源事件接口)删除,替换成 res_watcher.go(ResWatcher 相关接口)。新增 di.go,提供依赖注入相关的公共辅助函数。
This commit is contained in:
2026-07-22 09:14:22 +08:00
parent 9446571363
commit e14aee1498
4 changed files with 54 additions and 60 deletions
+21
View File
@@ -0,0 +1,21 @@
package contracts
import "github.com/samber/do/v2"
type Injector = do.Injector
func Invoke[T any](i Injector) (T, error) {
return do.Invoke[T](i)
}
func MustInvoke[T any](i Injector) T {
return do.MustInvoke[T](i)
}
func InvokeNamed[T any](i Injector, name string) (T, error) {
return do.InvokeNamed[T](i, name)
}
func MustInvokeNamed[T any](i Injector, name string) T {
return do.MustInvokeNamed[T](i, name)
}
-56
View File
@@ -1,56 +0,0 @@
package contracts
import (
"git.fsdpf.net/go/req"
"github.com/samber/do/v2"
"github.com/samber/lo"
)
type ResEventService interface {
Start() error
Shutdown() error
Restart() error
}
type ResListener interface {
Insert(new map[string]any, u req.User, id int64) error
Update(new map[string]any, u req.User, old map[string]any) error
Delete(old map[string]any, u req.User) error
GetResource() req.Resource
GetCode() string
}
type BaseListener struct {
Container do.Injector
res req.Resource // 监听资源
code string // code
events []string // 监听动作
}
func (this BaseListener) GetCode() string {
return this.code
}
func (this BaseListener) GetResource() req.Resource {
return this.res
}
func (this BaseListener) HasEvent(event string) bool {
return lo.Contains(this.events, event)
}
func (BaseListener) Insert(new map[string]any, u req.User, id int64) error {
return nil
}
func (BaseListener) Update(new map[string]any, u req.User, old map[string]any) error {
return nil
}
func (BaseListener) Delete(old map[string]any, u req.User) error {
return nil
}
func NewBaseListener(code string, res req.Resource, container do.Injector) *BaseListener {
return &BaseListener{code: code, res: res, Container: container}
}
+28
View File
@@ -0,0 +1,28 @@
package contracts
import (
"git.fsdpf.net/go/req/resx"
)
// ResEventType 资源操作类型:读(SELECT+ 写(INSERT/UPDATE/DELETE
type ResEventType = resx.ResEventType
const (
ResEventSelect = resx.ResEventSelect
ResEventInsert = resx.ResEventInsert
ResEventUpdate = resx.ResEventUpdate
ResEventDelete = resx.ResEventDelete
)
// ResChangeRow 描述一次资源写操作中某一行的变更内容
type ResChangeRow = resx.ResChangeRow
// ResWatcher 关注一个或多个资源写操作的处理器,通过 _res_listener 注册表按资源绑定,
// 每次事件触发都会重新构造实例(见 framework-v2 的 handler.ResWatcherBase / internal/resource 的
// watcherDispatcher.getAppWatcher
type ResWatcher interface {
Controller
// Handle 处理一次资源变更,row 自带 User()
Handle(row ResChangeRow) error
GetCode() string
}
+5 -4
View File
@@ -4,11 +4,12 @@ import (
"git.fsdpf.net/go/req"
)
// GetResource 资源
type GetResource func(code string) (req.Resource, bool)
// GetResource 资源;类型定义搬到了 req.GetResource(req 的子包需要用它查资源,不能反过来
// import contracts),这里保留别名兼容原有引用。
type GetResource = req.GetResource
// MustResource 资源, 没有则抛出错误
type MustResource func(code string) req.Resource
// MustResource 资源, 没有则抛出错误;类型定义搬到了 req.MustResource,这里保留别名兼容原有引用。
type MustResource = req.MustResource
// GetUser 获取用户
type GetUser func(uuid string, options ...req.UserRuntimeOption) (req.User, error)