mirror of https://github.com/casbin/casnode.git
267 lines
7.4 KiB
Go
267 lines
7.4 KiB
Go
// Copyright 2020 The casbin Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package object
|
|
|
|
import (
|
|
"github.com/casbin/casnode/util"
|
|
"github.com/casdoor/casdoor-go-sdk/auth"
|
|
)
|
|
|
|
type Favorites struct {
|
|
Id int `xorm:"int notnull pk autoincr" json:"id"`
|
|
FavoritesType string `xorm:"varchar(100) index" json:"favoritesType"`
|
|
ObjectId string `xorm:"varchar(100) index" json:"objectId"`
|
|
CreatedTime string `xorm:"varchar(40)" json:"createdTime"`
|
|
MemberId string `xorm:"varchar(100) index" json:"memberId"`
|
|
}
|
|
|
|
const (
|
|
FavorTopic = "favor_topic"
|
|
FollowUser = "follow_user"
|
|
FavorNode = "favor_node"
|
|
SubscribeTopic = "subscribe_topic"
|
|
)
|
|
|
|
func IsFavoritesExist(Type string) bool {
|
|
// check the if the string is in the enum
|
|
if Type == FavorTopic || Type == FollowUser || Type == FavorNode || Type == SubscribeTopic {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func AddFavorites(favorite *Favorites) bool {
|
|
affected, err := adapter.Engine.Insert(favorite)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return affected != 0
|
|
}
|
|
|
|
func AddMemberFavorites(memberId string, favoritesType string, objectId string) bool {
|
|
status := GetFavoritesStatus(memberId, favoritesType, objectId)
|
|
if status == true {
|
|
return true
|
|
}
|
|
favorite := Favorites{
|
|
FavoritesType: favoritesType,
|
|
ObjectId: objectId,
|
|
CreatedTime: util.GetCurrentTime(),
|
|
MemberId: memberId,
|
|
}
|
|
return AddFavorites(&favorite)
|
|
}
|
|
|
|
func DeleteFavorites(memberId string, objectId string, favoritesType string) bool {
|
|
affected, err := adapter.Engine.Where("favorites_type = ?", favoritesType).And("object_id = ?", objectId).And("member_id = ?", memberId).Delete(&Favorites{})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return affected != 0
|
|
}
|
|
|
|
func GetFavoritesCount() int {
|
|
count, err := adapter.Engine.Count(&Favorites{})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return int(count)
|
|
}
|
|
|
|
func GetFavoritesStatus(memberId string, objectId string, favoritesType string) bool {
|
|
node := new(Favorites)
|
|
total, err := adapter.Engine.Where("favorites_type = ?", favoritesType).And("object_id = ?", objectId).And("member_id = ?", memberId).Count(node)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return total != 0
|
|
}
|
|
|
|
func GetTopicsFromFavorites(memberId string, limit int, offset int, favoritesType string) []*TopicWithAvatar {
|
|
favorites := []*Favorites{}
|
|
err := adapter.Engine.Where("member_id = ?", memberId).And("favorites_type = ?", favoritesType).Limit(limit, offset).Find(&favorites)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
topics := []*TopicWithAvatar{}
|
|
for _, v := range favorites {
|
|
topicId := util.ParseInt(v.ObjectId)
|
|
temp := GetTopicWithAvatar(topicId, nil)
|
|
topics = append(topics, temp)
|
|
}
|
|
|
|
return topics
|
|
}
|
|
|
|
func GetMembersFromFavorites(objectId string, favoritesType string) []*auth.User {
|
|
favorites := []*Favorites{}
|
|
err := adapter.Engine.Where("object_id = ?", objectId).And("favorites_type = ?", favoritesType).Find(&favorites)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
members := []*auth.User{}
|
|
for _, v := range favorites {
|
|
memberId := v.MemberId
|
|
temp := GetUser(memberId)
|
|
members = append(members, temp)
|
|
}
|
|
|
|
return members
|
|
}
|
|
|
|
func GetRepliesFromFavorites(memberId string, limit int, offset int, favoritesType string) []*ReplyWithAvatar {
|
|
favorites := []*Favorites{}
|
|
err := adapter.Engine.Where("member_id = ?", memberId).And("favorites_type = ?", favoritesType).Limit(limit, offset).Find(&favorites)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
replies := []*ReplyWithAvatar{}
|
|
for _, v := range favorites {
|
|
topicId := util.ParseInt(v.ObjectId)
|
|
temp, _ := GetReplies(topicId, nil, limit, offset)
|
|
for _, v := range temp {
|
|
replies = append(replies, v)
|
|
}
|
|
}
|
|
|
|
return replies
|
|
}
|
|
|
|
func GetFollowingNewAction(memberId string, limit int, offset int) []*TopicWithAvatar {
|
|
var topics []*TopicWithAvatar
|
|
|
|
err := adapter.Engine.Table("topic").
|
|
Join("INNER", "favorites", "favorites.object_id = topic.author").
|
|
Where("favorites.member_id = ?", memberId).And("favorites.favorites_type = ?", FollowUser).
|
|
Desc("topic.id").
|
|
Cols("topic.id, topic.author, topic.node_id, topic.node_name, topic.title, topic.created_time, topic.last_reply_user, topic.last_Reply_time, topic.reply_count, topic.favorite_count, topic.deleted, topic.home_page_top_time, topic.tab_top_time, topic.node_top_time").
|
|
Omit("topic.content").
|
|
Limit(limit, offset).Find(&topics)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
for _, topic := range topics {
|
|
topic.Avatar = getUserAvatar(topic.Author)
|
|
}
|
|
|
|
return topics
|
|
}
|
|
|
|
func GetNodesFromFavorites(memberId string, limit int, offset int) []*NodeFavoritesRes {
|
|
favorites := []*Favorites{}
|
|
err := adapter.Engine.Where("member_id = ?", memberId).And("favorites_type = ?", FavorNode).Limit(limit, offset).Find(&favorites)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
nodes := []*NodeFavoritesRes{}
|
|
for _, v := range favorites {
|
|
var temp NodeFavoritesRes
|
|
temp.NodeInfo = GetNode(v.ObjectId)
|
|
temp.TopicNum = GetNodeTopicNum(v.ObjectId)
|
|
nodes = append(nodes, &temp)
|
|
}
|
|
|
|
return nodes
|
|
}
|
|
|
|
func GetNodeFavoritesNum(id string) int {
|
|
node := new(Favorites)
|
|
total, err := adapter.Engine.Where("favorites_type = ?", FavorNode).And("object_id = ?", id).Count(node)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return int(total)
|
|
}
|
|
|
|
func GetTopicFavoritesNum(id string) int {
|
|
topic := new(Favorites)
|
|
total, err := adapter.Engine.Where("favorites_type = ?", FavorTopic).And("object_id = ?", id).Count(topic)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return int(total)
|
|
}
|
|
|
|
func GetTopicSubscribeNum(id string) int {
|
|
topic := new(Favorites)
|
|
total, err := adapter.Engine.Where("favorites_type = ?", SubscribeTopic).And("object_id = ?", id).Count(topic)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return int(total)
|
|
}
|
|
|
|
func GetFollowingNum(id string) int {
|
|
member := new(Favorites)
|
|
total, err := adapter.Engine.Where("favorites_type = ?", FollowUser).And("member_id = ?", id).Count(member)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return int(total)
|
|
}
|
|
|
|
func GetFavoritesNum(favoritesType string, memberId string) int {
|
|
var total int64
|
|
var err error
|
|
|
|
switch favoritesType {
|
|
case FavorTopic:
|
|
topic := new(Favorites)
|
|
total, err = adapter.Engine.Where("favorites_type = ?", FavorTopic).And("member_id = ?", memberId).Count(topic)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
break
|
|
case FollowUser:
|
|
topic := new(Favorites)
|
|
total, err = adapter.Engine.Table("topic").Join("INNER", "favorites", "topic.author = favorites.object_id").Where("favorites.member_id = ?", memberId).And("favorites.favorites_type = ?", FollowUser).Count(topic)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
break
|
|
case FavorNode:
|
|
node := new(Favorites)
|
|
total, err = adapter.Engine.Where("favorites_type = ?", FavorNode).And("member_id = ?", memberId).Count(node)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
break
|
|
case SubscribeTopic:
|
|
topic := new(Favorites)
|
|
total, err = adapter.Engine.Where("favorites_type = ?", SubscribeTopic).And("member_id = ?", memberId).Count(topic)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
break
|
|
default:
|
|
return 0
|
|
}
|
|
|
|
return int(total)
|
|
}
|