Files
web_huakui_server/web/service/srv_playlet/seo_notify.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

69 lines
2.1 KiB
Go

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