Initial commit: web_hghl_server

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 16:28:14 +08:00
co-authored by Claude Opus 4.7
commit 65fca60622
653 changed files with 135901 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
package srv_app
import (
"time"
"videoweb/pub/models/videoinformationmod"
"videoweb/pub/pubdef"
)
type AppCategoryInfo struct {
Id int64 `json:"id" bson:"_id,omitempty"` // Id
Name string `json:"name" bson:"name"` // 分类名称
Title string `json:"title" bson:"title"` // APP显示
Desc string `json:"desc" bson:"desc"` // 描述
Rank int64 `json:"rank" bson:"rank"` // 排序
}
type AppCreatorInfo struct {
Id int64 `json:"id" bson:"_id,omitempty"`
Name string `json:"name" bson:"name"` // 帖子标题
Sort int64 `json:"sort" bson:"sort"` // 排序
}
type AppTagInfo struct {
Id int64 `json:"id" bson:"_id,omitempty"`
Title string `json:"title" bson:"title"` // 帖子标题
Sort int64 `json:"sort" bson:"sort"` // 排序
}
// AppVideoInfoSyncReq APP数据同步请求
type AppVideoInfoSyncReq struct {
AppId int64 `json:"appId" bson:"appId"`
LastSyncTime time.Time `json:"lastSyncTime" bson:"lastSyncTime"` // 最后同步时间
PageSize int64 `json:"pageSize" bson:"pageSize"` // 页大小
}
type AppVideoCollectionSyncReq struct {
AppId int64 `json:"appId" bson:"appId"`
CollectionId []int64 `json:"collectionId" bson:"collectionId"`
}
type AppVideoCollectionSyncInfo struct {
CollectionID int64 `json:"collectionId" bson:"collectionId"` // 合集ID
VideoId int64 `json:"videoId" bson:"videoId"` // 视频ID
Rank int64 `json:"rank" bson:"rank"` // 排序
}
type AppVideoSyncInfo struct {
Id int64 `json:"id" bson:"_id,omitempty"`
Title string `json:"title" bson:"title"` // 帖子标题
MediaType videoinformationmod.MediaType `json:"mediaType" bson:"mediaType"` // 资源类型
AddedTime time.Time `json:"addedTime" bson:"addedTime"` // 帖子上架时间
CreatorId int64 `json:"creatorId" bson:"creatorId"` // 作者Id
CreatorName string `json:"creatorName" bson:"creatorName"` // 作者名称
Keyworld []string `bson:"keyworld,omitempty" json:"keyworld"` // 关键字
FirstTag string `bson:"firstTag,omitempty" json:"firstTag"` // 一级标签
SecondTags []string `bson:"secondTags,omitempty" json:"secondTags"` // 二级标签标签
CoverImg string `bson:"coverImg,omitempty" json:"coverImg"` // 封面
Desc string `bson:"desc,omitempty" json:"desc"` // 详细描述
Remark string `bson:"remark,omitempty" json:"remark"` // 备注
Nodes []videoinformationmod.Node `json:"nodes" bson:"nodes"` // 节点
Status pubdef.InformationStatus `json:"status" bson:"status"` // 帖子上架状态
Video videoinformationmod.VideoInfo `json:"video" bson:"video"` // 视频
CategoryIds []int64 `json:"categoryIds" bson:"categoryIds"` // 分类Id
Tags []int64 `json:"tags" bson:"tags"` // 标签
IsHot bool `json:"isHot" bson:"isHot"` // 是否热门
Sort int64 `json:"sort" bson:"sort"` // 排序
Real pubdef.Flow `json:"real" bson:"real"` // 真实流量
VideoCount int64 `json:"videoCount" bson:"videoCount"` // 合集视频数量
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"` // 更新时间
CreatedAt time.Time `json:"createdAt" bson:"createdAt"` // 创建时间
}
+124
View File
@@ -0,0 +1,124 @@
package srv_app
import (
"context"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
"videoweb/pub/common/log"
"videoweb/pub/common/srvdef"
"videoweb/pub/models/contenttagmod"
"videoweb/pub/models/videocategorymod"
"videoweb/pub/models/videocollectionmediamod"
"videoweb/pub/models/videocreatermod"
"videoweb/pub/models/videoinformationmod"
)
func AppVideoInfoSync(ctx context.Context, req *AppVideoInfoSyncReq) ([]*videoinformationmod.VideoInformation, *srvdef.SrvErr) {
filter := bson.M{
videoinformationmod.FN.VideoInformation.UpdatedAt: bson.M{
"$gt": req.LastSyncTime},
}
opts := &options.FindOptions{}
opts.SetSort(bson.M{videoinformationmod.FN.VideoInformation.UpdatedAt: 1})
opts.SetLimit(req.PageSize)
list, err := videoinformationmod.FindManyVideoInformations(ctx, filter, opts)
if err != nil {
log.Error("FindManyVideoInformations Failed", log.Any("err", err))
return nil, err
}
return list, err
}
func AppVideoCollectionSync(ctx context.Context, req *AppVideoCollectionSyncReq) ([]*AppVideoCollectionSyncInfo, *srvdef.SrvErr) {
filter := bson.M{
videocollectionmediamod.FN.VideoCollectionMediaModel.CollectionID: bson.M{"$in": req.CollectionId},
}
list, err := videocollectionmediamod.FindManyVideoCollectionMediaModels(ctx, filter)
if err != nil {
log.Error("FindManyVideoCollectionMediaModels Failed", log.Any("err", err))
return nil, err
}
rsl := make([]*AppVideoCollectionSyncInfo, 0)
for _, v := range list {
rsl = append(rsl, &AppVideoCollectionSyncInfo{
CollectionID: v.CollectionID,
VideoId: v.VideoId,
Rank: v.Rank,
})
}
return rsl, nil
}
func AppCategoryList(ctx context.Context) ([]AppCategoryInfo, *srvdef.SrvErr) {
filter := bson.M{
videocategorymod.FN.VideoCategory.Status: true,
}
opts := &options.FindOptions{}
opts.SetSort(bson.M{videocategorymod.FN.VideoCategory.Rank: -1})
list, err := videocategorymod.FindManyVideoCategorys(ctx, filter, opts)
if err != nil {
log.Error("FindManyVideoCategorys Failed", log.Any("err", err))
return nil, err
}
resp := make([]AppCategoryInfo, 0)
for _, v := range list {
resp = append(resp, AppCategoryInfo{
Id: v.Id,
Name: v.Name,
Title: v.Title,
Desc: v.Desc,
Rank: v.Rank,
})
}
return resp, err
}
func AppCreatorList(ctx context.Context) ([]AppCreatorInfo, *srvdef.SrvErr) {
filter := bson.M{
videocreatermod.FN.VideoCreaterInfo.Status: true,
}
opts := &options.FindOptions{}
opts.SetSort(bson.M{
videocreatermod.FN.VideoCreaterInfo.Sort: -1,
})
list, err := videocreatermod.FindManyVideoCreaterInfos(ctx, filter, opts)
if err != nil {
log.Error("FindManyVideoCreaterInfos Failed", log.Any("err", err))
return nil, err
}
resp := make([]AppCreatorInfo, 0)
for _, v := range list {
resp = append(resp, AppCreatorInfo{
Id: v.Id,
Name: v.Name,
Sort: v.Sort,
})
}
return resp, err
}
func AppTagList(ctx context.Context) ([]AppTagInfo, *srvdef.SrvErr) {
filter := bson.M{
contenttagmod.FN.ContentTag.Status: true,
contenttagmod.FN.ContentTag.Types: contenttagmod.ContentTagTypeVideo,
}
opts := &options.FindOptions{}
opts.SetSort(bson.D{
{Key: contenttagmod.FN.ContentTag.Rank, Value: -1},
{Key: contenttagmod.FN.ContentTag.Id, Value: -1},
})
list, err := contenttagmod.FindManyContentTag(ctx, filter, opts)
if err != nil {
log.Error("FindManyContentTag Failed", log.Any("err", err))
return nil, err
}
resp := make([]AppTagInfo, 0)
for _, v := range list {
resp = append(resp, AppTagInfo{
Id: v.Id,
Title: v.Name,
Sort: v.Rank,
})
}
return resp, err
}