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.
94 lines
2.1 KiB
94 lines
2.1 KiB
package topic
|
|
|
|
import (
|
|
"errors"
|
|
"live/app/lib"
|
|
"live/app/lib/aliyun"
|
|
"live/app/lib/config"
|
|
"live/app/model/topic"
|
|
)
|
|
|
|
type Topic struct {
|
|
}
|
|
|
|
// @Title 根据关键字获取话题列表
|
|
func (t *Topic) List(keyword string, page lib.Page) (result *[]topic.Topic, count int64) {
|
|
result = &[]topic.Topic{}
|
|
|
|
topicModel := &topic.Topic{}
|
|
start := (page.GetPage() - 1) * page.GetLimit()
|
|
count = topicModel.GetlistCount(keyword)
|
|
if count <= int64(start) {
|
|
// 没有数据,不需要查库
|
|
return
|
|
}
|
|
*result = topicModel.Getlist(keyword, start, page.GetLimit())
|
|
return
|
|
}
|
|
|
|
// @Title 添加话题
|
|
func (t *Topic) Add(title string) (uint, error) {
|
|
topicModel := &topic.Topic{}
|
|
topicInfo := topicModel.GetByTitle(title)
|
|
if topicInfo.Id > 0 {
|
|
return topicInfo.Id, nil
|
|
}
|
|
text, err := aliyun.Text.CheckText(title)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
if len(text.Politics) > 0 || len(text.Contraband) > 0 || len(text.Salacity) > 0 || len(text.Abuse) > 0 {
|
|
return 0, errors.New("包含敏感词汇")
|
|
}
|
|
data := topic.Topic{
|
|
Title: title,
|
|
}
|
|
topicModel.Create(&data)
|
|
if data.Id <= 0 {
|
|
return 0, errors.New("网络异常")
|
|
}
|
|
return data.Id, nil
|
|
}
|
|
|
|
// @Title 获取热门话题
|
|
func (t *Topic) Hot() []topic.Topic {
|
|
topicModel := &topic.Topic{}
|
|
return topicModel.GetHotlist(config.Config.Section("topic").Key("hotCount").MustInt(10))
|
|
}
|
|
|
|
// @Title 根据ids获取列表
|
|
func (t *Topic) GetListByIds(topicIds []uint) (result *[]topic.Topic) {
|
|
result = &[]topic.Topic{}
|
|
if len(topicIds) == 0 {
|
|
return
|
|
}
|
|
|
|
topicModel := &topic.Topic{}
|
|
*result = topicModel.GetlistByIds(topicIds)
|
|
return
|
|
}
|
|
|
|
type replyTopicInfo struct {
|
|
topic.Topic
|
|
IsFollow int `json:"isFollow"`
|
|
}
|
|
|
|
// @Title 根据id获取单条信息
|
|
func (t *Topic) GetInfo(userId, topicId uint) (result *replyTopicInfo) {
|
|
result = &replyTopicInfo{}
|
|
if topicId <= 0 {
|
|
return
|
|
}
|
|
topicModel := &topic.Topic{}
|
|
result.Topic = topicModel.GetById(topicId)
|
|
if result.Id > 0 {
|
|
// 获取关注相关
|
|
topicFollow := &topic.TopicFollow{}
|
|
followInfo := topicFollow.GetByUserIdAndTopicId(userId, topicId)
|
|
if followInfo.Id > 0 && followInfo.IsDel == 0 {
|
|
result.IsFollow = 1
|
|
}
|
|
}
|
|
return
|
|
}
|