Files
2026-11-07 10:46:18 +08:00

45 lines
1.4 KiB
Go

// 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
}