重构: 根目录 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"
|
"git.fsdpf.net/go/req"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetResource 资源
|
// GetResource 资源;类型定义搬到了 req.GetResource(req 的子包需要用它查资源,不能反过来
|
||||||
type GetResource func(code string) (req.Resource, bool)
|
// import contracts),这里保留别名兼容原有引用。
|
||||||
|
type GetResource = req.GetResource
|
||||||
|
|
||||||
// MustResource 资源, 没有则抛出错误
|
// MustResource 资源, 没有则抛出错误;类型定义搬到了 req.MustResource,这里保留别名兼容原有引用。
|
||||||
type MustResource func(code string) req.Resource
|
type MustResource = req.MustResource
|
||||||
|
|
||||||
// GetUser 获取用户
|
// GetUser 获取用户
|
||||||
type GetUser func(uuid string, options ...req.UserRuntimeOption) (req.User, error)
|
type GetUser func(uuid string, options ...req.UserRuntimeOption) (req.User, error)
|
||||||
|
|||||||
Reference in New Issue
Block a user