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
+148
View File
@@ -0,0 +1,148 @@
package operatorlgmod
import (
"fmt"
"math"
"strings"
"time"
"91porn-server/common/db"
"91porn-server/common/log"
"91porn-server/models"
"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"
)
const table = models.WebOperatorLog
var mdb *db.MongoDB
func coll(t *db.MongoTool) *db.MongoTool {
if t == nil {
return mdb.Coll(table)
}
return t.Coll(table)
}
// initIndexAds 初始化索引
func initIndex() {
many := []mongo.IndexModel{
{
Keys: bson.D{{Key: "createdAt", Value: 1}},
},
{
Keys: bson.D{{Key: "manager", Value: 1}},
},
{
Keys: bson.D{{Key: "uri", Value: 1}},
},
{
Keys: bson.D{{Key: "position", Value: 1}},
},
}
if _, err := coll(nil).CreateIndex(many); err != nil {
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
}
}
// RecordOperation 记录操作日志
func RecordOperation(manager string, position string, operator string, content string, uri string) error {
record := WebOperatorLog{
Manager: manager,
Position: position,
Operator: operator,
Content: content,
URI: uri,
CreatedAt: time.Now(),
}
if _, err := coll(nil).InsertOne(&record); err != nil {
log.Error("RecordOperation error", log.Any("manager", manager), log.Any("position", position),
log.Any("operator", operator), log.Any("content", content), log.Any("url", uri), log.E(err))
return err
}
return nil
}
func backOperatorParam(param OperatorListReq) map[string]interface{} {
m := make(map[string]interface{})
if len(param.Manager) != 0 {
m["manager"] = param.Manager
}
if len(param.Position) != 0 {
m["position"] = param.Position
}
if len(param.URI) != 0 {
m["uri"] = param.URI
}
if param.Content != "" {
param.Content = strings.Trim(param.Content, " ")
m["content"] = bson.M{"$regex": primitive.Regex{
Pattern: param.Content,
Options: "i",
}}
}
if !param.End.IsZero() {
i := make(map[string]time.Time)
i["$gte"] = param.Start
i["$lt"] = param.End
m["createdAt"] = i
}
return m
}
// getTotalCnt 获取后台操作日志总数
func getTotalCnt(cond bson.M) (int64, error) {
total, err := coll(nil).Count(cond)
if err != nil {
log.Error("getTotalCnt", log.Any("cond", cond), log.E(err))
return 0, err
}
return total, nil
}
// getSkipSize 计算跳转
func getSkipSize(page, size uint64, cond bson.M) (uint64, uint64, int64, error) {
total, err := getTotalCnt(cond)
if err != nil {
return 0, 0, 0, err
}
totalpages := uint64(math.Ceil(float64(total) / float64(size)))
if page > totalpages {
page = totalpages
}
if page < 1 {
page = 1
}
return (page - 1) * size, totalpages, total, nil
}
// GetOperatorLog 获取操作日志
func GetOperatorLog(req OperatorListReq) ([]*WebOperatorLog, int64, error) {
cond := backOperatorParam(req)
sort := bson.D{{Key: "createdAt", Value: -1}}
skip, _, total, err := getSkipSize(req.PageNumber, req.PageSize, bson.M(cond))
if err != nil {
return nil, 0, err
}
opts := options.FindOptions{}
opts.SetSort(sort).SetSkip(int64(skip)).SetLimit(int64(req.PageSize))
var back []*WebOperatorLog
if err = coll(nil).Find(&back, bson.M(cond), &opts); err != nil {
log.Error("GetOperatorLog error", log.Any("req", req), log.E(err))
}
return back, total, err
}
// EditRemarks 更新备注
func EditRemarks(id primitive.ObjectID, remarks string) error {
cond := bson.M{"_id": id}
update := bson.M{"$set": bson.M{"remarks": remarks}}
if _, err := coll(nil).UpdateOne(cond, update); err != nil {
log.Error("EditRemarks error", log.Any("id", id), log.Any("remarks", remarks), log.E(err))
return err
}
return nil
}
+27
View File
@@ -0,0 +1,27 @@
package operatorlgmod
import (
"time"
"91porn-server/common/db"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// WebOperatorLog 后台操作日志
type WebOperatorLog struct {
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"`
Manager string `json:"manager" bson:"manager"` //管理员账号
Position string `json:"position" bson:"position"` //操作位置
Operator string `json:"operator" bson:"operator"` //操作动作
Content string `json:"content" bson:"content"` //操作内容
URI string `json:"uri" bson:"uri"` //操作uri
Remarks string `json:"remarks" bson:"remarks"` //备注
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
}
// Init 初始化索引
func Init() {
mdb = db.Init(table)
initIndex()
}
+32
View File
@@ -0,0 +1,32 @@
package operatorlgmod
import (
"time"
"91porn-server/models/commod"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// OperatorListReq 操作日志查询
type OperatorListReq struct {
Manager string `form:"manager" json:"manager"`
Position string `form:"position" json:"position"`
Content string `form:"content" json:"content" binding:"omitempty,min=2,max=100"`
URI string `form:"uri" json:"uri"`
Start time.Time `form:"start" json:"start"`
End time.Time `form:"end" json:"end"`
commod.Page
}
// OperatorListResp 操作日志查询应答
type OperatorListResp struct {
Infos []*WebOperatorLog `json:"infos"`
Total int64 `json:"total"`
}
// OperatorModifyReq 操作日志修改
type OperatorModifyReq struct {
ID primitive.ObjectID `json:"id"`
Remarks string `json:"remarks"`
}