重构: 根目录 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:
@@ -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)
|
||||
}
|
||||
@@ -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}
|
||||
}
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user