This commit is contained in:
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user