Files
weichen 2e56ba9719 feat(docgov): complete review lifecycle gaps for lock/notify/comment/reopen
Defer locked-period supplements to a pending ledger, route duty-holder
notifications, persist stage-scoped comments, and prefer Approver for reopen.
2026-09-25 20:08:56 +00:00

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
}