package srv_playlet import ( "context" "hkdj-web-server/pub/common/log" "hkdj-web-server/pub/models/playletmod" "hkdj-web-server/pub/seo/sitemapdirty" "hkdj-web-server/web/service/srv_seopush" "time" "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) } }