From e14aee1498486d948c4eb7a9e4a06b36c9c0e0cd Mon Sep 17 00:00:00 2001 From: what Date: Wed, 22 Jul 2026 09:14:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84:=20=E6=A0=B9=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=20resource.go=20=E7=B2=BE=E7=AE=80,res=5Fevent.go=20?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E4=B8=BA=20res=5Fwatcher.go,=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20di.go?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resource.go 只保留跟 base 包无关的部分接口定义。res_event.go(旧资源事件接口)删除,替换成 res_watcher.go(ResWatcher 相关接口)。新增 di.go,提供依赖注入相关的公共辅助函数。 --- di.go | 21 +++++++++++++++++++ res_event.go | 56 -------------------------------------------------- res_watcher.go | 28 +++++++++++++++++++++++++ resource.go | 9 ++++---- 4 files changed, 54 insertions(+), 60 deletions(-) create mode 100644 di.go delete mode 100644 res_event.go create mode 100644 res_watcher.go diff --git a/di.go b/di.go new file mode 100644 index 0000000..35b1201 --- /dev/null +++ b/di.go @@ -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) +} diff --git a/res_event.go b/res_event.go deleted file mode 100644 index fb2f218..0000000 --- a/res_event.go +++ /dev/null @@ -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} -} diff --git a/res_watcher.go b/res_watcher.go new file mode 100644 index 0000000..24eb9e3 --- /dev/null +++ b/res_watcher.go @@ -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 +} diff --git a/resource.go b/resource.go index db64849..9bb1f2b 100644 --- a/resource.go +++ b/resource.go @@ -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)