Defer locked-period supplements to a pending ledger, route duty-holder notifications, persist stage-scoped comments, and prefer Approver for reopen.
435 lines
9.4 KiB
Go
435 lines
9.4 KiB
Go
package server
|
|
|
|
import (
|
|
"chat-agent-system/internal/app/intentflow"
|
|
"chat-agent-system/internal/app/stageflow"
|
|
"chat-agent-system/internal/auth"
|
|
"chat-agent-system/internal/authz"
|
|
"chat-agent-system/internal/bizdev"
|
|
"chat-agent-system/internal/coordinator"
|
|
"chat-agent-system/internal/ctxmgr"
|
|
"chat-agent-system/internal/docgov"
|
|
"chat-agent-system/internal/docrevision"
|
|
"chat-agent-system/internal/freedoc"
|
|
"chat-agent-system/internal/intent"
|
|
"chat-agent-system/internal/kb"
|
|
"chat-agent-system/internal/maintenance"
|
|
"chat-agent-system/internal/notification"
|
|
"chat-agent-system/internal/projectinstance"
|
|
"chat-agent-system/internal/projectworkflow"
|
|
"chat-agent-system/internal/storage"
|
|
"chat-agent-system/internal/sysadmin"
|
|
"chat-agent-system/internal/taskrun"
|
|
"chat-agent-system/internal/workflowdef"
|
|
"chat-agent-system/internal/workspace"
|
|
)
|
|
|
|
// 本文件集中承接 Server 对 app.Runtime 领域服务的访问(module-batches-ag 镜像字段收口)。
|
|
// Server 不再镜像 Runtime 字段;全部经访问器取用,nil 安全。
|
|
// testOverrides 仅供测试注入替换件;set 字段后(含显式置 nil 经 *X 指针形)覆盖访问器结果,
|
|
// 生产路径恒为空。显式置 nil 用 ptr 形(authorizerPtr 等)以区分「未设置」与「设为 nil」。
|
|
|
|
type serverTestOverrides struct {
|
|
svc *bizdev.Service
|
|
pwSvc *projectworkflow.Service
|
|
engine *coordinator.CoordinatorEngine
|
|
authSvc *auth.Service
|
|
taskRuns *taskrun.Manager
|
|
authorizer *authz.Authorizer
|
|
authzSvc *authz.Service
|
|
wfDefSvc *workflowdef.Service
|
|
instSvc *projectinstance.Service
|
|
notifySvc *notification.Service
|
|
resolver *workspace.Resolver
|
|
wsCap *workspace.Capability
|
|
cmds *taskrun.Commands
|
|
stageflow *stageflow.UseCase
|
|
gov *docgov.GovernanceEngine
|
|
rev *docrevision.Service
|
|
ctxMgr *ctxmgr.ContextManager
|
|
cas *storage.CAS
|
|
freeDoc *freedoc.Service
|
|
kb *kb.Client
|
|
sysadmin *sysadmin.Service
|
|
maintenance *maintenance.Service
|
|
|
|
// 显式置 nil 的位标记(区分「未设置」与「设为 nil」,fail-closed 测试用)。
|
|
authorizerNil bool
|
|
instSvcNil bool
|
|
}
|
|
|
|
func (s *Server) overrides() *serverTestOverrides {
|
|
if s == nil {
|
|
return nil
|
|
}
|
|
return s.testOverrides
|
|
}
|
|
|
|
func (s *Server) svc() *bizdev.Service {
|
|
if o := s.overrides(); o != nil && o.svc != nil {
|
|
return o.svc
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Biz
|
|
}
|
|
|
|
func (s *Server) pwSvc() *projectworkflow.Service {
|
|
if o := s.overrides(); o != nil && o.pwSvc != nil {
|
|
return o.pwSvc
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.PW
|
|
}
|
|
|
|
func (s *Server) rec() intent.Recognizer {
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Rec
|
|
}
|
|
|
|
func (s *Server) engine() *coordinator.CoordinatorEngine {
|
|
if o := s.overrides(); o != nil && o.engine != nil {
|
|
return o.engine
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Engine
|
|
}
|
|
|
|
func (s *Server) authSvc() *auth.Service {
|
|
if o := s.overrides(); o != nil && o.authSvc != nil {
|
|
return o.authSvc
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Auth
|
|
}
|
|
|
|
func (s *Server) taskRuns() *taskrun.Manager {
|
|
if o := s.overrides(); o != nil && o.taskRuns != nil {
|
|
return o.taskRuns
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.TaskRuns
|
|
}
|
|
|
|
func (s *Server) authorizer() *authz.Authorizer {
|
|
if o := s.overrides(); o != nil {
|
|
if o.authorizerNil {
|
|
return nil
|
|
}
|
|
if o.authorizer != nil {
|
|
return o.authorizer
|
|
}
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Authorizer
|
|
}
|
|
|
|
func (s *Server) authzSvc() *authz.Service {
|
|
if o := s.overrides(); o != nil && o.authzSvc != nil {
|
|
return o.authzSvc
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Authz
|
|
}
|
|
|
|
func (s *Server) wfDefSvc() *workflowdef.Service {
|
|
if o := s.overrides(); o != nil && o.wfDefSvc != nil {
|
|
return o.wfDefSvc
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.WFDef
|
|
}
|
|
|
|
func (s *Server) instSvc() *projectinstance.Service {
|
|
if o := s.overrides(); o != nil {
|
|
if o.instSvcNil {
|
|
return nil
|
|
}
|
|
if o.instSvc != nil {
|
|
return o.instSvc
|
|
}
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Inst
|
|
}
|
|
|
|
func (s *Server) notifySvc() *notification.Service {
|
|
if o := s.overrides(); o != nil && o.notifySvc != nil {
|
|
return o.notifySvc
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Notify
|
|
}
|
|
|
|
func (s *Server) resolver() *workspace.Resolver {
|
|
if o := s.overrides(); o != nil && o.resolver != nil {
|
|
return o.resolver
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Resolver
|
|
}
|
|
|
|
func (s *Server) wsCap() *workspace.Capability {
|
|
if o := s.overrides(); o != nil && o.wsCap != nil {
|
|
return o.wsCap
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.WSCap
|
|
}
|
|
|
|
func (s *Server) cmds() *taskrun.Commands {
|
|
if o := s.overrides(); o != nil && o.cmds != nil {
|
|
return o.cmds
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Commands
|
|
}
|
|
|
|
func (s *Server) stageflow() *stageflow.UseCase {
|
|
if o := s.overrides(); o != nil && o.stageflow != nil {
|
|
return o.stageflow
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Stageflow
|
|
}
|
|
|
|
func (s *Server) gov() *docgov.GovernanceEngine {
|
|
if o := s.overrides(); o != nil && o.gov != nil {
|
|
return o.gov
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Gov
|
|
}
|
|
|
|
func (s *Server) rev() *docrevision.Service {
|
|
if o := s.overrides(); o != nil && o.rev != nil {
|
|
return o.rev
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Rev
|
|
}
|
|
|
|
func (s *Server) ctxMgr() *ctxmgr.ContextManager {
|
|
if o := s.overrides(); o != nil && o.ctxMgr != nil {
|
|
return o.ctxMgr
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Ctx
|
|
}
|
|
|
|
func (s *Server) cas() *storage.CAS {
|
|
if o := s.overrides(); o != nil && o.cas != nil {
|
|
return o.cas
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.CAS
|
|
}
|
|
|
|
func (s *Server) freeDoc() *freedoc.Service {
|
|
if o := s.overrides(); o != nil && o.freeDoc != nil {
|
|
return o.freeDoc
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.FreeDoc
|
|
}
|
|
|
|
func (s *Server) kb() *kb.Client {
|
|
if o := s.overrides(); o != nil && o.kb != nil {
|
|
return o.kb
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.KB
|
|
}
|
|
|
|
func (s *Server) sysadmin() *sysadmin.Service {
|
|
if o := s.overrides(); o != nil && o.sysadmin != nil {
|
|
return o.sysadmin
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.SysAdmin
|
|
}
|
|
|
|
func (s *Server) maintenance() *maintenance.Service {
|
|
if o := s.overrides(); o != nil && o.maintenance != nil {
|
|
return o.maintenance
|
|
}
|
|
if s == nil || s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.Maintenance
|
|
}
|
|
|
|
func (s *Server) intentPlans() intentflow.Service {
|
|
if s == nil {
|
|
return nil
|
|
}
|
|
if s.intentPlansOverride != nil {
|
|
return s.intentPlansOverride
|
|
}
|
|
if s.rt == nil {
|
|
return nil
|
|
}
|
|
return s.rt.IntentPlans
|
|
}
|
|
|
|
// setOverride* 系列仅供测试注入替换件(serverTestOverrides);生产代码禁止调用。
|
|
|
|
func (s *Server) setOverrideIntentPlans(v intentflow.Service) {
|
|
if s == nil {
|
|
return
|
|
}
|
|
s.intentPlansOverride = v
|
|
}
|
|
|
|
func (s *Server) setOverrideSvc(v *bizdev.Service) {
|
|
s.ensureOverrides().svc = v
|
|
}
|
|
|
|
func (s *Server) setOverridePwSvc(v *projectworkflow.Service) {
|
|
s.ensureOverrides().pwSvc = v
|
|
}
|
|
|
|
func (s *Server) setOverrideEngine(v *coordinator.CoordinatorEngine) {
|
|
s.ensureOverrides().engine = v
|
|
}
|
|
|
|
func (s *Server) setOverrideAuthSvc(v *auth.Service) {
|
|
s.ensureOverrides().authSvc = v
|
|
}
|
|
|
|
func (s *Server) setOverrideTaskRuns(v *taskrun.Manager) {
|
|
s.ensureOverrides().taskRuns = v
|
|
}
|
|
|
|
func (s *Server) setOverrideAuthorizer(v *authz.Authorizer) {
|
|
o := s.ensureOverrides()
|
|
if v == nil {
|
|
o.authorizerNil = true
|
|
o.authorizer = nil
|
|
return
|
|
}
|
|
o.authorizerNil = false
|
|
o.authorizer = v
|
|
}
|
|
|
|
func (s *Server) setOverrideAuthzSvc(v *authz.Service) {
|
|
s.ensureOverrides().authzSvc = v
|
|
}
|
|
|
|
func (s *Server) setOverrideWfDefSvc(v *workflowdef.Service) {
|
|
s.ensureOverrides().wfDefSvc = v
|
|
}
|
|
|
|
func (s *Server) setOverrideInstSvc(v *projectinstance.Service) {
|
|
o := s.ensureOverrides()
|
|
if v == nil {
|
|
o.instSvcNil = true
|
|
o.instSvc = nil
|
|
return
|
|
}
|
|
o.instSvcNil = false
|
|
o.instSvc = v
|
|
}
|
|
|
|
func (s *Server) setOverrideNotifySvc(v *notification.Service) {
|
|
s.ensureOverrides().notifySvc = v
|
|
}
|
|
|
|
func (s *Server) setOverrideResolver(v *workspace.Resolver) {
|
|
s.ensureOverrides().resolver = v
|
|
}
|
|
|
|
func (s *Server) setOverrideWsCap(v *workspace.Capability) {
|
|
s.ensureOverrides().wsCap = v
|
|
}
|
|
|
|
func (s *Server) setOverrideCmds(v *taskrun.Commands) {
|
|
s.ensureOverrides().cmds = v
|
|
}
|
|
|
|
func (s *Server) setOverrideStageflow(v *stageflow.UseCase) {
|
|
s.ensureOverrides().stageflow = v
|
|
}
|
|
|
|
func (s *Server) setOverrideGov(v *docgov.GovernanceEngine) {
|
|
s.ensureOverrides().gov = v
|
|
}
|
|
|
|
func (s *Server) setOverrideRev(v *docrevision.Service) {
|
|
s.ensureOverrides().rev = v
|
|
}
|
|
|
|
func (s *Server) setOverrideCtxMgr(v *ctxmgr.ContextManager) {
|
|
s.ensureOverrides().ctxMgr = v
|
|
}
|
|
|
|
func (s *Server) setOverrideCas(v *storage.CAS) {
|
|
s.ensureOverrides().cas = v
|
|
}
|
|
|
|
func (s *Server) setOverrideFreeDoc(v *freedoc.Service) {
|
|
s.ensureOverrides().freeDoc = v
|
|
}
|
|
|
|
func (s *Server) setOverrideKb(v *kb.Client) {
|
|
s.ensureOverrides().kb = v
|
|
}
|
|
|
|
func (s *Server) setOverrideSysadmin(v *sysadmin.Service) {
|
|
s.ensureOverrides().sysadmin = v
|
|
}
|
|
|
|
func (s *Server) setOverrideMaintenance(v *maintenance.Service) {
|
|
s.ensureOverrides().maintenance = v
|
|
}
|
|
|
|
func (s *Server) ensureOverrides() *serverTestOverrides {
|
|
if s.testOverrides == nil {
|
|
s.testOverrides = &serverTestOverrides{}
|
|
}
|
|
return s.testOverrides
|
|
}
|