You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
5.4 KiB
195 lines
5.4 KiB
package short
|
|
|
|
import (
|
|
"errors"
|
|
"live/app/lib"
|
|
"live/app/lib/recook"
|
|
"live/app/lib/tencent"
|
|
"live/app/logic/topic"
|
|
"live/app/logic/user"
|
|
"live/app/model/short"
|
|
topic2 "live/app/model/topic"
|
|
user2 "live/app/model/user"
|
|
"log"
|
|
)
|
|
|
|
type Short struct {
|
|
}
|
|
|
|
// @Title 短视频上传接口
|
|
// @Param userId uint true "会员id"
|
|
// @Param goodsId uint true "推荐商品id"
|
|
// @Param topicIc uint true "参与话题id 0=未参与话题"
|
|
// @Param fileId string true "腾讯云视频id"
|
|
// @Param content string true "发布内容"
|
|
func (s *Short) Publish(userId, goodsId, topicId uint, fileId, content string, loginId, token string) error {
|
|
info, err := tencent.Short.GetInfo(fileId)
|
|
if err != nil {
|
|
return errors.New("上传视频错误")
|
|
}
|
|
if len(info.Response.MediaInfoSet) == 0 {
|
|
return errors.New("上传视频错误")
|
|
}
|
|
fileInfo := info.Response.MediaInfoSet[0]
|
|
id := (&short.Short{}).Create(&short.Short{
|
|
UserId: userId,
|
|
GoodsId: goodsId,
|
|
TopicId: topicId,
|
|
Content: content,
|
|
FileId: fileId,
|
|
MediaUrl: fileInfo.BasicInfo.MediaUrl,
|
|
CoverUrl: fileInfo.BasicInfo.CoverUrl,
|
|
})
|
|
if id > 0 {
|
|
err := (&user.Trend{}).AddTrend(userId, id, user.TREND_TYPE_short, 1, loginId, token)
|
|
if err != nil {
|
|
log.Println("视频上传错误, err:", err)
|
|
}
|
|
// 话题统计
|
|
if topicId > 0 {
|
|
// 参与人数
|
|
(&topic.Substance{}).AddSubstance(userId, topicId)
|
|
|
|
// 添加内容
|
|
(&topic2.Topic{}).AddPartake(topicId)
|
|
}
|
|
return nil
|
|
}
|
|
return errors.New("网络异常")
|
|
}
|
|
|
|
type TopicInfoItem struct {
|
|
recook.ReplyUserItem
|
|
Content string `json:"content"`
|
|
CoverUrl string `json:"coverUrl"`
|
|
TrendId uint `json:"trendId"`
|
|
OriginId uint `json:"originId"`
|
|
TrendType int `json:"trendType"`
|
|
Praise uint `json:"praise"`
|
|
IsPraise int `json:"isPraise"`
|
|
Goods recook.TrendGoods `json:"goods"`
|
|
MediaUrl string `json:"mediaUrl"`
|
|
TopicId uint `json:"topicId"`
|
|
TopicName string `json:"topicName"`
|
|
}
|
|
|
|
func (s *Short) List(userId uint, page lib.Page) (result *[]TopicInfoItem, count int64, err error) {
|
|
result = &[]TopicInfoItem{}
|
|
shortModel := &short.Short{}
|
|
count = shortModel.GetListCount()
|
|
start := (page.GetPage() - 1) * page.GetLimit()
|
|
if count <= int64(start) {
|
|
// 没有数据,不需要查库
|
|
return
|
|
}
|
|
|
|
lists := shortModel.GetList(start, page.GetLimit())
|
|
|
|
err = s.formtList(userId, lists, result)
|
|
return
|
|
}
|
|
|
|
// @Title 短视频话题列表
|
|
func (s *Short) ListByTopicId(userId, topicId uint, page lib.Page) (result *[]TopicInfoItem, count int64, err error) {
|
|
result = &[]TopicInfoItem{}
|
|
shortModel := &short.Short{}
|
|
count = shortModel.GetListCountByTopicId(topicId)
|
|
start := (page.GetPage() - 1) * page.GetLimit()
|
|
if count <= int64(start) {
|
|
// 没有数据,不需要查库
|
|
return
|
|
}
|
|
|
|
lists := shortModel.GetListByTopicId(topicId, start, page.GetLimit())
|
|
err = s.formtList(userId, lists, result)
|
|
return
|
|
}
|
|
|
|
// @Title 列表数据序列号
|
|
func (s *Short) formtList(userId uint, lists []short.Short, result *[]TopicInfoItem) (err error) {
|
|
userIds := []uint{}
|
|
shortIds := []uint{}
|
|
goodsIds := []uint{}
|
|
topicIds := []uint{}
|
|
for _, list := range lists {
|
|
userIds = append(userIds, list.UserId)
|
|
shortIds = append(shortIds, list.Id)
|
|
goodsIds = append(goodsIds, list.GoodsId)
|
|
if list.TopicId > 0 {
|
|
topicIds = append(topicIds, list.TopicId)
|
|
}
|
|
}
|
|
|
|
// 获取会员信息
|
|
users, err := recook.User.GetUsers(userIds)
|
|
if err != nil {
|
|
return
|
|
}
|
|
userMap := map[uint]recook.ReplyUserItem{}
|
|
for _, userItem := range *users {
|
|
userMap[userItem.UserId] = userItem
|
|
}
|
|
|
|
// 获取话题信息
|
|
topicMap := map[uint]topic2.Topic{}
|
|
if len(topicIds) > 0 {
|
|
topics := (&topic2.Topic{}).GetlistByIds(topicIds)
|
|
for _, item := range topics {
|
|
topicMap[item.Id] = item
|
|
}
|
|
}
|
|
|
|
// 获取会员动态信息
|
|
trendLists := recook.Trend.Infos(shortIds, user.TREND_TYPE_short)
|
|
trendIds := []uint{}
|
|
trendMap := map[uint]recook.TrendInfo{}
|
|
for _, trendInfo := range *trendLists {
|
|
trendIds = append(trendIds, trendInfo.Id)
|
|
trendMap[trendInfo.OriginId] = trendInfo
|
|
}
|
|
|
|
// 获取商品信息
|
|
goodsInfos := recook.Trend.GetGoods(goodsIds)
|
|
|
|
// 获取动态统计信息
|
|
userTrendDataModel := &user2.UserTrendData{}
|
|
userTrendDataLists := userTrendDataModel.GetListByTrendIds(trendIds)
|
|
userTrendDataMap := map[uint]user2.UserTrendData{}
|
|
for _, item := range userTrendDataLists {
|
|
userTrendDataMap[item.TrendId] = item
|
|
}
|
|
|
|
// 当前会员是否赞过当前列表的数据
|
|
userPraiseMap := map[uint]user2.UserTrendPraise{}
|
|
if userId > 0 {
|
|
userTrendPraise := &user2.UserTrendPraise{}
|
|
userPraises := userTrendPraise.GetPraiseByUserIdAndTrendIds(userId, trendIds)
|
|
for _, praise := range userPraises {
|
|
userPraiseMap[praise.TrendId] = praise
|
|
}
|
|
}
|
|
|
|
for _, list := range lists {
|
|
trendInfo := trendMap[list.Id]
|
|
hasPraise := 0
|
|
if _, ok := userPraiseMap[trendInfo.Id]; ok {
|
|
hasPraise = 1
|
|
}
|
|
*result = append(*result, TopicInfoItem{
|
|
ReplyUserItem: userMap[list.UserId],
|
|
Content: list.Content,
|
|
CoverUrl: list.CoverUrl,
|
|
TrendId: trendInfo.Id,
|
|
OriginId: trendInfo.OriginId,
|
|
TrendType: trendInfo.TrendType,
|
|
Praise: userTrendDataMap[trendInfo.Id].Praise,
|
|
IsPraise: hasPraise,
|
|
Goods: goodsInfos[list.GoodsId],
|
|
MediaUrl: list.MediaUrl,
|
|
TopicId: list.TopicId,
|
|
TopicName: topicMap[list.TopicId].Title,
|
|
})
|
|
}
|
|
return
|
|
}
|