Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+127
View File
@@ -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
}
+43
View File
@@ -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()
}
+18
View File
@@ -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"`
}