Initial commit: web_hghl_server
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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"` // 创建时间
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user