收口审计治理与套餐任务进展
Constraint: 在线热修前必须保存当前迭代分支全部有效代码进展 Confidence: medium Scope-risk: broad Directive: 后续修改需保持审计事件与业务事务边界一致 Tested: git diff --cached --check Not-tested: 未运行全量测试,提交用于切换分支前保存既有工作
This commit is contained in:
54
internal/service/package_series/audit.go
Normal file
54
internal/service/package_series/audit.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package package_series
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/break/junhong_cmp_fiber/internal/infrastructure/audit"
|
||||
"github.com/break/junhong_cmp_fiber/internal/model"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/errors"
|
||||
)
|
||||
|
||||
// SetAccessAudit 注入套餐系列统一审计 Writer。
|
||||
func (s *Service) SetAccessAudit(db *gorm.DB, writer *audit.Writer) {
|
||||
s.db = db
|
||||
s.auditWriter = writer
|
||||
}
|
||||
|
||||
func (s *Service) appendAudit(ctx context.Context, tx *gorm.DB, actionCode, summary string, series *model.PackageSeries, beforeData, afterData map[string]any) error {
|
||||
if s.auditWriter == nil || s.db == nil {
|
||||
return errors.New(errors.CodeInvalidStatus, "套餐系列统一审计接缝未配置")
|
||||
}
|
||||
return s.auditWriter.Append(ctx, tx, audit.AppendInput{
|
||||
ActionCode: actionCode, Summary: summary, ScopeType: constants.AuditScopePlatform,
|
||||
Result: constants.AuditResultSuccess,
|
||||
Resources: []audit.ResourceInput{audit.PackageSeriesResource(
|
||||
series, constants.AuditResourceRelationPrimary, constants.AuditResourceRolePackageSeriesTarget, beforeData, afterData,
|
||||
)},
|
||||
})
|
||||
}
|
||||
|
||||
func (s *Service) recordAuditFailure(ctx context.Context, actionCode, summary string, series *model.PackageSeries, beforeData map[string]any, businessErr error) {
|
||||
if series == nil {
|
||||
return
|
||||
}
|
||||
s.auditWriter.RecordFailure(ctx, s.db, audit.AppendInput{
|
||||
ActionCode: actionCode, Summary: summary, ScopeType: constants.AuditScopePlatform,
|
||||
Resources: []audit.ResourceInput{audit.PackageSeriesResource(
|
||||
series, constants.AuditResourceRelationPrimary, constants.AuditResourceRolePackageSeriesTarget, beforeData, nil,
|
||||
)},
|
||||
}, businessErr)
|
||||
}
|
||||
|
||||
func packageSeriesData(series *model.PackageSeries) map[string]any {
|
||||
if series == nil {
|
||||
return nil
|
||||
}
|
||||
return map[string]any{
|
||||
"series_name": series.SeriesName, "description": series.Description, "status": series.Status,
|
||||
"enable_one_time_commission": series.EnableOneTimeCommission,
|
||||
"one_time_commission_config": series.OneTimeCommissionConfigJSON,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user