@@ -0,0 +1,33 @@
|
||||
package sessionmod
|
||||
|
||||
import (
|
||||
"91porn-server/models/commod"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
// QueryCond 查询列表
|
||||
type QueryCond struct {
|
||||
commod.Page
|
||||
}
|
||||
|
||||
// QuerySessionIdCond 查询会话id
|
||||
type QuerySessionIdCond struct {
|
||||
TakeUid uint64 `json:"takeUid" form:"takeUid"` // 接收者uid
|
||||
}
|
||||
|
||||
// SessionApp 会话app返回实体
|
||||
type SessionApp struct {
|
||||
ID primitive.ObjectID `json:"id" bson:"_id"` // id
|
||||
SendUid uint64 `json:"sendUid" bson:"sendUid"` // 发送者uid
|
||||
TakeUid uint64 `json:"takeUid" bson:"takeUid"` // 接收者uid
|
||||
UserId uint64 `json:"userId" bson:"userId"` // 用户uid
|
||||
PeerImUserID int64 `json:"peerImUserId" bson:"peerImUserId"` // 对端 IM 平台用户 ID
|
||||
UserName string `json:"userName" bson:"userName"` // 用户姓名
|
||||
UserAvatar string `json:"userAvatar" bson:"userAvatar"` // 用户头像
|
||||
SessionId string `json:"sessionId" bson:"sessionId"` // sessionId
|
||||
NoReadNum int64 `json:"noReadNum"` // 未读消息数
|
||||
PreContent string `json:"preContent" bson:"preContent"` // 预览消息内容,存最新一条
|
||||
CreatedAt time.Time `json:"createdAt" bson:"updatedAt"` // 创建时间,返回更新时间
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
package sessionmod
|
||||
|
||||
import (
|
||||
"91porn-server/common/db"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models"
|
||||
"fmt"
|
||||
|
||||
"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"
|
||||
)
|
||||
|
||||
var mdb *db.MongoDB
|
||||
|
||||
const table = models.ChatSession
|
||||
|
||||
// Coll 获取表名
|
||||
func coll(t *db.MongoTool) *db.MongoTool {
|
||||
if t == nil {
|
||||
return mdb.Coll(table)
|
||||
}
|
||||
return t.Coll(table)
|
||||
}
|
||||
|
||||
// InitIndex 初始化索引
|
||||
func initIndex() {
|
||||
many := []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{{"sendUid", 1}},
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{"takeUid", 1}},
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{"sessionId", 1}},
|
||||
},
|
||||
{
|
||||
Keys: bson.D{{"updatedAt", 1}},
|
||||
},
|
||||
}
|
||||
_, err := coll(nil).CreateIndex(many)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// InsertOne 新增
|
||||
func InsertOne(mt *db.MongoTool, t *Session) (err error) {
|
||||
_, err = coll(mt).InsertOne(&t)
|
||||
if err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "InsertOne", table, "InsertOne", err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Count 查询总条数
|
||||
func Count(filter primitive.M) (int64, error) {
|
||||
if count, err := coll(nil).Count(filter); err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "Count", models.Activity, "Count", err),
|
||||
log.Any("filter", filter),
|
||||
)
|
||||
return 0, err
|
||||
} else {
|
||||
return count, nil
|
||||
}
|
||||
}
|
||||
|
||||
// FindOneByFilter 根据条件查询单个信息
|
||||
func FindOneByFilter(cond bson.M) (data Session, err error) {
|
||||
err = coll(nil).FindOne(&data, cond)
|
||||
if err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FindOneByFilter", table, "FindOne", err),
|
||||
log.Any("cond", cond),
|
||||
)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func FindManyByFilter(cond bson.M, opts ...*options.FindOptions) (data []Session, err error) {
|
||||
data = make([]Session, 0)
|
||||
err = coll(nil).Find(&data, cond, opts...)
|
||||
if err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "FindManyByFilter", table, "Find", err),
|
||||
log.Any("cond", cond),
|
||||
)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 查询列表,app使用
|
||||
func Query(cond bson.M, req *QueryCond) (data []SessionApp, hasNext bool, err error) {
|
||||
data = make([]SessionApp, 0)
|
||||
skip := (req.PageNumber - 1) * req.PageSize
|
||||
sort := bson.D{{"updatedAt", -1}}
|
||||
opts := options.Find().SetSkip(int64(skip)).SetLimit(int64(req.PageSize) + 1).SetSort(sort)
|
||||
err = coll(nil).Find(&data, cond, opts)
|
||||
if err != nil {
|
||||
log.Error("Query", log.Any("cond", cond), log.Any("skip", skip), log.Any("limit", req.PageSize), log.E(err))
|
||||
return
|
||||
}
|
||||
if len(data) > int(req.PageSize) {
|
||||
hasNext = true
|
||||
data = data[:req.PageSize]
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// UpdOneByFilter 批量更新
|
||||
func UpdOneByFilter(t *db.MongoTool, cond bson.M, set bson.M) (err error) {
|
||||
_, err = coll(t).UpdateOne(cond, set)
|
||||
if err != nil {
|
||||
log.Warn(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "UpdOneByFilter", table, "UpdateOne", err), log.Any("cond", cond), log.Any("set", cond))
|
||||
return err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Delete 根据条件删除
|
||||
func Delete(cond bson.M) (err error) {
|
||||
_, err = coll(nil).DeleteOne(cond)
|
||||
if err != nil {
|
||||
log.Error(fmt.Sprintf("[METHOD-%s]==> Model %s %s fail error:%+v:", "Delete", table, "DeleteOne", err),
|
||||
log.Any("cond", cond),
|
||||
)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package sessionmod
|
||||
|
||||
import (
|
||||
"91porn-server/common/db"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
// Init 初始化标签model索引
|
||||
func Init() {
|
||||
mdb = db.Init(table)
|
||||
initIndex()
|
||||
}
|
||||
|
||||
// Session 会话,sendId是当前用户,则会话是有当前用户主动发起的,反之,对方用户主动发起
|
||||
type Session struct {
|
||||
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"` // 会话id
|
||||
SendUid uint64 `json:"sendUid" bson:"sendUid"` // 发送者uid
|
||||
TakeUid uint64 `json:"takeUid" bson:"takeUid"` // 接收者uid
|
||||
SessionId string `json:"sessionId" bson:"sessionId"` // sessionid
|
||||
PreContent string `json:"preContent" bson:"preContent"` // 预览消息内容,存最新一条
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"` // 创建时间
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"` // 更新时间
|
||||
}
|
||||
Reference in New Issue
Block a user