Files
web_huakui_server/pub/seo/sitemapdirty/dirty.go
T
rootandClaude Opus 4.7 85c0071fd8 feat: 从黄果 NET hgdjnet-server 9bfbafe 导入 HKDJ 官网后端
来源:hgdjnet-server 9bfbafe10d417deea959bd53117bc88a10e60a83
项目身份 HKDJ / JHA-216,独立官网仓库,Jenkins 守卫键 hkdjnet
测试目录 /server/hkdj_net,App/Web API 30331/30332

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-10-16 11:20:04 +08:00

45 lines
1.4 KiB
Go

// Package sitemapdirty 在 web 与 app 之间传递「站点内容已变更」的标记。
// web 进程负责文章的发布/更新/删除,而 sitemap 文件由 app 进程生成并对外提供,
// 两者独立部署且不互相调用,因此借数据库中的一条记录做跨进程通知。
package sitemapdirty
import (
"context"
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/models/syncfilemod"
"time"
"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
}