// Package sitemapdirty 在 web 与 app 之间传递「站点内容已变更」的标记。 // web 进程负责文章的发布/更新/删除,而 sitemap 文件由 app 进程生成并对外提供, // 两者独立部署且不互相调用,因此借数据库中的一条记录做跨进程通知。 package sitemapdirty import ( "context" "time" "videoweb/pub/common/log" "videoweb/pub/models/syncfilemod" "go.mongodb.org/mongo-driver/bson" ) func recordFilter() bson.M { return bson.M{syncfilemod.FN.SyncRecord.Job: syncfilemod.SitemapDirtyJob} } // Mark 标记内容已变更,app 侧会在下一个检查周期重新生成 sitemap func Mark(ctx context.Context) { now := time.Now() update := bson.M{ "$set": bson.M{ syncfilemod.FN.SyncRecord.RecordTime: now, syncfilemod.FN.SyncRecord.UpdatedAt: now, }, "$setOnInsert": bson.M{ syncfilemod.FN.SyncRecord.Job: syncfilemod.SitemapDirtyJob, syncfilemod.FN.SyncRecord.CreatedAt: now, }, } if serr := syncfilemod.UpsertOneSyncRecord(ctx, recordFilter(), update); serr != nil { log.Warn("sitemapdirty: mark failed", log.E(serr)) } } // LastDirtyAt 读取最近一次内容变更时间,无记录时返回零值 func LastDirtyAt(ctx context.Context) time.Time { record, serr := syncfilemod.FindOneSyncRecord(ctx, recordFilter()) if serr != nil || record == nil { return time.Time{} } return record.RecordTime }