@@ -0,0 +1,144 @@
|
||||
package faqmod
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"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"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
// CateRes 列表
|
||||
type CateRes struct {
|
||||
Category string `json:"category" bson:"_id"`
|
||||
}
|
||||
|
||||
var mdb *db.MongoDB
|
||||
|
||||
const table = models.FaqTable
|
||||
|
||||
func faqColl(t *db.MongoTool) *db.MongoTool {
|
||||
if t == nil {
|
||||
return mdb.Coll(table)
|
||||
}
|
||||
return t.Coll(table)
|
||||
}
|
||||
|
||||
func initFaqIndex() {
|
||||
many := []mongo.IndexModel{ //batch set indexes //value is the type 1 or -1
|
||||
{
|
||||
Keys: bson.D{{Key: "category", Value: 1}},
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{Key: "query", Value: 1}},
|
||||
Options: options.Index().SetUnique(true).SetPartialFilterExpression(bson.M{"query": bson.M{"$exists": true}}),
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{Key: "answer", Value: 1}},
|
||||
},
|
||||
}
|
||||
if _, err := faqColl(nil).CreateIndex(many); err != nil {
|
||||
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
|
||||
}
|
||||
}
|
||||
|
||||
// FaqInsert 新增常见问题
|
||||
func FaqInsert(f Faq) (code stderr.Code, err error) {
|
||||
f.CreatedAt = time.Now()
|
||||
f.UpdatedAt = time.Now()
|
||||
if _, err = faqColl(nil).InsertOne(f); err != nil {
|
||||
if strings.Contains(err.Error(), "E11000 duplicate key") {
|
||||
code = stderr.ErrDbInputExist
|
||||
} else {
|
||||
code = stderr.ErrDbInsertError
|
||||
}
|
||||
log.ZapLog.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FaqInsert", "Faq", "InsertOne", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// FaqUpdate 修改常见问题
|
||||
func FaqUpdate(id primitive.ObjectID, doc FaqUpdateDoc) (err error) {
|
||||
doc.UpdatedAt = time.Now()
|
||||
update, _ := common.ToBsonM(doc)
|
||||
if _, err = faqColl(nil).UpdateOne(bson.M{"_id": id}, bson.M{
|
||||
"$set": update,
|
||||
}); err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FaqUpdate", "Faq", "UpdateOne", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// FaqDelete 批量删除常见问题
|
||||
func FaqDelete(ids []primitive.ObjectID) (err error) {
|
||||
if _, err = faqColl(nil).DeleteMany(bson.M{"_id": bson.M{"$in": ids}}); err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FaqDelete", "Faq", "DeleteMany", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// FaqCateList 常见问题列表
|
||||
func FaqCateList() (data []CateRes, err error) {
|
||||
query := []bson.M{bson.M{"$group": bson.M{"_id": "$category"}}}
|
||||
if err = faqColl(nil).Aggregate(&data, query); err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FaqAggregate", "Faq", "Aggregate", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func faqCount(filter bson.M) (cnt int64, err error) {
|
||||
cnt, err = faqColl(nil).Count(filter)
|
||||
if err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FqaListForSearch", "Faq", "Find", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// FqaListForSearch 根据搜索条件 获取问题列表
|
||||
func FaqListForSearch(category string, keywords string, s commod.StdQuery) (data []Faq, total int64, err error) {
|
||||
query := bson.M{}
|
||||
q1 := bson.M{"query": bson.M{"$regex": keywords, "$options": "i"}}
|
||||
q2 := bson.M{"answer": bson.M{"$regex": keywords, "$options": "i"}}
|
||||
q3 := bson.M{"category": bson.M{"$regex": keywords, "$options": "i"}}
|
||||
if category != "" && keywords != "" {
|
||||
query = bson.M{"$and": []bson.M{bson.M{"category": category}, bson.M{"$or": []bson.M{q1, q2}}}}
|
||||
} else if keywords != "" {
|
||||
query = bson.M{"$or": []bson.M{q1, q2, q3}}
|
||||
} else if category != "" {
|
||||
query = bson.M{"category": category}
|
||||
}
|
||||
total, _ = faqCount(query)
|
||||
s.Order = &[]commod.OrderBy{{Key: "sortCode", Desc: true}, {Key: "updatedAt", Desc: true}}
|
||||
if err = faqColl(nil).Find(&data, query, commod.ConvertToListQuery(s)); err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("FaqListForSearch FqaListForSearch Faq Find err: %v", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// FaqList 根据类别条件 获取问题列表
|
||||
func FaqList(cate string, status bool, s commod.StdQuery) (data []Faq, total int64, err error) {
|
||||
query := bson.M{"category": cate, "status": status}
|
||||
total, _ = faqCount(query)
|
||||
s.Order = &[]commod.OrderBy{{Key: "sortCode", Desc: true}, {Key: "updatedAt", Desc: true}}
|
||||
if err = faqColl(nil).Find(&data, query, commod.ConvertToListQuery(s)); err != nil {
|
||||
log.ZapLog.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FqaListForSearch", "Faq", "Find", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package faqmod
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"91porn-server/common/db"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
// Faq Faq 常见问题
|
||||
type Faq struct {
|
||||
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"`
|
||||
Category string `json:"category" bson:"category" binding:"required"`
|
||||
Query string `json:"query" bson:"query" binding:"required"`
|
||||
Answer string `json:"answer" bson:"answer" binding:"required"`
|
||||
Status bool `json:"status" bson:"status"` //状态 是否开启 true 是 false 否
|
||||
SortCode int64 `json:"sortCode" bson:"sortCode"` //排序号
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
|
||||
}
|
||||
|
||||
// FaqListRes 列表
|
||||
type FaqListRes struct {
|
||||
Total int64 `json:"total" bson:"total"`
|
||||
List []Faq `json:"list" bson:"list"`
|
||||
}
|
||||
|
||||
// FaqUpdateDoc Faq 常见问题
|
||||
type FaqUpdateDoc struct {
|
||||
Category *string `json:"category" bson:"category,omitempty"`
|
||||
Query *string `json:"query" bson:"query,omitempty"`
|
||||
Answer *string `json:"answer" bson:"answer,omitempty"`
|
||||
Status *bool `json:"status" bson:"status,omitempty"` //状态 ,是否开启 true 是 false 否
|
||||
SortCode *int64 `json:"sortCode" bson:"sortCode,omitempty"` //排序号
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt,omitempty"`
|
||||
}
|
||||
|
||||
func Init() {
|
||||
mdb = db.Init(table)
|
||||
initFaqIndex()
|
||||
}
|
||||
Reference in New Issue
Block a user