更新 unified management 服务逻辑
build-winui / winui (push) Has been cancelled

This commit is contained in:
QWQLwToo
2026-06-26 13:57:58 +08:00
parent 79bdc34664
commit df6e9ab9e9
10 changed files with 459 additions and 13 deletions
@@ -38,6 +38,49 @@ func NewService(cfg *config.Config, store *db.Store) *Service {
return &Service{cfg: cfg, store: store}
}
func (s *Service) EnsureSeedDocuments(ctx context.Context) error {
for _, name := range []string{"update-info", "media-types"} {
if err := s.ensureSeedDocument(ctx, name); err != nil {
return err
}
}
return nil
}
func (s *Service) ensureSeedDocument(ctx context.Context, name string) error {
fileName, err := fileNameFor(name)
if err != nil {
return err
}
target := filepath.Join(s.cfg.UpdatePublicDir, fileName)
if _, err := os.Stat(target); err == nil {
return nil
} else if !errors.Is(err, os.ErrNotExist) {
return err
}
source := filepath.Join(s.cfg.LegacyUpdateDir, "public", fileName)
data, err := os.ReadFile(source)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
return nil
}
return err
}
_, formatted, err := parseAndFormat(name, data)
if err != nil {
return err
}
if err := os.MkdirAll(filepath.Dir(target), 0o750); err != nil {
return err
}
if err := atomicWrite(target, []byte(formatted)); err != nil {
return err
}
_, _ = s.store.SaveLegacyRevision(name, formatted, "从旧 update/public 初始化基板", "system")
_ = s.store.InsertAudit(db.AuditLog{Actor: "system", Type: "legacy_json.seeded", Target: name, Message: "已从旧项目导入兼容 JSON 基板"})
return nil
}
func (s *Service) Get(ctx context.Context, name string) (Document, error) {
fileName, err := fileNameFor(name)
if err != nil {
@@ -97,7 +140,7 @@ func (s *Service) Save(ctx context.Context, name string, req SaveRequest, actor
return Document{}, err
}
_, _ = s.store.SaveLegacyRevision(name, formatted, req.Note, actor)
_ = s.store.InsertAudit(db.AuditLog{Actor: actor, Type: "legacy_json.saved", Target: name, Message: "Legacy JSON saved"})
_ = s.store.InsertAudit(db.AuditLog{Actor: actor, Type: "legacy_json.saved", Target: name, Message: legacyMessage(name, "已保存并发布兼容 JSON")})
revisions, _ := s.store.ListLegacyRevisions(name, 20)
return Document{Name: name, Raw: formatted, Parsed: parsed, Path: path, UpdatedAt: db.Now(), Revisions: revisions}, nil
}
@@ -124,11 +167,22 @@ func (s *Service) Restore(ctx context.Context, name string, revisionID int64, ac
return Document{}, err
}
_, _ = s.store.SaveLegacyRevision(name, formatted, "restored revision", actor)
_ = s.store.InsertAudit(db.AuditLog{Actor: actor, Type: "legacy_json.restored", Target: name, Message: "Legacy JSON restored"})
_ = s.store.InsertAudit(db.AuditLog{Actor: actor, Type: "legacy_json.restored", Target: name, Message: legacyMessage(name, "已恢复兼容 JSON 历史版本")})
revisions, _ := s.store.ListLegacyRevisions(name, 20)
return Document{Name: name, Raw: formatted, Parsed: parsed, Path: path, UpdatedAt: db.Now(), Revisions: revisions}, nil
}
func legacyMessage(name, action string) string {
switch name {
case "update-info":
return "更新 JSON" + action
case "media-types":
return "媒体源 JSON" + action
default:
return action
}
}
func fileNameFor(name string) (string, error) {
switch strings.TrimSpace(name) {
case "update-info":