Files
Agent-System/internal/app/author_only_policy_adapter.go
weichenandCursor 0b67a901a9 feat(app): wire sysadmin author-only policy into projectinstance
Adapt sysadmin.AuthorOnlyPolicySource at the composition root so
projectinstance stays within module-boundary allowlists.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 09:39:59 +00:00

39 lines
1.4 KiB
Go

package app
import (
"context"
"chat-agent-system/internal/projectinstance"
"chat-agent-system/internal/sysadmin"
"github.com/jackc/pgx/v5"
)
// sysadminAuthorOnlyPolicyAdapter 将 sysadmin.AuthorOnlyPolicySource 适配为
// projectinstance 本地窄接口,避免 projectinstance 反向依赖 sysadmin。
type sysadminAuthorOnlyPolicyAdapter struct {
svc *sysadmin.Service
}
func (a *sysadminAuthorOnlyPolicyAdapter) GetAuthorOnlyApprovalPolicy(ctx context.Context) (projectinstance.AuthorOnlyPolicySnapshot, error) {
if a == nil || a.svc == nil {
return projectinstance.AuthorOnlyPolicySnapshot{}, sysadmin.ErrStoreUnavailable
}
pol, err := a.svc.GetAuthorOnlyApprovalPolicy(ctx)
if err != nil {
return projectinstance.AuthorOnlyPolicySnapshot{}, err
}
return projectinstance.AuthorOnlyPolicySnapshot{Allowed: pol.Allowed, Revision: pol.Revision}, nil
}
func (a *sysadminAuthorOnlyPolicyAdapter) LockAuthorOnlyApprovalPolicy(ctx context.Context, tx pgx.Tx) (projectinstance.AuthorOnlyPolicySnapshot, error) {
if a == nil || a.svc == nil {
return projectinstance.AuthorOnlyPolicySnapshot{}, sysadmin.ErrStoreUnavailable
}
pol, err := a.svc.LockAuthorOnlyApprovalPolicy(ctx, tx)
if err != nil {
return projectinstance.AuthorOnlyPolicySnapshot{}, err
}
return projectinstance.AuthorOnlyPolicySnapshot{Allowed: pol.Allowed, Revision: pol.Revision}, nil
}