@@ -0,0 +1,127 @@
|
||||
package feedbackmod
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"91porn-server/common"
|
||||
"91porn-server/common/db"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/common/stderr"
|
||||
"91porn-server/models"
|
||||
"91porn-server/models/commod"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
var mdb *db.MongoDB
|
||||
|
||||
const table = models.FeedBack
|
||||
|
||||
func coll(t *db.MongoTool) *db.MongoTool {
|
||||
if t == nil {
|
||||
return mdb.Coll(table)
|
||||
}
|
||||
return t.Coll(table)
|
||||
}
|
||||
|
||||
func initIndex() {
|
||||
many := []mongo.IndexModel{ //batch set indexes //value is the type 1 or -1
|
||||
{
|
||||
Keys: bson.D{{Key: "uid", Value: 1}},
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{Key: "createdAt", Value: 1}},
|
||||
},
|
||||
}
|
||||
if _, err := coll(nil).CreateIndex(many); err != nil {
|
||||
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
|
||||
}
|
||||
}
|
||||
|
||||
// FeedBackInsert 新增反馈意见
|
||||
func FeedBackInsert(f FeedBack) (code stderr.Code, err error) {
|
||||
f.CreatedAt = time.Now()
|
||||
f.UpdatedAt = time.Now()
|
||||
if _, err = coll(nil).InsertOne(f); err != nil {
|
||||
code = stderr.ErrDbInsertError
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FeedBackInsert", table, "InsertOne", err))
|
||||
return
|
||||
}
|
||||
return stderr.Success, nil
|
||||
}
|
||||
|
||||
// FeedBackUpdate 修改反馈意见
|
||||
func FeedBackUpdate(id primitive.ObjectID, doc FeedBackUpdateDoc) (err error) {
|
||||
doc.UpdatedAt = time.Now()
|
||||
if _, err = coll(nil).UpdateOne(bson.M{"_id": id}, bson.M{
|
||||
"$set": doc,
|
||||
}); err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FeedBackUpdate", table, "UpdateOne", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// FeedBackDelete 批量删除反馈意见
|
||||
func FeedBackDelete(ids []primitive.ObjectID) (err error) {
|
||||
if _, err = coll(nil).DeleteMany(bson.M{"_id": bson.M{"$in": ids}}); err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FeedBackDelete", table, "DeleteMany", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func GetFeedBackList(size, page uint64, uid uint64) (data []FeedBack, hasNext bool, err error) {
|
||||
var feedBack []FeedBack
|
||||
std := commod.StdQuery{
|
||||
Page: &commod.PageBy{
|
||||
CheckNext: true,
|
||||
Num: page,
|
||||
Size: size,
|
||||
},
|
||||
Order: &[]commod.OrderBy{{Key: "_id", Desc: true}},
|
||||
}
|
||||
if err = coll(nil).Find(&feedBack, bson.M{"uid": uid}, commod.ConvertToListQuery(std)); err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "List", table, "Find", err))
|
||||
return
|
||||
}
|
||||
|
||||
if uint64(len(feedBack)) > size {
|
||||
hasNext = true
|
||||
feedBack = feedBack[:size]
|
||||
}
|
||||
|
||||
return feedBack, hasNext, nil
|
||||
}
|
||||
|
||||
// FeedBackList 根据类别条件 获反馈列表
|
||||
func FeedBackList(param ListParam) (data WebResp, err error) {
|
||||
var feedBack []FeedBack
|
||||
std := commod.StdQuery{
|
||||
Page: &commod.PageBy{
|
||||
CheckNext: false,
|
||||
Num: param.PageNumber,
|
||||
Size: param.PageSize,
|
||||
},
|
||||
Order: &[]commod.OrderBy{{Key: "updatedAt", Desc: true}},
|
||||
}
|
||||
query, _ := common.ToBsonM(param.ListFilter)
|
||||
if param.Content != "" {
|
||||
query["content"] = bson.M{"$regex": param.Content, "$options": "i"}
|
||||
}
|
||||
total, err := coll(nil).Count(query)
|
||||
if err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "List", table, "Count", err))
|
||||
return
|
||||
}
|
||||
if err = coll(nil).Find(&feedBack, query, commod.ConvertToListQuery(std)); err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "List", table, "Find", err))
|
||||
return
|
||||
}
|
||||
data.List = feedBack
|
||||
data.Total = total
|
||||
return data, nil
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package feedbackmod
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"91porn-server/common/db"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
// 反馈意见
|
||||
type FeedBack struct {
|
||||
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"`
|
||||
UID uint64 `json:"uid" bson:"uid" binding:"required"`
|
||||
Version string `json:"version" bson:"version"`
|
||||
DevType string `json:"devType" bson:"devType"`
|
||||
Content ContentInfo `json:"content" bson:"content" binding:"required"`
|
||||
Replay string `json:"replay" bson:"replay"`
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
|
||||
}
|
||||
|
||||
// ContentInfo 反馈内容组成部分
|
||||
type ContentInfo struct {
|
||||
CateInfo string `json:"cateInfo" bson:"cateInfo"` // 问题分类
|
||||
Desc string `json:"desc" bson:"desc"` // 描述
|
||||
Region string `json:"region" bson:"region"` // 地区
|
||||
DevInfo string `json:"devInfo" bson:"devInfo"` // 设备信息
|
||||
ISP string `json:"ISP" bson:"ISP"` // 运营商
|
||||
Contact string `json:"contact"` // 联系方式
|
||||
Images []string `json:"images"` // 图片信息
|
||||
}
|
||||
|
||||
// FeedBackUpdateDoc 反馈意见编辑
|
||||
type FeedBackUpdateDoc struct {
|
||||
Replay *string `json:"replay" bson:"replay,omitempty"`
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt,omitempty"`
|
||||
}
|
||||
|
||||
func Init() {
|
||||
mdb = db.Init(table)
|
||||
initIndex()
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package feedbackmod
|
||||
|
||||
import "91porn-server/models/commod"
|
||||
|
||||
type ListParam struct {
|
||||
ListFilter
|
||||
commod.Page
|
||||
}
|
||||
|
||||
type ListFilter struct {
|
||||
UID uint64 `form:"uid,omitempty" json:"uid,omitempty" bson:"uid,omitempty"`
|
||||
Content string `form:"content,omitempty" json:"content,omitempty" bson:"content,omitempty"`
|
||||
}
|
||||
|
||||
type WebResp struct {
|
||||
Total int64 `json:"total"`
|
||||
List interface{} `json:"list"`
|
||||
}
|
||||
Reference in New Issue
Block a user