Files
web_hgdjb_server/web/service/srv_playlet/seo_notify.go
T
2026-11-07 10:47:32 +08:00

69 lines
2.1 KiB
Go

package srv_playlet
import (
"context"
"time"
"videoweb/pub/common/log"
"videoweb/pub/models/playletmod"
"videoweb/pub/seo/sitemapdirty"
"videoweb/web/service/srv_seopush"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
func markSitemapDirty(ctx context.Context) {
sitemapdirty.Mark(ctx)
}
// notifyPlayletSeoAfterWrite 短剧写入后:刷新 sitemap 标记。
// 搜索引擎只在新上架(含新增即上架)或从已上架变为下架时推送,普通改内容不推。
// prevStatus 为变更前状态;nil 表示新增。
func notifyPlayletSeoAfterWrite(ctx context.Context, playletId int64, prevStatus *playletmod.Status) {
markSitemapDirty(ctx)
item, err := playletmod.FindOnePlaylet(ctx, bson.M{playletmod.FN.Playlet.Id: playletId},
options.FindOne().SetProjection(bson.D{
{Key: playletmod.FN.Playlet.Id, Value: 1},
{Key: playletmod.FN.Playlet.Status, Value: 1},
{Key: playletmod.FN.Playlet.OnlineAt, Value: 1},
}))
if err != nil || item == nil {
if err != nil {
log.Warn("seopush: load playlet after write failed", log.Any("playletId", playletId), log.E(err))
}
return
}
wasUp := prevStatus != nil && *prevStatus == playletmod.StatusUp
if item.Status == playletmod.StatusUp {
if !wasUp {
srv_seopush.EnqueuePlayletUpdated(ctx, item.Id, item.Status, item.OnlineAt)
}
return
}
if wasUp {
srv_seopush.EnqueuePlayletDeleted(ctx, item.Id)
}
}
// notifyPlayletSeoAfterStatus 批量上下架后的 SEO 通知
func notifyPlayletSeoAfterStatus(ctx context.Context, ids []int64, status playletmod.Status, onlineAt time.Time) {
markSitemapDirty(ctx)
if status == playletmod.StatusUp {
for _, id := range ids {
srv_seopush.EnqueuePlayletUpdated(ctx, id, status, onlineAt)
}
return
}
for _, id := range ids {
srv_seopush.EnqueuePlayletDeleted(ctx, id)
}
}
// notifyPlayletSeoAfterDelete 物理删除后刷新 sitemap 标记,并对原上架短剧推送删除通知。
func notifyPlayletSeoAfterDelete(ctx context.Context, onlineIds []int64) {
markSitemapDirty(ctx)
for _, id := range onlineIds {
srv_seopush.EnqueuePlayletDeleted(ctx, id)
}
}