项目文件夹

文件
wehub-resource-sync a21fa4e11b
Go / Build (push) Failing after 1s
chore: import upstream snapshot with attribution
2026-07-13 12:30:21 +08:00

258 行
6.0 KiB
Go

package models
import (
"github.com/phachon/mm-wiki/app/utils"
"github.com/snail007/go-activerecord/mysql"
"time"
)
const (
Follow_Type_Doc = 1
Follow_Type_User = 2
)
const Table_Follow_Name = "follow"
type Follow struct {
}
var FollowModel = Follow{}
// get follow by follow_id
func (f *Follow) GetFollowByFollowId(followId string) (follow map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From(Table_Follow_Name).Where(map[string]interface{}{
"follow_id": followId,
}))
if err != nil {
return
}
follow = rs.Row()
return
}
// get follows by user_id and type
func (f *Follow) GetFollowsByUserIdAndType(userId string, followType int) (follows []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From(Table_Follow_Name).Where(map[string]interface{}{
"user_id": userId,
"type": followType,
}))
if err != nil {
return
}
follows = rs.Rows()
return
}
// get follows by user_id and type limit
func (f *Follow) GetFollowsByUserIdTypeAndLimit(userId string, followType int, limit int, number int) (follows []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From(Table_Follow_Name).Where(map[string]interface{}{
"user_id": userId,
"type": followType,
}).Limit(limit, number).OrderBy("follow_id", "DESC"))
if err != nil {
return
}
follows = rs.Rows()
return
}
// get followed follows
func (f *Follow) GetFollowsByObjectIdAndType(objectId string, followType int) (follows []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From(Table_Follow_Name).Where(map[string]interface{}{
"object_id": objectId,
"type": followType,
}))
if err != nil {
return
}
follows = rs.Rows()
return
}
// get followed follow
func (f *Follow) GetFollowByUserIdAndTypeAndObjectId(userId string, followType int, objectId string) (follow map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From(Table_Follow_Name).Where(map[string]interface{}{
"user_id": userId,
"type": followType,
"object_id": objectId,
}).Limit(0, 1))
if err != nil {
return
}
follow = rs.Row()
return
}
// delete follow by follow_id
func (f *Follow) Delete(followId string) (err error) {
db := G.DB()
_, err = db.Exec(db.AR().Delete(Table_Follow_Name, map[string]interface{}{
"follow_id": followId,
}))
if err != nil {
return
}
return
}
// delete follow by type and object_id
func (f *Follow) DeleteByObjectIdType(objectId string, followType string) (err error) {
db := G.DB()
_, err = db.Exec(db.AR().Delete(Table_Follow_Name, map[string]interface{}{
"type": followType,
"object_id": objectId,
}))
if err != nil {
return
}
return
}
// insert follow user
func (f *Follow) Insert(userId string, fType int, objectId string) (id int64, err error) {
followValue := map[string]interface{}{
"user_id": userId,
"type": fType,
"object_id": objectId,
"create_time": time.Now().Unix(),
}
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert(Table_Follow_Name, followValue))
if err != nil {
return
}
id = rs.LastInsertId
return
}
// get all follows
func (f *Follow) GetFollows() (follows []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(
db.AR().From(Table_Follow_Name))
if err != nil {
return
}
follows = rs.Rows()
return
}
// get follow count
func (f *Follow) CountFollows() (count int64, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(
db.AR().
Select("count(*) as total").
From(Table_Follow_Name))
if err != nil {
return
}
count = utils.Convert.StringToInt64(rs.Value("total"))
return
}
// get follow count
func (f *Follow) CountFollowsByUserIdAndType(userId string, followType int) (count int64, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").From(Table_Follow_Name).Where(map[string]interface{}{
"user_id": userId,
"type": followType,
}))
if err != nil {
return
}
count = utils.Convert.StringToInt64(rs.Value("total"))
return
}
// get follows by many follow_id
func (f *Follow) GetFollowsByFollowIds(followIds []string) (follows []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From(Table_Follow_Name).Where(map[string]interface{}{
"follow_id": followIds,
}))
if err != nil {
return
}
follows = rs.Rows()
return
}
// create auto follow document
func (f *Follow) CreateAutoFollowDocument(userId string, documentId string) (id int64, err error) {
autoFollowConf := ConfigModel.GetConfigValueByKey(ConfigKeyAutoFollowdoc, "0")
if autoFollowConf == "1" {
follow, err := f.GetFollowByUserIdAndTypeAndObjectId(userId, Follow_Type_Doc, documentId)
if err != nil {
return 0, err
}
if len(follow) == 0 {
return f.Insert(userId, Follow_Type_Doc, documentId)
}
}
return 0, nil
}
func (f *Follow) FollowDocument(userId string, documentId string) (id int64, err error) {
follow, err := f.GetFollowByUserIdAndTypeAndObjectId(userId, Follow_Type_Doc, documentId)
if err != nil {
return 0, err
}
if len(follow) == 0 {
return f.Insert(userId, Follow_Type_Doc, documentId)
}
return 0, nil
}
func (f *Follow) GetFollowGroupUserId(fType int) (collects []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
sql := db.AR().Select("user_id, count('user_id') as total").
From(Table_Follow_Name).Where(map[string]interface{}{
"type": fType,
}).GroupBy("user_id")
rs, err = db.Query(sql)
if err != nil {
return
}
collects = rs.Rows()
return
}
func (f *Follow) GetFansUserGroupUserId() (collects []map[string]string, err error) {
db := G.DB()
var rs *mysql.ResultSet
sql := db.AR().Select("object_id, count('object_id') as total").
From(Table_Follow_Name).Where(map[string]interface{}{
"type": Follow_Type_User,
}).GroupBy("object_id")
rs, err = db.Query(sql)
if err != nil {
return
}
collects = rs.Rows()
return
}