mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-12-04 11:22:17 +08:00
remove mysql
This commit is contained in:
parent
d98f63734b
commit
ce3b4eec08
8
go.mod
8
go.mod
@ -10,10 +10,8 @@ require (
|
|||||||
github.com/go-playground/validator/v10 v10.15.5
|
github.com/go-playground/validator/v10 v10.15.5
|
||||||
github.com/gogo/protobuf v1.3.2
|
github.com/gogo/protobuf v1.3.2
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0
|
github.com/golang-jwt/jwt/v4 v4.5.0
|
||||||
github.com/golang/protobuf v1.5.3
|
|
||||||
github.com/gorilla/websocket v1.5.0
|
github.com/gorilla/websocket v1.5.0
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
|
||||||
github.com/jinzhu/copier v0.4.0
|
|
||||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect
|
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect
|
||||||
github.com/minio/minio-go/v7 v7.0.63
|
github.com/minio/minio-go/v7 v7.0.63
|
||||||
github.com/mitchellh/mapstructure v1.5.0
|
github.com/mitchellh/mapstructure v1.5.0
|
||||||
@ -29,8 +27,6 @@ require (
|
|||||||
google.golang.org/grpc v1.59.0
|
google.golang.org/grpc v1.59.0
|
||||||
google.golang.org/protobuf v1.31.0
|
google.golang.org/protobuf v1.31.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
gorm.io/driver/mysql v1.5.2
|
|
||||||
gorm.io/gorm v1.25.5
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require github.com/google/uuid v1.3.1
|
require github.com/google/uuid v1.3.1
|
||||||
@ -41,12 +37,12 @@ require (
|
|||||||
github.com/OpenIMSDK/tools v0.0.16
|
github.com/OpenIMSDK/tools v0.0.16
|
||||||
github.com/aliyun/aliyun-oss-go-sdk v2.2.9+incompatible
|
github.com/aliyun/aliyun-oss-go-sdk v2.2.9+incompatible
|
||||||
github.com/go-redis/redis v6.15.9+incompatible
|
github.com/go-redis/redis v6.15.9+incompatible
|
||||||
github.com/go-sql-driver/mysql v1.7.1
|
|
||||||
github.com/redis/go-redis/v9 v9.2.1
|
github.com/redis/go-redis/v9 v9.2.1
|
||||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.45
|
github.com/tencentyun/cos-go-sdk-v5 v0.7.45
|
||||||
go.uber.org/automaxprocs v1.5.3
|
go.uber.org/automaxprocs v1.5.3
|
||||||
golang.org/x/sync v0.4.0
|
golang.org/x/sync v0.4.0
|
||||||
gopkg.in/src-d/go-git.v4 v4.13.1
|
gopkg.in/src-d/go-git.v4 v4.13.1
|
||||||
|
gorm.io/gorm v1.23.8
|
||||||
gotest.tools v2.2.0+incompatible
|
gotest.tools v2.2.0+incompatible
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -75,6 +71,7 @@ require (
|
|||||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
github.com/go-zookeeper/zk v1.0.3 // indirect
|
github.com/go-zookeeper/zk v1.0.3 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
github.com/google/go-cmp v0.6.0 // indirect
|
github.com/google/go-cmp v0.6.0 // indirect
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
@ -91,6 +88,7 @@ require (
|
|||||||
github.com/jcmturner/gofork v1.7.6 // indirect
|
github.com/jcmturner/gofork v1.7.6 // indirect
|
||||||
github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect
|
github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect
|
||||||
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
|
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
|
||||||
|
github.com/jinzhu/copier v0.3.5 // indirect
|
||||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
|||||||
15
go.sum
15
go.sum
@ -100,9 +100,6 @@ github.com/go-playground/validator/v10 v10.15.5 h1:LEBecTWb/1j5TNY1YYG2RcOUN3R7N
|
|||||||
github.com/go-playground/validator/v10 v10.15.5/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
github.com/go-playground/validator/v10 v10.15.5/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
||||||
github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
|
github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
|
||||||
github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
||||||
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
|
||||||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
|
||||||
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
|
||||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||||
github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
|
github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
|
||||||
github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
|
github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
|
||||||
@ -193,10 +190,11 @@ github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP
|
|||||||
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
|
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
|
||||||
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
|
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
|
||||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||||
github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
|
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
|
||||||
github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
|
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
|
||||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
|
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4=
|
github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4=
|
||||||
@ -531,11 +529,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
|||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs=
|
gorm.io/gorm v1.23.8 h1:h8sGJ+biDgBA1AD1Ha9gFCx7h8npU7AsLdlkX0n2TpE=
|
||||||
gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb8=
|
gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
|
||||||
gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
|
|
||||||
gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
|
|
||||||
gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
|
||||||
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
|||||||
@ -31,8 +31,6 @@ import (
|
|||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/cache"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/cache"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/relation"
|
|
||||||
relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation"
|
||||||
kdisc "github.com/openimsdk/open-im-server/v3/pkg/common/discoveryregister"
|
kdisc "github.com/openimsdk/open-im-server/v3/pkg/common/discoveryregister"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics"
|
||||||
@ -40,20 +38,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type MsgTransfer struct {
|
type MsgTransfer struct {
|
||||||
persistentCH *PersistentConsumerHandler // 聊天记录持久化到mysql的消费者 订阅的topic: ws2ms_chat
|
|
||||||
historyCH *OnlineHistoryRedisConsumerHandler // 这个消费者聚合消息, 订阅的topic:ws2ms_chat, 修改通知发往msg_to_modify topic, 消息存入redis后Incr Redis, 再发消息到ms2pschat topic推送, 发消息到msg_to_mongo topic持久化
|
historyCH *OnlineHistoryRedisConsumerHandler // 这个消费者聚合消息, 订阅的topic:ws2ms_chat, 修改通知发往msg_to_modify topic, 消息存入redis后Incr Redis, 再发消息到ms2pschat topic推送, 发消息到msg_to_mongo topic持久化
|
||||||
historyMongoCH *OnlineHistoryMongoConsumerHandler // mongoDB批量插入, 成功后删除redis中消息,以及处理删除通知消息删除的 订阅的topic: msg_to_mongo
|
historyMongoCH *OnlineHistoryMongoConsumerHandler // mongoDB批量插入, 成功后删除redis中消息,以及处理删除通知消息删除的 订阅的topic: msg_to_mongo
|
||||||
// modifyCH *ModifyMsgConsumerHandler // 负责消费修改消息通知的consumer, 订阅的topic: msg_to_modify
|
// modifyCH *ModifyMsgConsumerHandler // 负责消费修改消息通知的consumer, 订阅的topic: msg_to_modify
|
||||||
}
|
}
|
||||||
|
|
||||||
func StartTransfer(prometheusPort int) error {
|
func StartTransfer(prometheusPort int) error {
|
||||||
db, err := relation.NewGormDB()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := db.AutoMigrate(&relationtb.ChatLogModel{}); err != nil {
|
|
||||||
fmt.Printf("gorm: AutoMigrate ChatLogModel err: %v\n", err)
|
|
||||||
}
|
|
||||||
rdb, err := cache.NewRedis()
|
rdb, err := cache.NewRedis()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -79,21 +69,16 @@ func StartTransfer(prometheusPort int) error {
|
|||||||
client.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials()))
|
client.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||||
msgModel := cache.NewMsgCacheModel(rdb)
|
msgModel := cache.NewMsgCacheModel(rdb)
|
||||||
msgDocModel := unrelation.NewMsgMongoDriver(mongo.GetDatabase())
|
msgDocModel := unrelation.NewMsgMongoDriver(mongo.GetDatabase())
|
||||||
msgMysModel := relation.NewChatLogGorm(db)
|
|
||||||
chatLogDatabase := controller.NewChatLogDatabase(msgMysModel)
|
|
||||||
msgDatabase := controller.NewCommonMsgDatabase(msgDocModel, msgModel)
|
msgDatabase := controller.NewCommonMsgDatabase(msgDocModel, msgModel)
|
||||||
conversationRpcClient := rpcclient.NewConversationRpcClient(client)
|
conversationRpcClient := rpcclient.NewConversationRpcClient(client)
|
||||||
groupRpcClient := rpcclient.NewGroupRpcClient(client)
|
groupRpcClient := rpcclient.NewGroupRpcClient(client)
|
||||||
msgTransfer := NewMsgTransfer(chatLogDatabase, msgDatabase, &conversationRpcClient, &groupRpcClient)
|
msgTransfer := NewMsgTransfer(msgDatabase, &conversationRpcClient, &groupRpcClient)
|
||||||
return msgTransfer.Start(prometheusPort)
|
return msgTransfer.Start(prometheusPort)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMsgTransfer(chatLogDatabase controller.ChatLogDatabase,
|
func NewMsgTransfer(msgDatabase controller.CommonMsgDatabase, conversationRpcClient *rpcclient.ConversationRpcClient, groupRpcClient *rpcclient.GroupRpcClient) *MsgTransfer {
|
||||||
msgDatabase controller.CommonMsgDatabase,
|
|
||||||
conversationRpcClient *rpcclient.ConversationRpcClient, groupRpcClient *rpcclient.GroupRpcClient,
|
|
||||||
) *MsgTransfer {
|
|
||||||
return &MsgTransfer{
|
return &MsgTransfer{
|
||||||
persistentCH: NewPersistentConsumerHandler(chatLogDatabase), historyCH: NewOnlineHistoryRedisConsumerHandler(msgDatabase, conversationRpcClient, groupRpcClient),
|
historyCH: NewOnlineHistoryRedisConsumerHandler(msgDatabase, conversationRpcClient, groupRpcClient),
|
||||||
historyMongoCH: NewOnlineHistoryMongoConsumerHandler(msgDatabase),
|
historyMongoCH: NewOnlineHistoryMongoConsumerHandler(msgDatabase),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,119 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package msgtransfer
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/OpenIMSDK/protocol/constant"
|
|
||||||
pbmsg "github.com/OpenIMSDK/protocol/msg"
|
|
||||||
"github.com/OpenIMSDK/tools/log"
|
|
||||||
"github.com/OpenIMSDK/tools/utils"
|
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller"
|
|
||||||
kfk "github.com/openimsdk/open-im-server/v3/pkg/common/kafka"
|
|
||||||
|
|
||||||
"github.com/IBM/sarama"
|
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
type PersistentConsumerHandler struct {
|
|
||||||
persistentConsumerGroup *kfk.MConsumerGroup
|
|
||||||
chatLogDatabase controller.ChatLogDatabase
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPersistentConsumerHandler(database controller.ChatLogDatabase) *PersistentConsumerHandler {
|
|
||||||
return &PersistentConsumerHandler{
|
|
||||||
persistentConsumerGroup: kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{
|
|
||||||
KafkaVersion: sarama.V2_0_0_0,
|
|
||||||
OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false,
|
|
||||||
}, []string{config.Config.Kafka.LatestMsgToRedis.Topic},
|
|
||||||
config.Config.Kafka.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMySql),
|
|
||||||
chatLogDatabase: database,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pc *PersistentConsumerHandler) handleChatWs2Mysql(
|
|
||||||
ctx context.Context,
|
|
||||||
cMsg *sarama.ConsumerMessage,
|
|
||||||
msgKey string,
|
|
||||||
_ sarama.ConsumerGroupSession,
|
|
||||||
) {
|
|
||||||
msg := cMsg.Value
|
|
||||||
var tag bool
|
|
||||||
msgFromMQ := pbmsg.MsgDataToMQ{}
|
|
||||||
err := proto.Unmarshal(msg, &msgFromMQ)
|
|
||||||
if err != nil {
|
|
||||||
log.ZError(ctx, "msg_transfer Unmarshal msg err", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
log.ZDebug(ctx, "handleChatWs2Mysql", "msg", msgFromMQ.MsgData)
|
|
||||||
// Control whether to store history messages (mysql)
|
|
||||||
isPersist := utils.GetSwitchFromOptions(msgFromMQ.MsgData.Options, constant.IsPersistent)
|
|
||||||
// Only process receiver data
|
|
||||||
if isPersist {
|
|
||||||
switch msgFromMQ.MsgData.SessionType {
|
|
||||||
case constant.SingleChatType, constant.NotificationChatType:
|
|
||||||
if msgKey == msgFromMQ.MsgData.RecvID {
|
|
||||||
tag = true
|
|
||||||
}
|
|
||||||
case constant.GroupChatType:
|
|
||||||
if msgKey == msgFromMQ.MsgData.SendID {
|
|
||||||
tag = true
|
|
||||||
}
|
|
||||||
case constant.SuperGroupChatType:
|
|
||||||
tag = true
|
|
||||||
}
|
|
||||||
if tag {
|
|
||||||
log.ZInfo(ctx, "msg_transfer msg persisting", "msg", string(msg))
|
|
||||||
if err = pc.chatLogDatabase.CreateChatLog(&msgFromMQ); err != nil {
|
|
||||||
log.ZError(ctx, "Message insert failed", err, "msg", msgFromMQ.String())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (PersistentConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil }
|
|
||||||
func (PersistentConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil }
|
|
||||||
|
|
||||||
func (pc *PersistentConsumerHandler) ConsumeClaim(
|
|
||||||
sess sarama.ConsumerGroupSession,
|
|
||||||
claim sarama.ConsumerGroupClaim,
|
|
||||||
) error {
|
|
||||||
for msg := range claim.Messages() {
|
|
||||||
ctx := pc.persistentConsumerGroup.GetContextFromMsg(msg)
|
|
||||||
log.ZDebug(
|
|
||||||
ctx,
|
|
||||||
"kafka get info to mysql",
|
|
||||||
"msgTopic",
|
|
||||||
msg.Topic,
|
|
||||||
"msgPartition",
|
|
||||||
msg.Partition,
|
|
||||||
"msg",
|
|
||||||
string(msg.Value),
|
|
||||||
"key",
|
|
||||||
string(msg.Key),
|
|
||||||
)
|
|
||||||
if len(msg.Value) != 0 {
|
|
||||||
pc.handleChatWs2Mysql(ctx, msg, string(msg.Key), sess)
|
|
||||||
} else {
|
|
||||||
log.ZError(ctx, "msg get from kafka but is nil", nil, "key", msg.Key)
|
|
||||||
}
|
|
||||||
sess.MarkMessage(msg, "")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@ -34,12 +34,7 @@ func (s *friendServer) GetPaginationBlacks(
|
|||||||
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var pageNumber, showNumber int32
|
total, blacks, err := s.blackDatabase.FindOwnerBlacks(ctx, req.UserID, req.Pagination)
|
||||||
if req.Pagination != nil {
|
|
||||||
pageNumber = req.Pagination.PageNumber
|
|
||||||
showNumber = req.Pagination.ShowNumber
|
|
||||||
}
|
|
||||||
blacks, total, err := s.blackDatabase.FindOwnerBlacks(ctx, req.UserID, pageNumber, showNumber)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -112,10 +112,7 @@ func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok.
|
// ok.
|
||||||
func (s *friendServer) ApplyToAddFriend(
|
func (s *friendServer) ApplyToAddFriend(ctx context.Context, req *pbfriend.ApplyToAddFriendReq) (resp *pbfriend.ApplyToAddFriendResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.ApplyToAddFriendReq,
|
|
||||||
) (resp *pbfriend.ApplyToAddFriendResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
resp = &pbfriend.ApplyToAddFriendResp{}
|
resp = &pbfriend.ApplyToAddFriendResp{}
|
||||||
if err := authverify.CheckAccessV3(ctx, req.FromUserID); err != nil {
|
if err := authverify.CheckAccessV3(ctx, req.FromUserID); err != nil {
|
||||||
@ -145,10 +142,7 @@ func (s *friendServer) ApplyToAddFriend(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok.
|
// ok.
|
||||||
func (s *friendServer) ImportFriends(
|
func (s *friendServer) ImportFriends(ctx context.Context, req *pbfriend.ImportFriendReq) (resp *pbfriend.ImportFriendResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.ImportFriendReq,
|
|
||||||
) (resp *pbfriend.ImportFriendResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
if err := authverify.CheckAdmin(ctx); err != nil {
|
if err := authverify.CheckAdmin(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -176,10 +170,7 @@ func (s *friendServer) ImportFriends(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok.
|
// ok.
|
||||||
func (s *friendServer) RespondFriendApply(
|
func (s *friendServer) RespondFriendApply(ctx context.Context, req *pbfriend.RespondFriendApplyReq) (resp *pbfriend.RespondFriendApplyResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.RespondFriendApplyReq,
|
|
||||||
) (resp *pbfriend.RespondFriendApplyResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
resp = &pbfriend.RespondFriendApplyResp{}
|
resp = &pbfriend.RespondFriendApplyResp{}
|
||||||
if err := authverify.CheckAccessV3(ctx, req.ToUserID); err != nil {
|
if err := authverify.CheckAccessV3(ctx, req.ToUserID); err != nil {
|
||||||
@ -212,10 +203,7 @@ func (s *friendServer) RespondFriendApply(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok.
|
// ok.
|
||||||
func (s *friendServer) DeleteFriend(
|
func (s *friendServer) DeleteFriend(ctx context.Context, req *pbfriend.DeleteFriendReq) (resp *pbfriend.DeleteFriendResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.DeleteFriendReq,
|
|
||||||
) (resp *pbfriend.DeleteFriendResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
resp = &pbfriend.DeleteFriendResp{}
|
resp = &pbfriend.DeleteFriendResp{}
|
||||||
if err := s.userRpcClient.Access(ctx, req.OwnerUserID); err != nil {
|
if err := s.userRpcClient.Access(ctx, req.OwnerUserID); err != nil {
|
||||||
@ -233,10 +221,7 @@ func (s *friendServer) DeleteFriend(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok.
|
// ok.
|
||||||
func (s *friendServer) SetFriendRemark(
|
func (s *friendServer) SetFriendRemark(ctx context.Context, req *pbfriend.SetFriendRemarkReq) (resp *pbfriend.SetFriendRemarkResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.SetFriendRemarkReq,
|
|
||||||
) (resp *pbfriend.SetFriendRemarkResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
resp = &pbfriend.SetFriendRemarkResp{}
|
resp = &pbfriend.SetFriendRemarkResp{}
|
||||||
if err := s.userRpcClient.Access(ctx, req.OwnerUserID); err != nil {
|
if err := s.userRpcClient.Access(ctx, req.OwnerUserID); err != nil {
|
||||||
@ -254,10 +239,7 @@ func (s *friendServer) SetFriendRemark(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok.
|
// ok.
|
||||||
func (s *friendServer) GetDesignatedFriends(
|
func (s *friendServer) GetDesignatedFriends(ctx context.Context, req *pbfriend.GetDesignatedFriendsReq) (resp *pbfriend.GetDesignatedFriendsResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.GetDesignatedFriendsReq,
|
|
||||||
) (resp *pbfriend.GetDesignatedFriendsResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
resp = &pbfriend.GetDesignatedFriendsResp{}
|
resp = &pbfriend.GetDesignatedFriendsResp{}
|
||||||
if utils.Duplicate(req.FriendUserIDs) {
|
if utils.Duplicate(req.FriendUserIDs) {
|
||||||
@ -288,15 +270,12 @@ func (s *friendServer) GetDesignatedFriendsApply(ctx context.Context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok 获取接收到的好友申请(即别人主动申请的).
|
// ok 获取接收到的好友申请(即别人主动申请的).
|
||||||
func (s *friendServer) GetPaginationFriendsApplyTo(
|
func (s *friendServer) GetPaginationFriendsApplyTo(ctx context.Context, req *pbfriend.GetPaginationFriendsApplyToReq) (resp *pbfriend.GetPaginationFriendsApplyToResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.GetPaginationFriendsApplyToReq,
|
|
||||||
) (resp *pbfriend.GetPaginationFriendsApplyToResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
friendRequests, total, err := s.friendDatabase.PageFriendRequestToMe(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
total, friendRequests, err := s.friendDatabase.PageFriendRequestToMe(ctx, req.UserID, req.Pagination)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -310,16 +289,13 @@ func (s *friendServer) GetPaginationFriendsApplyTo(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok 获取主动发出去的好友申请列表.
|
// ok 获取主动发出去的好友申请列表.
|
||||||
func (s *friendServer) GetPaginationFriendsApplyFrom(
|
func (s *friendServer) GetPaginationFriendsApplyFrom(ctx context.Context, req *pbfriend.GetPaginationFriendsApplyFromReq) (resp *pbfriend.GetPaginationFriendsApplyFromResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.GetPaginationFriendsApplyFromReq,
|
|
||||||
) (resp *pbfriend.GetPaginationFriendsApplyFromResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
resp = &pbfriend.GetPaginationFriendsApplyFromResp{}
|
resp = &pbfriend.GetPaginationFriendsApplyFromResp{}
|
||||||
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
friendRequests, total, err := s.friendDatabase.PageFriendRequestFromMe(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
total, friendRequests, err := s.friendDatabase.PageFriendRequestFromMe(ctx, req.UserID, req.Pagination)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -332,10 +308,7 @@ func (s *friendServer) GetPaginationFriendsApplyFrom(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok.
|
// ok.
|
||||||
func (s *friendServer) IsFriend(
|
func (s *friendServer) IsFriend(ctx context.Context, req *pbfriend.IsFriendReq) (resp *pbfriend.IsFriendResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.IsFriendReq,
|
|
||||||
) (resp *pbfriend.IsFriendResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
resp = &pbfriend.IsFriendResp{}
|
resp = &pbfriend.IsFriendResp{}
|
||||||
resp.InUser1Friends, resp.InUser2Friends, err = s.friendDatabase.CheckIn(ctx, req.UserID1, req.UserID2)
|
resp.InUser1Friends, resp.InUser2Friends, err = s.friendDatabase.CheckIn(ctx, req.UserID1, req.UserID2)
|
||||||
@ -345,15 +318,12 @@ func (s *friendServer) IsFriend(
|
|||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *friendServer) GetPaginationFriends(
|
func (s *friendServer) GetPaginationFriends(ctx context.Context, req *pbfriend.GetPaginationFriendsReq) (resp *pbfriend.GetPaginationFriendsResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.GetPaginationFriendsReq,
|
|
||||||
) (resp *pbfriend.GetPaginationFriendsResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
friends, total, err := s.friendDatabase.PageOwnerFriends(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
total, friends, err := s.friendDatabase.PageOwnerFriends(ctx, req.UserID, req.Pagination)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -366,10 +336,7 @@ func (s *friendServer) GetPaginationFriends(
|
|||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *friendServer) GetFriendIDs(
|
func (s *friendServer) GetFriendIDs(ctx context.Context, req *pbfriend.GetFriendIDsReq) (resp *pbfriend.GetFriendIDsResp, err error) {
|
||||||
ctx context.Context,
|
|
||||||
req *pbfriend.GetFriendIDsReq,
|
|
||||||
) (resp *pbfriend.GetFriendIDsResp, err error) {
|
|
||||||
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
defer log.ZInfo(ctx, utils.GetFuncName()+" Return")
|
||||||
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
if err := s.userRpcClient.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@ -51,19 +51,11 @@ import (
|
|||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/cache"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/cache"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/relation"
|
|
||||||
relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error {
|
func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error {
|
||||||
db, err := relation.NewGormDB()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := db.AutoMigrate(&relationtb.GroupModel{}, &relationtb.GroupMemberModel{}, &relationtb.GroupRequestModel{}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
mongo, err := unrelation.NewMongo()
|
mongo, err := unrelation.NewMongo()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@ -16,6 +16,7 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
|
||||||
|
|
||||||
"github.com/OpenIMSDK/tools/log"
|
"github.com/OpenIMSDK/tools/log"
|
||||||
"github.com/OpenIMSDK/tools/utils"
|
"github.com/OpenIMSDK/tools/utils"
|
||||||
@ -30,12 +31,7 @@ type BlackDatabase interface {
|
|||||||
// Delete 删除黑名单
|
// Delete 删除黑名单
|
||||||
Delete(ctx context.Context, blacks []*relation.BlackModel) (err error)
|
Delete(ctx context.Context, blacks []*relation.BlackModel) (err error)
|
||||||
// FindOwnerBlacks 获取黑名单列表
|
// FindOwnerBlacks 获取黑名单列表
|
||||||
FindOwnerBlacks(
|
FindOwnerBlacks(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (total int64, blacks []*relation.BlackModel, err error)
|
||||||
ctx context.Context,
|
|
||||||
ownerUserID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (blacks []*relation.BlackModel, total int64, err error)
|
|
||||||
FindBlackIDs(ctx context.Context, ownerUserID string) (blackIDs []string, err error)
|
|
||||||
FindBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*relation.BlackModel, err error)
|
FindBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*relation.BlackModel, err error)
|
||||||
// CheckIn 检查user2是否在user1的黑名单列表中(inUser1Blacks==true) 检查user1是否在user2的黑名单列表中(inUser2Blacks==true)
|
// CheckIn 检查user2是否在user1的黑名单列表中(inUser1Blacks==true) 检查user1是否在user2的黑名单列表中(inUser2Blacks==true)
|
||||||
CheckIn(ctx context.Context, userID1, userID2 string) (inUser1Blacks bool, inUser2Blacks bool, err error)
|
CheckIn(ctx context.Context, userID1, userID2 string) (inUser1Blacks bool, inUser2Blacks bool, err error)
|
||||||
@ -75,12 +71,8 @@ func (b *blackDatabase) deleteBlackIDsCache(ctx context.Context, blacks []*relat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FindOwnerBlacks 获取黑名单列表.
|
// FindOwnerBlacks 获取黑名单列表.
|
||||||
func (b *blackDatabase) FindOwnerBlacks(
|
func (b *blackDatabase) FindOwnerBlacks(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (total int64, blacks []*relation.BlackModel, err error) {
|
||||||
ctx context.Context,
|
return b.black.FindOwnerBlacks(ctx, ownerUserID, pagination)
|
||||||
ownerUserID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (blacks []*relation.BlackModel, total int64, err error) {
|
|
||||||
return b.black.FindOwnerBlacks(ctx, ownerUserID, pageNumber, showNumber)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckIn 检查user2是否在user1的黑名单列表中(inUser1Blacks==true) 检查user1是否在user2的黑名单列表中(inUser2Blacks==true).
|
// CheckIn 检查user2是否在user1的黑名单列表中(inUser1Blacks==true) 检查user1是否在user2的黑名单列表中(inUser2Blacks==true).
|
||||||
|
|||||||
@ -1,37 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package controller
|
|
||||||
|
|
||||||
import (
|
|
||||||
pbmsg "github.com/OpenIMSDK/protocol/msg"
|
|
||||||
|
|
||||||
relationtb "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ChatLogDatabase interface {
|
|
||||||
CreateChatLog(msg *pbmsg.MsgDataToMQ) error
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewChatLogDatabase(chatLogModelInterface relationtb.ChatLogModelInterface) ChatLogDatabase {
|
|
||||||
return &chatLogDatabase{chatLogModel: chatLogModelInterface}
|
|
||||||
}
|
|
||||||
|
|
||||||
type chatLogDatabase struct {
|
|
||||||
chatLogModel relationtb.ChatLogModelInterface
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *chatLogDatabase) CreateChatLog(msg *pbmsg.MsgDataToMQ) error {
|
|
||||||
return c.chatLogModel.Create(msg)
|
|
||||||
}
|
|
||||||
@ -16,6 +16,7 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
@ -47,35 +48,15 @@ type FriendDatabase interface {
|
|||||||
// 更新好友备注
|
// 更新好友备注
|
||||||
UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error)
|
UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error)
|
||||||
// 获取ownerUserID的好友列表
|
// 获取ownerUserID的好友列表
|
||||||
PageOwnerFriends(
|
PageOwnerFriends(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (total int64, friends []*relation.FriendModel, err error)
|
||||||
ctx context.Context,
|
|
||||||
ownerUserID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (friends []*relation.FriendModel, total int64, err error)
|
|
||||||
// friendUserID在哪些人的好友列表中
|
// friendUserID在哪些人的好友列表中
|
||||||
PageInWhoseFriends(
|
PageInWhoseFriends(ctx context.Context, friendUserID string, pagination pagination.Pagination) (total int64, friends []*relation.FriendModel, err error)
|
||||||
ctx context.Context,
|
|
||||||
friendUserID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (friends []*relation.FriendModel, total int64, err error)
|
|
||||||
// 获取我发出去的好友申请
|
// 获取我发出去的好友申请
|
||||||
PageFriendRequestFromMe(
|
PageFriendRequestFromMe(ctx context.Context, userID string, pagination pagination.Pagination) (total int64, friends []*relation.FriendRequestModel, err error)
|
||||||
ctx context.Context,
|
|
||||||
userID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (friends []*relation.FriendRequestModel, total int64, err error)
|
|
||||||
// 获取我收到的的好友申请
|
// 获取我收到的的好友申请
|
||||||
PageFriendRequestToMe(
|
PageFriendRequestToMe(ctx context.Context, userID string, pagination pagination.Pagination) (total int64, friends []*relation.FriendRequestModel, err error)
|
||||||
ctx context.Context,
|
|
||||||
userID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (friends []*relation.FriendRequestModel, total int64, err error)
|
|
||||||
// 获取某人指定好友的信息
|
// 获取某人指定好友的信息
|
||||||
FindFriendsWithError(
|
FindFriendsWithError(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*relation.FriendModel, err error)
|
||||||
ctx context.Context,
|
|
||||||
ownerUserID string,
|
|
||||||
friendUserIDs []string,
|
|
||||||
) (friends []*relation.FriendModel, err error)
|
|
||||||
FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error)
|
FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error)
|
||||||
FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error)
|
FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error)
|
||||||
}
|
}
|
||||||
@ -83,24 +64,16 @@ type FriendDatabase interface {
|
|||||||
type friendDatabase struct {
|
type friendDatabase struct {
|
||||||
friend relation.FriendModelInterface
|
friend relation.FriendModelInterface
|
||||||
friendRequest relation.FriendRequestModelInterface
|
friendRequest relation.FriendRequestModelInterface
|
||||||
tx tx.Tx
|
tx tx.CtxTx
|
||||||
cache cache.FriendCache
|
cache cache.FriendCache
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewFriendDatabase(
|
func NewFriendDatabase(friend relation.FriendModelInterface, friendRequest relation.FriendRequestModelInterface, cache cache.FriendCache, tx tx.CtxTx) FriendDatabase {
|
||||||
friend relation.FriendModelInterface,
|
|
||||||
friendRequest relation.FriendRequestModelInterface,
|
|
||||||
cache cache.FriendCache,
|
|
||||||
tx tx.Tx,
|
|
||||||
) FriendDatabase {
|
|
||||||
return &friendDatabase{friend: friend, friendRequest: friendRequest, cache: cache, tx: tx}
|
return &friendDatabase{friend: friend, friendRequest: friendRequest, cache: cache, tx: tx}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok 检查user2是否在user1的好友列表中(inUser1Friends==true) 检查user1是否在user2的好友列表中(inUser2Friends==true).
|
// ok 检查user2是否在user1的好友列表中(inUser1Friends==true) 检查user1是否在user2的好友列表中(inUser2Friends==true).
|
||||||
func (f *friendDatabase) CheckIn(
|
func (f *friendDatabase) CheckIn(ctx context.Context, userID1, userID2 string) (inUser1Friends bool, inUser2Friends bool, err error) {
|
||||||
ctx context.Context,
|
|
||||||
userID1, userID2 string,
|
|
||||||
) (inUser1Friends bool, inUser2Friends bool, err error) {
|
|
||||||
userID1FriendIDs, err := f.cache.GetFriendIDs(ctx, userID1)
|
userID1FriendIDs, err := f.cache.GetFriendIDs(ctx, userID1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -113,50 +86,32 @@ func (f *friendDatabase) CheckIn(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 增加或者更新好友申请 如果之前有记录则更新,没有记录则新增.
|
// 增加或者更新好友申请 如果之前有记录则更新,没有记录则新增.
|
||||||
func (f *friendDatabase) AddFriendRequest(
|
func (f *friendDatabase) AddFriendRequest(ctx context.Context, fromUserID, toUserID string, reqMsg string, ex string) (err error) {
|
||||||
ctx context.Context,
|
return f.tx.Transaction(ctx, func(ctx context.Context) error {
|
||||||
fromUserID, toUserID string,
|
_, err := f.friendRequest.Take(ctx, fromUserID, toUserID)
|
||||||
reqMsg string,
|
switch {
|
||||||
ex string,
|
case err == nil:
|
||||||
) (err error) {
|
|
||||||
return f.tx.Transaction(func(tx any) error {
|
|
||||||
_, err := f.friendRequest.NewTx(tx).Take(ctx, fromUserID, toUserID)
|
|
||||||
// 有db错误
|
|
||||||
if err != nil && errs.Unwrap(err) != gorm.ErrRecordNotFound {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// 无错误 则更新
|
|
||||||
if err == nil {
|
|
||||||
m := make(map[string]any, 1)
|
m := make(map[string]any, 1)
|
||||||
m["handle_result"] = 0
|
m["handle_result"] = 0
|
||||||
m["handle_msg"] = ""
|
m["handle_msg"] = ""
|
||||||
m["req_msg"] = reqMsg
|
m["req_msg"] = reqMsg
|
||||||
m["ex"] = ex
|
m["ex"] = ex
|
||||||
m["create_time"] = time.Now()
|
m["create_time"] = time.Now()
|
||||||
if err := f.friendRequest.NewTx(tx).UpdateByMap(ctx, fromUserID, toUserID, m); err != nil {
|
return f.friendRequest.UpdateByMap(ctx, fromUserID, toUserID, m)
|
||||||
|
case relation.IsNotFound(err):
|
||||||
|
return f.friendRequest.Create(ctx, []*relation.FriendRequestModel{{FromUserID: fromUserID, ToUserID: toUserID, ReqMsg: reqMsg, Ex: ex, CreateTime: time.Now(), HandleTime: time.Unix(0, 0)}})
|
||||||
|
default:
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
}
|
|
||||||
// gorm.ErrRecordNotFound 错误,则新增
|
|
||||||
if err := f.friendRequest.NewTx(tx).Create(ctx, []*relation.FriendRequestModel{{FromUserID: fromUserID, ToUserID: toUserID, ReqMsg: reqMsg, Ex: ex, CreateTime: time.Now(), HandleTime: time.Unix(0, 0)}}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// (1)先判断是否在好友表 (在不在都不返回错误) (2)对于不在好友列表的 插入即可.
|
// (1)先判断是否在好友表 (在不在都不返回错误) (2)对于不在好友列表的 插入即可.
|
||||||
func (f *friendDatabase) BecomeFriends(
|
func (f *friendDatabase) BecomeFriends(ctx context.Context, ownerUserID string, friendUserIDs []string, addSource int32) (err error) {
|
||||||
ctx context.Context,
|
return f.tx.Transaction(ctx, func(ctx context.Context) error {
|
||||||
ownerUserID string,
|
|
||||||
friendUserIDs []string,
|
|
||||||
addSource int32,
|
|
||||||
) (err error) {
|
|
||||||
cache := f.cache.NewCache()
|
cache := f.cache.NewCache()
|
||||||
if err := f.tx.Transaction(func(tx any) error {
|
|
||||||
// 先find 找出重复的 去掉重复的
|
// 先find 找出重复的 去掉重复的
|
||||||
fs1, err := f.friend.NewTx(tx).FindFriends(ctx, ownerUserID, friendUserIDs)
|
fs1, err := f.friend.FindFriends(ctx, ownerUserID, friendUserIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -168,11 +123,11 @@ func (f *friendDatabase) BecomeFriends(
|
|||||||
return e.FriendUserID
|
return e.FriendUserID
|
||||||
})
|
})
|
||||||
|
|
||||||
err = f.friend.NewTx(tx).Create(ctx, fs11)
|
err = f.friend.Create(ctx, fs11)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fs2, err := f.friend.NewTx(tx).FindReversalFriends(ctx, ownerUserID, friendUserIDs)
|
fs2, err := f.friend.FindReversalFriends(ctx, ownerUserID, friendUserIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -184,24 +139,19 @@ func (f *friendDatabase) BecomeFriends(
|
|||||||
fs22 := utils.DistinctAny(fs2, func(e *relation.FriendModel) string {
|
fs22 := utils.DistinctAny(fs2, func(e *relation.FriendModel) string {
|
||||||
return e.OwnerUserID
|
return e.OwnerUserID
|
||||||
})
|
})
|
||||||
err = f.friend.NewTx(tx).Create(ctx, fs22)
|
err = f.friend.Create(ctx, fs22)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
newFriendIDs = append(newFriendIDs, ownerUserID)
|
newFriendIDs = append(newFriendIDs, ownerUserID)
|
||||||
cache = cache.DelFriendIDs(newFriendIDs...)
|
cache = cache.DelFriendIDs(newFriendIDs...)
|
||||||
return nil
|
|
||||||
}); err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return cache.ExecDel(ctx)
|
return cache.ExecDel(ctx)
|
||||||
|
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 拒绝好友申请 (1)检查是否有申请记录且为未处理状态 (没有记录返回错误) (2)修改申请记录 已拒绝.
|
// 拒绝好友申请 (1)检查是否有申请记录且为未处理状态 (没有记录返回错误) (2)修改申请记录 已拒绝.
|
||||||
func (f *friendDatabase) RefuseFriendRequest(
|
func (f *friendDatabase) RefuseFriendRequest(ctx context.Context, friendRequest *relation.FriendRequestModel) (err error) {
|
||||||
ctx context.Context,
|
|
||||||
friendRequest *relation.FriendRequestModel,
|
|
||||||
) (err error) {
|
|
||||||
fr, err := f.friendRequest.Take(ctx, friendRequest.FromUserID, friendRequest.ToUserID)
|
fr, err := f.friendRequest.Take(ctx, friendRequest.FromUserID, friendRequest.ToUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -220,14 +170,11 @@ func (f *friendDatabase) RefuseFriendRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AgreeFriendRequest 同意好友申请 (1)检查是否有申请记录且为未处理状态 (没有记录返回错误) (2)检查是否好友(不返回错误) (3) 建立双向好友关系(存在的忽略).
|
// AgreeFriendRequest 同意好友申请 (1)检查是否有申请记录且为未处理状态 (没有记录返回错误) (2)检查是否好友(不返回错误) (3) 建立双向好友关系(存在的忽略).
|
||||||
func (f *friendDatabase) AgreeFriendRequest(
|
func (f *friendDatabase) AgreeFriendRequest(ctx context.Context, friendRequest *relation.FriendRequestModel) (err error) {
|
||||||
ctx context.Context,
|
return f.tx.Transaction(ctx, func(ctx context.Context) error {
|
||||||
friendRequest *relation.FriendRequestModel,
|
|
||||||
) (err error) {
|
|
||||||
return f.tx.Transaction(func(tx any) error {
|
|
||||||
defer log.ZDebug(ctx, "return line")
|
defer log.ZDebug(ctx, "return line")
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
fr, err := f.friendRequest.NewTx(tx).Take(ctx, friendRequest.FromUserID, friendRequest.ToUserID)
|
fr, err := f.friendRequest.Take(ctx, friendRequest.FromUserID, friendRequest.ToUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -237,17 +184,17 @@ func (f *friendDatabase) AgreeFriendRequest(
|
|||||||
friendRequest.HandlerUserID = mcontext.GetOpUserID(ctx)
|
friendRequest.HandlerUserID = mcontext.GetOpUserID(ctx)
|
||||||
friendRequest.HandleResult = constant.FriendResponseAgree
|
friendRequest.HandleResult = constant.FriendResponseAgree
|
||||||
friendRequest.HandleTime = now
|
friendRequest.HandleTime = now
|
||||||
err = f.friendRequest.NewTx(tx).Update(ctx, friendRequest)
|
err = f.friendRequest.Update(ctx, friendRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fr2, err := f.friendRequest.NewTx(tx).Take(ctx, friendRequest.ToUserID, friendRequest.FromUserID)
|
fr2, err := f.friendRequest.Take(ctx, friendRequest.ToUserID, friendRequest.FromUserID)
|
||||||
if err == nil && fr2.HandleResult == constant.FriendResponseNotHandle {
|
if err == nil && fr2.HandleResult == constant.FriendResponseNotHandle {
|
||||||
fr2.HandlerUserID = mcontext.GetOpUserID(ctx)
|
fr2.HandlerUserID = mcontext.GetOpUserID(ctx)
|
||||||
fr2.HandleResult = constant.FriendResponseAgree
|
fr2.HandleResult = constant.FriendResponseAgree
|
||||||
fr2.HandleTime = now
|
fr2.HandleTime = now
|
||||||
err = f.friendRequest.NewTx(tx).Update(ctx, fr2)
|
err = f.friendRequest.Update(ctx, fr2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -255,7 +202,7 @@ func (f *friendDatabase) AgreeFriendRequest(
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
exists, err := f.friend.NewTx(tx).FindUserState(ctx, friendRequest.FromUserID, friendRequest.ToUserID)
|
exists, err := f.friend.FindUserState(ctx, friendRequest.FromUserID, friendRequest.ToUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -286,7 +233,7 @@ func (f *friendDatabase) AgreeFriendRequest(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
if len(adds) > 0 {
|
if len(adds) > 0 {
|
||||||
if err := f.friend.NewTx(tx).Create(ctx, adds); err != nil {
|
if err := f.friend.Create(ctx, adds); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -311,47 +258,27 @@ func (f *friendDatabase) UpdateRemark(ctx context.Context, ownerUserID, friendUs
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取ownerUserID的好友列表 无结果不返回错误.
|
// 获取ownerUserID的好友列表 无结果不返回错误.
|
||||||
func (f *friendDatabase) PageOwnerFriends(
|
func (f *friendDatabase) PageOwnerFriends(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (total int64, friends []*relation.FriendModel, err error) {
|
||||||
ctx context.Context,
|
return f.friend.FindOwnerFriends(ctx, ownerUserID, pagination)
|
||||||
ownerUserID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (friends []*relation.FriendModel, total int64, err error) {
|
|
||||||
return f.friend.FindOwnerFriends(ctx, ownerUserID, pageNumber, showNumber)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// friendUserID在哪些人的好友列表中.
|
// friendUserID在哪些人的好友列表中.
|
||||||
func (f *friendDatabase) PageInWhoseFriends(
|
func (f *friendDatabase) PageInWhoseFriends(ctx context.Context, friendUserID string, pagination pagination.Pagination) (total int64, friends []*relation.FriendModel, err error) {
|
||||||
ctx context.Context,
|
return f.friend.FindInWhoseFriends(ctx, friendUserID, pagination)
|
||||||
friendUserID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (friends []*relation.FriendModel, total int64, err error) {
|
|
||||||
return f.friend.FindInWhoseFriends(ctx, friendUserID, pageNumber, showNumber)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取我发出去的好友申请 无结果不返回错误.
|
// 获取我发出去的好友申请 无结果不返回错误.
|
||||||
func (f *friendDatabase) PageFriendRequestFromMe(
|
func (f *friendDatabase) PageFriendRequestFromMe(ctx context.Context, userID string, pagination pagination.Pagination) (total int64, friends []*relation.FriendRequestModel, err error) {
|
||||||
ctx context.Context,
|
return f.friendRequest.FindFromUserID(ctx, userID, pagination)
|
||||||
userID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (friends []*relation.FriendRequestModel, total int64, err error) {
|
|
||||||
return f.friendRequest.FindFromUserID(ctx, userID, pageNumber, showNumber)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取我收到的的好友申请 无结果不返回错误.
|
// 获取我收到的的好友申请 无结果不返回错误.
|
||||||
func (f *friendDatabase) PageFriendRequestToMe(
|
func (f *friendDatabase) PageFriendRequestToMe(ctx context.Context, userID string, pagination pagination.Pagination) (total int64, friends []*relation.FriendRequestModel, err error) {
|
||||||
ctx context.Context,
|
return f.friendRequest.FindToUserID(ctx, userID, pagination)
|
||||||
userID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (friends []*relation.FriendRequestModel, total int64, err error) {
|
|
||||||
return f.friendRequest.FindToUserID(ctx, userID, pageNumber, showNumber)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取某人指定好友的信息 如果有好友不存在,也返回错误.
|
// 获取某人指定好友的信息 如果有好友不存在,也返回错误.
|
||||||
func (f *friendDatabase) FindFriendsWithError(
|
func (f *friendDatabase) FindFriendsWithError(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*relation.FriendModel, err error) {
|
||||||
ctx context.Context,
|
|
||||||
ownerUserID string,
|
|
||||||
friendUserIDs []string,
|
|
||||||
) (friends []*relation.FriendModel, err error) {
|
|
||||||
friends, err = f.friend.FindFriends(ctx, ownerUserID, friendUserIDs)
|
friends, err = f.friend.FindFriends(ctx, ownerUserID, friendUserIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -362,10 +289,7 @@ func (f *friendDatabase) FindFriendsWithError(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *friendDatabase) FindFriendUserIDs(
|
func (f *friendDatabase) FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error) {
|
||||||
ctx context.Context,
|
|
||||||
ownerUserID string,
|
|
||||||
) (friendUserIDs []string, err error) {
|
|
||||||
return f.cache.GetFriendIDs(ctx, ownerUserID)
|
return f.cache.GetFriendIDs(ctx, ownerUserID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
80
pkg/common/db/newmgo/black.go
Normal file
80
pkg/common/db/newmgo/black.go
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package newmgo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
|
||||||
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewBlackMongo(db *mongo.Database) (relation.BlackModelInterface, error) {
|
||||||
|
return &BlackMgo{
|
||||||
|
coll: db.Collection("black"),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type BlackMgo struct {
|
||||||
|
coll *mongo.Collection
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) blackFilter(ownerUserID, blockUserID string) bson.M {
|
||||||
|
return bson.M{
|
||||||
|
"owner_user_id": ownerUserID,
|
||||||
|
"block_user_id": blockUserID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) blacksFilter(blacks []*relation.BlackModel) bson.M {
|
||||||
|
if len(blacks) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
or := make(bson.A, 0, len(blacks))
|
||||||
|
for _, black := range blacks {
|
||||||
|
or = append(or, b.blackFilter(black.OwnerUserID, black.BlockUserID))
|
||||||
|
}
|
||||||
|
return bson.M{"$or": or}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) Create(ctx context.Context, blacks []*relation.BlackModel) (err error) {
|
||||||
|
return mgotool.InsertMany(ctx, b.coll, blacks)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) Delete(ctx context.Context, blacks []*relation.BlackModel) (err error) {
|
||||||
|
if len(blacks) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return mgotool.DeleteMany(ctx, b.coll, b.blacksFilter(blacks))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) UpdateByMap(ctx context.Context, ownerUserID, blockUserID string, args map[string]any) (err error) {
|
||||||
|
if len(args) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return mgotool.UpdateOne(ctx, b.coll, b.blackFilter(ownerUserID, blockUserID), bson.M{"$set": args}, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) Find(ctx context.Context, blacks []*relation.BlackModel) (blackList []*relation.BlackModel, err error) {
|
||||||
|
return mgotool.Find[*relation.BlackModel](ctx, b.coll, b.blacksFilter(blacks))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) Take(ctx context.Context, ownerUserID, blockUserID string) (black *relation.BlackModel, err error) {
|
||||||
|
return mgotool.FindOne[*relation.BlackModel](ctx, b.coll, b.blackFilter(ownerUserID, blockUserID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) FindOwnerBlacks(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (total int64, blacks []*relation.BlackModel, err error) {
|
||||||
|
return mgotool.FindPage[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID}, pagination)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*relation.BlackModel, err error) {
|
||||||
|
if len(userIDs) == 0 {
|
||||||
|
return mgotool.Find[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID})
|
||||||
|
}
|
||||||
|
return mgotool.Find[*relation.BlackModel](ctx, b.coll, bson.M{"owner_user_id": ownerUserID, "block_user_id": bson.M{"$in": userIDs}})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BlackMgo) FindBlackUserIDs(ctx context.Context, ownerUserID string) (blackUserIDs []string, err error) {
|
||||||
|
return mgotool.Find[string](ctx, b.coll, bson.M{"owner_user_id": ownerUserID}, options.Find().SetProjection(bson.M{"_id": 0, "block_user_id": 1}))
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@ package newmgo
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
@ -18,7 +19,7 @@ type FriendMgo struct {
|
|||||||
// NewFriendMongo creates a new instance of FriendMgo with the provided MongoDB database.
|
// NewFriendMongo creates a new instance of FriendMgo with the provided MongoDB database.
|
||||||
func NewFriendMongo(db *mongo.Database) (relation.FriendModelInterface, error) {
|
func NewFriendMongo(db *mongo.Database) (relation.FriendModelInterface, error) {
|
||||||
return &FriendMgo{
|
return &FriendMgo{
|
||||||
coll: db.Collection(relation.FriendModelCollectionName),
|
coll: db.Collection("friend"),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,11 +34,7 @@ func (f *FriendMgo) Delete(ctx context.Context, ownerUserID string, friendUserID
|
|||||||
"owner_user_id": ownerUserID,
|
"owner_user_id": ownerUserID,
|
||||||
"friend_user_id": bson.M{"$in": friendUserIDs},
|
"friend_user_id": bson.M{"$in": friendUserIDs},
|
||||||
}
|
}
|
||||||
_, err := f.coll.DeleteMany(ctx, filter)
|
return mgotool.DeleteOne(ctx, f.coll, filter)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateByMap updates specific fields of a friend document using a map.
|
// UpdateByMap updates specific fields of a friend document using a map.
|
||||||
@ -49,12 +46,7 @@ func (f *FriendMgo) UpdateByMap(ctx context.Context, ownerUserID string, friendU
|
|||||||
"owner_user_id": ownerUserID,
|
"owner_user_id": ownerUserID,
|
||||||
"friend_user_id": friendUserID,
|
"friend_user_id": friendUserID,
|
||||||
}
|
}
|
||||||
update := bson.M{"$set": args}
|
return mgotool.UpdateOne(ctx, f.coll, filter, bson.M{"$set": args}, true)
|
||||||
err := mgotool.UpdateOne(ctx, f.coll, filter, update, true)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update modifies multiple friend documents.
|
// Update modifies multiple friend documents.
|
||||||
@ -68,8 +60,7 @@ func (f *FriendMgo) UpdateByMap(ctx context.Context, ownerUserID string, friendU
|
|||||||
|
|
||||||
// UpdateRemark updates the remark for a specific friend.
|
// UpdateRemark updates the remark for a specific friend.
|
||||||
func (f *FriendMgo) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) error {
|
func (f *FriendMgo) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) error {
|
||||||
args := map[string]interface{}{"remark": remark}
|
return f.UpdateByMap(ctx, ownerUserID, friendUserID, map[string]any{"remark": remark})
|
||||||
return f.UpdateByMap(ctx, ownerUserID, friendUserID, args)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Take retrieves a single friend document. Returns an error if not found.
|
// Take retrieves a single friend document. Returns an error if not found.
|
||||||
@ -78,11 +69,7 @@ func (f *FriendMgo) Take(ctx context.Context, ownerUserID, friendUserID string)
|
|||||||
"owner_user_id": ownerUserID,
|
"owner_user_id": ownerUserID,
|
||||||
"friend_user_id": friendUserID,
|
"friend_user_id": friendUserID,
|
||||||
}
|
}
|
||||||
friend, err := mgotool.FindOne[*relation.FriendModel](ctx, f.coll, filter)
|
return mgotool.FindOne[*relation.FriendModel](ctx, f.coll, filter)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return friend, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindUserState finds the friendship status between two users.
|
// FindUserState finds the friendship status between two users.
|
||||||
@ -93,11 +80,7 @@ func (f *FriendMgo) FindUserState(ctx context.Context, userID1, userID2 string)
|
|||||||
{"owner_user_id": userID2, "friend_user_id": userID1},
|
{"owner_user_id": userID2, "friend_user_id": userID1},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
friends, err := mgotool.Find[*relation.FriendModel](ctx, f.coll, filter)
|
return mgotool.Find[*relation.FriendModel](ctx, f.coll, filter)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return friends, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindFriends retrieves a list of friends for a given owner. Missing friends do not cause an error.
|
// FindFriends retrieves a list of friends for a given owner. Missing friends do not cause an error.
|
||||||
@ -106,11 +89,7 @@ func (f *FriendMgo) FindFriends(ctx context.Context, ownerUserID string, friendU
|
|||||||
"owner_user_id": ownerUserID,
|
"owner_user_id": ownerUserID,
|
||||||
"friend_user_id": bson.M{"$in": friendUserIDs},
|
"friend_user_id": bson.M{"$in": friendUserIDs},
|
||||||
}
|
}
|
||||||
friends, err := mgotool.Find[*relation.FriendModel](ctx, f.coll, filter)
|
return mgotool.Find[*relation.FriendModel](ctx, f.coll, filter)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return friends, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindReversalFriends finds users who have added the specified user as a friend.
|
// FindReversalFriends finds users who have added the specified user as a friend.
|
||||||
@ -119,51 +98,23 @@ func (f *FriendMgo) FindReversalFriends(ctx context.Context, friendUserID string
|
|||||||
"owner_user_id": bson.M{"$in": ownerUserIDs},
|
"owner_user_id": bson.M{"$in": ownerUserIDs},
|
||||||
"friend_user_id": friendUserID,
|
"friend_user_id": friendUserID,
|
||||||
}
|
}
|
||||||
friends, err := mgotool.Find[*relation.FriendModel](ctx, f.coll, filter)
|
return mgotool.Find[*relation.FriendModel](ctx, f.coll, filter)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return friends, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindOwnerFriends retrieves a paginated list of friends for a given owner.
|
// FindOwnerFriends retrieves a paginated list of friends for a given owner.
|
||||||
func (f *FriendMgo) FindOwnerFriends(ctx context.Context, ownerUserID string, pagination pagination.Pagination, showNumber int32) ([]*relation.FriendModel, int64, error) {
|
func (f *FriendMgo) FindOwnerFriends(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (int64, []*relation.FriendModel, error) {
|
||||||
filter := bson.M{"owner_user_id": ownerUserID}
|
filter := bson.M{"owner_user_id": ownerUserID}
|
||||||
count, friends, err := mgotool.FindPage[*relation.FriendModel](ctx, f.coll, filter, pagination)
|
return mgotool.FindPage[*relation.FriendModel](ctx, f.coll, filter, pagination)
|
||||||
if err != nil {
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
return friends, count, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindInWhoseFriends finds users who have added the specified user as a friend, with pagination.
|
// FindInWhoseFriends finds users who have added the specified user as a friend, with pagination.
|
||||||
func (f *FriendMgo) FindInWhoseFriends(ctx context.Context, friendUserID string, pagination.Pagination, showNumber int32) ([]*relation.FriendModel, int64, error) {
|
func (f *FriendMgo) FindInWhoseFriends(ctx context.Context, friendUserID string, pagination pagination.Pagination) (int64, []*relation.FriendModel, error) {
|
||||||
filter := bson.M{"friend_user_id": friendUserID}
|
filter := bson.M{"friend_user_id": friendUserID}
|
||||||
count, friends, err := mgotool.FindPage[*relation.FriendModel](ctx, f.coll, filter, pagination)
|
return mgotool.FindPage[*relation.FriendModel](ctx, f.coll, filter, pagination)
|
||||||
if err != nil {
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
return friends, count, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindFriendUserIDs retrieves a list of friend user IDs for a given owner.
|
// FindFriendUserIDs retrieves a list of friend user IDs for a given owner.
|
||||||
func (f *FriendMgo) FindFriendUserIDs(ctx context.Context, ownerUserID string) ([]string, error) {
|
func (f *FriendMgo) FindFriendUserIDs(ctx context.Context, ownerUserID string) ([]string, error) {
|
||||||
filter := bson.M{"owner_user_id": ownerUserID}
|
filter := bson.M{"owner_user_id": ownerUserID}
|
||||||
friends := []*relation.FriendModel{}
|
return mgotool.Find[string](ctx, f.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "friend_user_id": 1}))
|
||||||
friends, err := mgotool.Find[*relation.FriendModel](ctx, f.coll, filter)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
friendUserIDs := make([]string, len(friends))
|
|
||||||
for i, friend := range friends {
|
|
||||||
friendUserIDs[i] = friend.FriendUserID
|
|
||||||
}
|
|
||||||
return friendUserIDs, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewTx creates a new transaction.
|
|
||||||
func (f *FriendMgo) NewTx(tx any) relation.FriendModelInterface {
|
|
||||||
panic("not implemented")
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package newmgo
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/newmgo/mgotool"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
@ -9,14 +10,39 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func NewFriendRequestMongo(db *mongo.Database) (relation.FriendRequestModelInterface, error) {
|
||||||
|
return &FriendRequestMgo{
|
||||||
|
coll: db.Collection("friend_request"),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
type FriendRequestMgo struct {
|
type FriendRequestMgo struct {
|
||||||
coll *mongo.Collection
|
coll *mongo.Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewFriendRequestMongo(db *mongo.Database) (relation.FriendRequestModelInterface, error) {
|
func (f *FriendRequestMgo) FindToUserID(ctx context.Context, toUserID string, pagination pagination.Pagination) (total int64, friendRequests []*relation.FriendRequestModel, err error) {
|
||||||
return &FriendRequestMgo{
|
//TODO implement me
|
||||||
coll: db.Collection(relation.FriendRequestModelCollectionName),
|
panic("implement me")
|
||||||
}, nil
|
}
|
||||||
|
|
||||||
|
func (f *FriendRequestMgo) FindFromUserID(ctx context.Context, fromUserID string, pagination pagination.Pagination) (total int64, friendRequests []*relation.FriendRequestModel, err error) {
|
||||||
|
//TODO implement me
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FriendRequestMgo) FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error) {
|
||||||
|
//TODO implement me
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FriendRequestMgo) NewTx(tx any) relation.FriendRequestModelInterface {
|
||||||
|
//TODO implement me
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FriendRequestMgo) Exist(ctx context.Context, userID string) (exist bool, err error) {
|
||||||
|
//TODO implement me
|
||||||
|
panic("implement me")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *FriendRequestMgo) Create(ctx context.Context, friendRequests []*relation.FriendRequestModel) error {
|
func (f *FriendRequestMgo) Create(ctx context.Context, friendRequests []*relation.FriendRequestModel) error {
|
||||||
@ -24,7 +50,7 @@ func (f *FriendRequestMgo) Create(ctx context.Context, friendRequests []*relatio
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *FriendRequestMgo) Delete(ctx context.Context, fromUserID, toUserID string) (err error) {
|
func (f *FriendRequestMgo) Delete(ctx context.Context, fromUserID, toUserID string) (err error) {
|
||||||
return mgotool.Delete[*relation.FriendRequestModel](ctx, f.coll, bson.M{"from_user_id": fromUserID, "to_user_id": toUserID})
|
return mgotool.DeleteOne(ctx, f.coll, bson.M{"from_user_id": fromUserID, "to_user_id": toUserID})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *FriendRequestMgo) UpdateByMap(ctx context.Context, formUserID, toUserID string, args map[string]any) (err error) {
|
func (f *FriendRequestMgo) UpdateByMap(ctx context.Context, formUserID, toUserID string, args map[string]any) (err error) {
|
||||||
@ -45,4 +71,3 @@ func (f *FriendRequestMgo) Find(ctx context.Context, fromUserID, toUserID string
|
|||||||
func (f *FriendRequestMgo) Take(ctx context.Context, fromUserID, toUserID string) (friendRequest *relation.FriendRequestModel, err error) {
|
func (f *FriendRequestMgo) Take(ctx context.Context, fromUserID, toUserID string) (friendRequest *relation.FriendRequestModel, err error) {
|
||||||
return f.Find(ctx, fromUserID, toUserID)
|
return f.Find(ctx, fromUserID, toUserID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,28 +9,16 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/mongo/options"
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
func basic[T any]() bool {
|
func basic[T any]() bool {
|
||||||
var t T
|
var t T
|
||||||
switch any(t).(type) {
|
switch any(t).(type) {
|
||||||
case int:
|
case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64, string, []byte:
|
||||||
case int8:
|
return true
|
||||||
case int16:
|
case *int, *int8, *int16, *int32, *int64, *uint, *uint8, *uint16, *uint32, *uint64, *float32, *float64, *string, *[]byte:
|
||||||
case int32:
|
return true
|
||||||
case int64:
|
|
||||||
case uint:
|
|
||||||
case uint8:
|
|
||||||
case uint16:
|
|
||||||
case uint32:
|
|
||||||
case uint64:
|
|
||||||
case float32:
|
|
||||||
case float64:
|
|
||||||
case string:
|
|
||||||
case []byte:
|
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func anes[T any](ts []T) []any {
|
func anes[T any](ts []T) []any {
|
||||||
@ -177,14 +165,6 @@ func DeleteMany(ctx context.Context, coll *mongo.Collection, filter any, opts ..
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
func Delete[T any](ctx context.Context, coll *mongo.Collection, filter any, opts ...*options.DeleteOptions) error {
|
|
||||||
if _, err := coll.DeleteMany(ctx, filter, opts...); err != nil {
|
|
||||||
return errs.Wrap(err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Aggregate[T any](ctx context.Context, coll *mongo.Collection, pipeline any, opts ...*options.AggregateOptions) ([]T, error) {
|
func Aggregate[T any](ctx context.Context, coll *mongo.Collection, pipeline any, opts ...*options.AggregateOptions) ([]T, error) {
|
||||||
cur, err := coll.Aggregate(ctx, pipeline, opts...)
|
cur, err := coll.Aggregate(ctx, pipeline, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -14,98 +14,98 @@
|
|||||||
|
|
||||||
package relation
|
package relation
|
||||||
|
|
||||||
import (
|
//import (
|
||||||
"context"
|
// "context"
|
||||||
|
//
|
||||||
"github.com/OpenIMSDK/tools/errs"
|
// "github.com/OpenIMSDK/tools/errs"
|
||||||
|
//
|
||||||
"github.com/OpenIMSDK/tools/ormutil"
|
// "github.com/OpenIMSDK/tools/ormutil"
|
||||||
|
//
|
||||||
"gorm.io/gorm"
|
// "gorm.io/gorm"
|
||||||
|
//
|
||||||
"github.com/OpenIMSDK/tools/utils"
|
// "github.com/OpenIMSDK/tools/utils"
|
||||||
|
//
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
)
|
//)
|
||||||
|
//
|
||||||
type BlackGorm struct {
|
//type BlackGorm struct {
|
||||||
*MetaDB
|
// *MetaDB
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func NewBlackGorm(db *gorm.DB) relation.BlackModelInterface {
|
//func NewBlackGorm(db *gorm.DB) relation.BlackModelInterface {
|
||||||
return &BlackGorm{NewMetaDB(db, &relation.BlackModel{})}
|
// return &BlackGorm{NewMetaDB(db, &relation.BlackModel{})}
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) Create(ctx context.Context, blacks []*relation.BlackModel) (err error) {
|
//func (b *BlackGorm) Create(ctx context.Context, blacks []*relation.BlackModel) (err error) {
|
||||||
return utils.Wrap(b.db(ctx).Create(&blacks).Error, "")
|
// return utils.Wrap(b.db(ctx).Create(&blacks).Error, "")
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) Delete(ctx context.Context, blacks []*relation.BlackModel) (err error) {
|
//func (b *BlackGorm) Delete(ctx context.Context, blacks []*relation.BlackModel) (err error) {
|
||||||
return utils.Wrap(b.db(ctx).Delete(blacks).Error, "")
|
// return utils.Wrap(b.db(ctx).Delete(blacks).Error, "")
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) UpdateByMap(
|
//func (b *BlackGorm) UpdateByMap(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
ownerUserID, blockUserID string,
|
// ownerUserID, blockUserID string,
|
||||||
args map[string]any,
|
// args map[string]any,
|
||||||
) (err error) {
|
//) (err error) {
|
||||||
return utils.Wrap(
|
// return utils.Wrap(
|
||||||
b.db(ctx).Where("block_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Updates(args).Error,
|
// b.db(ctx).Where("block_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Updates(args).Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) Update(ctx context.Context, blacks []*relation.BlackModel) (err error) {
|
//func (b *BlackGorm) Update(ctx context.Context, blacks []*relation.BlackModel) (err error) {
|
||||||
return utils.Wrap(b.db(ctx).Updates(&blacks).Error, "")
|
// return utils.Wrap(b.db(ctx).Updates(&blacks).Error, "")
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) Find(
|
//func (b *BlackGorm) Find(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
blacks []*relation.BlackModel,
|
// blacks []*relation.BlackModel,
|
||||||
) (blackList []*relation.BlackModel, err error) {
|
//) (blackList []*relation.BlackModel, err error) {
|
||||||
var where [][]any
|
// var where [][]any
|
||||||
for _, black := range blacks {
|
// for _, black := range blacks {
|
||||||
where = append(where, []any{black.OwnerUserID, black.BlockUserID})
|
// where = append(where, []any{black.OwnerUserID, black.BlockUserID})
|
||||||
}
|
// }
|
||||||
return blackList, utils.Wrap(
|
// return blackList, utils.Wrap(
|
||||||
b.db(ctx).Where("(owner_user_id, block_user_id) in ?", where).Find(&blackList).Error,
|
// b.db(ctx).Where("(owner_user_id, block_user_id) in ?", where).Find(&blackList).Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) Take(ctx context.Context, ownerUserID, blockUserID string) (black *relation.BlackModel, err error) {
|
//func (b *BlackGorm) Take(ctx context.Context, ownerUserID, blockUserID string) (black *relation.BlackModel, err error) {
|
||||||
black = &relation.BlackModel{}
|
// black = &relation.BlackModel{}
|
||||||
return black, utils.Wrap(
|
// return black, utils.Wrap(
|
||||||
b.db(ctx).Where("owner_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Take(black).Error,
|
// b.db(ctx).Where("owner_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Take(black).Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) FindOwnerBlacks(
|
//func (b *BlackGorm) FindOwnerBlacks(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
ownerUserID string,
|
// ownerUserID string,
|
||||||
pageNumber, showNumber int32,
|
// pageNumber, showNumber int32,
|
||||||
) (blacks []*relation.BlackModel, total int64, err error) {
|
//) (blacks []*relation.BlackModel, total int64, err error) {
|
||||||
err = b.db(ctx).Count(&total).Error
|
// err = b.db(ctx).Count(&total).Error
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, 0, utils.Wrap(err, "")
|
// return nil, 0, utils.Wrap(err, "")
|
||||||
}
|
// }
|
||||||
totalUint32, blacks, err := ormutil.GormPage[relation.BlackModel](
|
// totalUint32, blacks, err := ormutil.GormPage[relation.BlackModel](
|
||||||
b.db(ctx).Where("owner_user_id = ?", ownerUserID),
|
// b.db(ctx).Where("owner_user_id = ?", ownerUserID),
|
||||||
pageNumber,
|
// pageNumber,
|
||||||
showNumber,
|
// showNumber,
|
||||||
)
|
// )
|
||||||
total = int64(totalUint32)
|
// total = int64(totalUint32)
|
||||||
return
|
// return
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) FindBlackUserIDs(ctx context.Context, ownerUserID string) (blackUserIDs []string, err error) {
|
//func (b *BlackGorm) FindBlackUserIDs(ctx context.Context, ownerUserID string) (blackUserIDs []string, err error) {
|
||||||
return blackUserIDs, utils.Wrap(
|
// return blackUserIDs, utils.Wrap(
|
||||||
b.db(ctx).Where("owner_user_id = ?", ownerUserID).Pluck("block_user_id", &blackUserIDs).Error,
|
// b.db(ctx).Where("owner_user_id = ?", ownerUserID).Pluck("block_user_id", &blackUserIDs).Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (b *BlackGorm) FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*relation.BlackModel, err error) {
|
//func (b *BlackGorm) FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*relation.BlackModel, err error) {
|
||||||
return blacks, errs.Wrap(b.db(ctx).Where("owner_user_id = ? and block_user_id in ?", ownerUserID, userIDs).Find(&blacks).Error)
|
// return blacks, errs.Wrap(b.db(ctx).Where("owner_user_id = ? and block_user_id in ?", ownerUserID, userIDs).Find(&blacks).Error)
|
||||||
}
|
//}
|
||||||
|
|||||||
@ -14,50 +14,51 @@
|
|||||||
|
|
||||||
package relation
|
package relation
|
||||||
|
|
||||||
import (
|
//
|
||||||
"github.com/golang/protobuf/jsonpb"
|
//import (
|
||||||
"github.com/jinzhu/copier"
|
// "github.com/golang/protobuf/jsonpb"
|
||||||
"google.golang.org/protobuf/proto"
|
// "github.com/jinzhu/copier"
|
||||||
"gorm.io/gorm"
|
// "google.golang.org/protobuf/proto"
|
||||||
|
// "gorm.io/gorm"
|
||||||
"github.com/OpenIMSDK/protocol/constant"
|
//
|
||||||
pbmsg "github.com/OpenIMSDK/protocol/msg"
|
// "github.com/OpenIMSDK/protocol/constant"
|
||||||
sdkws "github.com/OpenIMSDK/protocol/sdkws"
|
// pbmsg "github.com/OpenIMSDK/protocol/msg"
|
||||||
"github.com/OpenIMSDK/tools/utils"
|
// sdkws "github.com/OpenIMSDK/protocol/sdkws"
|
||||||
|
// "github.com/OpenIMSDK/tools/utils"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
//
|
||||||
)
|
// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
|
//)
|
||||||
type ChatLogGorm struct {
|
//
|
||||||
*MetaDB
|
//type ChatLogGorm struct {
|
||||||
}
|
// *MetaDB
|
||||||
|
//}
|
||||||
func NewChatLogGorm(db *gorm.DB) relation.ChatLogModelInterface {
|
//
|
||||||
return &ChatLogGorm{NewMetaDB(db, &relation.ChatLogModel{})}
|
//func NewChatLogGorm(db *gorm.DB) relation.ChatLogModelInterface {
|
||||||
}
|
// return &ChatLogGorm{NewMetaDB(db, &relation.ChatLogModel{})}
|
||||||
|
//}
|
||||||
func (c *ChatLogGorm) Create(msg *pbmsg.MsgDataToMQ) error {
|
//
|
||||||
chatLog := new(relation.ChatLogModel)
|
//func (c *ChatLogGorm) Create(msg *pbmsg.MsgDataToMQ) error {
|
||||||
copier.Copy(chatLog, msg.MsgData)
|
// chatLog := new(relation.ChatLogModel)
|
||||||
switch msg.MsgData.SessionType {
|
// copier.Copy(chatLog, msg.MsgData)
|
||||||
case constant.GroupChatType, constant.SuperGroupChatType:
|
// switch msg.MsgData.SessionType {
|
||||||
chatLog.RecvID = msg.MsgData.GroupID
|
// case constant.GroupChatType, constant.SuperGroupChatType:
|
||||||
case constant.SingleChatType:
|
// chatLog.RecvID = msg.MsgData.GroupID
|
||||||
chatLog.RecvID = msg.MsgData.RecvID
|
// case constant.SingleChatType:
|
||||||
}
|
// chatLog.RecvID = msg.MsgData.RecvID
|
||||||
if msg.MsgData.ContentType >= constant.NotificationBegin && msg.MsgData.ContentType <= constant.NotificationEnd {
|
// }
|
||||||
var tips sdkws.TipsComm
|
// if msg.MsgData.ContentType >= constant.NotificationBegin && msg.MsgData.ContentType <= constant.NotificationEnd {
|
||||||
_ = proto.Unmarshal(msg.MsgData.Content, &tips)
|
// var tips sdkws.TipsComm
|
||||||
marshaler := jsonpb.Marshaler{
|
// _ = proto.Unmarshal(msg.MsgData.Content, &tips)
|
||||||
OrigName: true,
|
// marshaler := jsonpb.Marshaler{
|
||||||
EnumsAsInts: false,
|
// OrigName: true,
|
||||||
EmitDefaults: false,
|
// EnumsAsInts: false,
|
||||||
}
|
// EmitDefaults: false,
|
||||||
chatLog.Content, _ = marshaler.MarshalToString(&tips)
|
// }
|
||||||
} else {
|
// chatLog.Content, _ = marshaler.MarshalToString(&tips)
|
||||||
chatLog.Content = string(msg.MsgData.Content)
|
// } else {
|
||||||
}
|
// chatLog.Content = string(msg.MsgData.Content)
|
||||||
chatLog.CreateTime = utils.UnixMillSecondToTime(msg.MsgData.CreateTime)
|
// }
|
||||||
chatLog.SendTime = utils.UnixMillSecondToTime(msg.MsgData.SendTime)
|
// chatLog.CreateTime = utils.UnixMillSecondToTime(msg.MsgData.CreateTime)
|
||||||
return c.DB.Create(chatLog).Error
|
// chatLog.SendTime = utils.UnixMillSecondToTime(msg.MsgData.SendTime)
|
||||||
}
|
// return c.DB.Create(chatLog).Error
|
||||||
|
//}
|
||||||
|
|||||||
@ -14,180 +14,180 @@
|
|||||||
|
|
||||||
package relation
|
package relation
|
||||||
|
|
||||||
import (
|
//import (
|
||||||
"context"
|
// "context"
|
||||||
|
//
|
||||||
"gorm.io/gorm"
|
// "gorm.io/gorm"
|
||||||
|
//
|
||||||
"github.com/OpenIMSDK/tools/utils"
|
// "github.com/OpenIMSDK/tools/utils"
|
||||||
|
//
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
// "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
||||||
)
|
//)
|
||||||
|
//
|
||||||
type FriendGorm struct {
|
//type FriendGorm struct {
|
||||||
*MetaDB
|
// *MetaDB
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func NewFriendGorm(db *gorm.DB) relation.FriendModelInterface {
|
//func NewFriendGorm(db *gorm.DB) relation.FriendModelInterface {
|
||||||
return &FriendGorm{NewMetaDB(db, &relation.FriendModel{})}
|
// return &FriendGorm{NewMetaDB(db, &relation.FriendModel{})}
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (f *FriendGorm) NewTx(tx any) relation.FriendModelInterface {
|
//func (f *FriendGorm) NewTx(tx any) relation.FriendModelInterface {
|
||||||
return &FriendGorm{NewMetaDB(tx.(*gorm.DB), &relation.FriendModel{})}
|
// return &FriendGorm{NewMetaDB(tx.(*gorm.DB), &relation.FriendModel{})}
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 插入多条记录.
|
//// 插入多条记录.
|
||||||
func (f *FriendGorm) Create(ctx context.Context, friends []*relation.FriendModel) (err error) {
|
//func (f *FriendGorm) Create(ctx context.Context, friends []*relation.FriendModel) (err error) {
|
||||||
return utils.Wrap(f.db(ctx).Create(&friends).Error, "")
|
// return utils.Wrap(f.db(ctx).Create(&friends).Error, "")
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 删除ownerUserID指定的好友.
|
//// 删除ownerUserID指定的好友.
|
||||||
func (f *FriendGorm) Delete(ctx context.Context, ownerUserID string, friendUserIDs []string) (err error) {
|
//func (f *FriendGorm) Delete(ctx context.Context, ownerUserID string, friendUserIDs []string) (err error) {
|
||||||
err = utils.Wrap(
|
// err = utils.Wrap(
|
||||||
f.db(ctx).
|
// f.db(ctx).
|
||||||
Where("owner_user_id = ? AND friend_user_id in ( ?)", ownerUserID, friendUserIDs).
|
// Where("owner_user_id = ? AND friend_user_id in ( ?)", ownerUserID, friendUserIDs).
|
||||||
Delete(&relation.FriendModel{}).
|
// Delete(&relation.FriendModel{}).
|
||||||
Error,
|
// Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 更新ownerUserID单个好友信息 更新零值.
|
//// 更新ownerUserID单个好友信息 更新零值.
|
||||||
func (f *FriendGorm) UpdateByMap(
|
//func (f *FriendGorm) UpdateByMap(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
ownerUserID string,
|
// ownerUserID string,
|
||||||
friendUserID string,
|
// friendUserID string,
|
||||||
args map[string]any,
|
// args map[string]any,
|
||||||
) (err error) {
|
//) (err error) {
|
||||||
return utils.Wrap(
|
// return utils.Wrap(
|
||||||
f.db(ctx).Where("owner_user_id = ? AND friend_user_id = ? ", ownerUserID, friendUserID).Updates(args).Error,
|
// f.db(ctx).Where("owner_user_id = ? AND friend_user_id = ? ", ownerUserID, friendUserID).Updates(args).Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 更新好友信息的非零值.
|
//// 更新好友信息的非零值.
|
||||||
func (f *FriendGorm) Update(ctx context.Context, friends []*relation.FriendModel) (err error) {
|
//func (f *FriendGorm) Update(ctx context.Context, friends []*relation.FriendModel) (err error) {
|
||||||
return utils.Wrap(f.db(ctx).Updates(&friends).Error, "")
|
// return utils.Wrap(f.db(ctx).Updates(&friends).Error, "")
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 更新好友备注(也支持零值 ).
|
//// 更新好友备注(也支持零值 ).
|
||||||
func (f *FriendGorm) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error) {
|
//func (f *FriendGorm) UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error) {
|
||||||
if remark != "" {
|
// if remark != "" {
|
||||||
return utils.Wrap(
|
// return utils.Wrap(
|
||||||
f.db(ctx).
|
// f.db(ctx).
|
||||||
Where("owner_user_id = ? and friend_user_id = ?", ownerUserID, friendUserID).
|
// Where("owner_user_id = ? and friend_user_id = ?", ownerUserID, friendUserID).
|
||||||
Update("remark", remark).
|
// Update("remark", remark).
|
||||||
Error,
|
// Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
m := make(map[string]any, 1)
|
// m := make(map[string]any, 1)
|
||||||
m["remark"] = ""
|
// m["remark"] = ""
|
||||||
return utils.Wrap(f.db(ctx).Where("owner_user_id = ?", ownerUserID).Updates(m).Error, "")
|
// return utils.Wrap(f.db(ctx).Where("owner_user_id = ?", ownerUserID).Updates(m).Error, "")
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 获取单个好友信息,如没找到 返回错误.
|
//// 获取单个好友信息,如没找到 返回错误.
|
||||||
func (f *FriendGorm) Take(
|
//func (f *FriendGorm) Take(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
ownerUserID, friendUserID string,
|
// ownerUserID, friendUserID string,
|
||||||
) (friend *relation.FriendModel, err error) {
|
//) (friend *relation.FriendModel, err error) {
|
||||||
friend = &relation.FriendModel{}
|
// friend = &relation.FriendModel{}
|
||||||
return friend, utils.Wrap(
|
// return friend, utils.Wrap(
|
||||||
f.db(ctx).Where("owner_user_id = ? and friend_user_id", ownerUserID, friendUserID).Take(friend).Error,
|
// f.db(ctx).Where("owner_user_id = ? and friend_user_id", ownerUserID, friendUserID).Take(friend).Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 查找好友关系,如果是双向关系,则都返回.
|
//// 查找好友关系,如果是双向关系,则都返回.
|
||||||
func (f *FriendGorm) FindUserState(
|
//func (f *FriendGorm) FindUserState(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
userID1, userID2 string,
|
// userID1, userID2 string,
|
||||||
) (friends []*relation.FriendModel, err error) {
|
//) (friends []*relation.FriendModel, err error) {
|
||||||
return friends, utils.Wrap(
|
// return friends, utils.Wrap(
|
||||||
f.db(ctx).
|
// f.db(ctx).
|
||||||
Where("(owner_user_id = ? and friend_user_id = ?) or (owner_user_id = ? and friend_user_id = ?)", userID1, userID2, userID2, userID1).
|
// Where("(owner_user_id = ? and friend_user_id = ?) or (owner_user_id = ? and friend_user_id = ?)", userID1, userID2, userID2, userID1).
|
||||||
Find(&friends).
|
// Find(&friends).
|
||||||
Error,
|
// Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 获取 owner指定的好友列表 如果有friendUserIDs不存在,也不返回错误.
|
//// 获取 owner指定的好友列表 如果有friendUserIDs不存在,也不返回错误.
|
||||||
func (f *FriendGorm) FindFriends(
|
//func (f *FriendGorm) FindFriends(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
ownerUserID string,
|
// ownerUserID string,
|
||||||
friendUserIDs []string,
|
// friendUserIDs []string,
|
||||||
) (friends []*relation.FriendModel, err error) {
|
//) (friends []*relation.FriendModel, err error) {
|
||||||
return friends, utils.Wrap(
|
// return friends, utils.Wrap(
|
||||||
f.db(ctx).Where("owner_user_id = ? AND friend_user_id in (?)", ownerUserID, friendUserIDs).Find(&friends).Error,
|
// f.db(ctx).Where("owner_user_id = ? AND friend_user_id in (?)", ownerUserID, friendUserIDs).Find(&friends).Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 获取哪些人添加了friendUserID 如果有ownerUserIDs不存在,也不返回错误.
|
//// 获取哪些人添加了friendUserID 如果有ownerUserIDs不存在,也不返回错误.
|
||||||
func (f *FriendGorm) FindReversalFriends(
|
//func (f *FriendGorm) FindReversalFriends(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
friendUserID string,
|
// friendUserID string,
|
||||||
ownerUserIDs []string,
|
// ownerUserIDs []string,
|
||||||
) (friends []*relation.FriendModel, err error) {
|
//) (friends []*relation.FriendModel, err error) {
|
||||||
return friends, utils.Wrap(
|
// return friends, utils.Wrap(
|
||||||
f.db(ctx).Where("friend_user_id = ? AND owner_user_id in (?)", friendUserID, ownerUserIDs).Find(&friends).Error,
|
// f.db(ctx).Where("friend_user_id = ? AND owner_user_id in (?)", friendUserID, ownerUserIDs).Find(&friends).Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 获取ownerUserID好友列表 支持翻页.
|
//// 获取ownerUserID好友列表 支持翻页.
|
||||||
func (f *FriendGorm) FindOwnerFriends(
|
//func (f *FriendGorm) FindOwnerFriends(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
ownerUserID string,
|
// ownerUserID string,
|
||||||
pageNumber, showNumber int32,
|
// pageNumber, showNumber int32,
|
||||||
) (friends []*relation.FriendModel, total int64, err error) {
|
//) (friends []*relation.FriendModel, total int64, err error) {
|
||||||
err = f.DB.Model(&relation.FriendModel{}).Where("owner_user_id = ? ", ownerUserID).Count(&total).Error
|
// err = f.DB.Model(&relation.FriendModel{}).Where("owner_user_id = ? ", ownerUserID).Count(&total).Error
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, 0, utils.Wrap(err, "")
|
// return nil, 0, utils.Wrap(err, "")
|
||||||
}
|
// }
|
||||||
err = utils.Wrap(
|
// err = utils.Wrap(
|
||||||
f.db(ctx).
|
// f.db(ctx).
|
||||||
Where("owner_user_id = ? ", ownerUserID).
|
// Where("owner_user_id = ? ", ownerUserID).
|
||||||
Limit(int(showNumber)).
|
// Limit(int(showNumber)).
|
||||||
Offset(int((pageNumber-1)*showNumber)).
|
// Offset(int((pageNumber-1)*showNumber)).
|
||||||
Find(&friends).
|
// Find(&friends).
|
||||||
Error,
|
// Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
return
|
// return
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 获取哪些人添加了friendUserID 支持翻页.
|
//// 获取哪些人添加了friendUserID 支持翻页.
|
||||||
func (f *FriendGorm) FindInWhoseFriends(
|
//func (f *FriendGorm) FindInWhoseFriends(
|
||||||
ctx context.Context,
|
// ctx context.Context,
|
||||||
friendUserID string,
|
// friendUserID string,
|
||||||
pageNumber, showNumber int32,
|
// pageNumber, showNumber int32,
|
||||||
) (friends []*relation.FriendModel, total int64, err error) {
|
//) (friends []*relation.FriendModel, total int64, err error) {
|
||||||
err = f.DB.Model(&relation.FriendModel{}).Where("friend_user_id = ? ", friendUserID).Count(&total).Error
|
// err = f.DB.Model(&relation.FriendModel{}).Where("friend_user_id = ? ", friendUserID).Count(&total).Error
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, 0, utils.Wrap(err, "")
|
// return nil, 0, utils.Wrap(err, "")
|
||||||
}
|
// }
|
||||||
err = utils.Wrap(
|
// err = utils.Wrap(
|
||||||
f.db(ctx).
|
// f.db(ctx).
|
||||||
Where("friend_user_id = ? ", friendUserID).
|
// Where("friend_user_id = ? ", friendUserID).
|
||||||
Limit(int(showNumber)).
|
// Limit(int(showNumber)).
|
||||||
Offset(int((pageNumber-1)*showNumber)).
|
// Offset(int((pageNumber-1)*showNumber)).
|
||||||
Find(&friends).
|
// Find(&friends).
|
||||||
Error,
|
// Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
return
|
// return
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (f *FriendGorm) FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error) {
|
//func (f *FriendGorm) FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error) {
|
||||||
return friendUserIDs, utils.Wrap(
|
// return friendUserIDs, utils.Wrap(
|
||||||
f.db(ctx).
|
// f.db(ctx).
|
||||||
Model(&relation.FriendModel{}).
|
// Model(&relation.FriendModel{}).
|
||||||
Where("owner_user_id = ? ", ownerUserID).
|
// Where("owner_user_id = ? ", ownerUserID).
|
||||||
Pluck("friend_user_id", &friendUserIDs).
|
// Pluck("friend_user_id", &friendUserIDs).
|
||||||
Error,
|
// Error,
|
||||||
"",
|
// "",
|
||||||
)
|
// )
|
||||||
}
|
//}
|
||||||
|
|||||||
@ -1,38 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package relation
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
type MetaDB struct {
|
|
||||||
DB *gorm.DB
|
|
||||||
table any
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMetaDB(db *gorm.DB, table any) *MetaDB {
|
|
||||||
return &MetaDB{
|
|
||||||
DB: db,
|
|
||||||
table: table,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *MetaDB) db(ctx context.Context) *gorm.DB {
|
|
||||||
db := g.DB.WithContext(ctx).Model(g.table)
|
|
||||||
return db
|
|
||||||
}
|
|
||||||
@ -1,157 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package relation
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/OpenIMSDK/tools/errs"
|
|
||||||
"github.com/OpenIMSDK/tools/log"
|
|
||||||
"github.com/OpenIMSDK/tools/mw/specialerror"
|
|
||||||
mysqldriver "github.com/go-sql-driver/mysql"
|
|
||||||
"gorm.io/driver/mysql"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"gorm.io/gorm/logger"
|
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
maxRetry = 100 // number of retries
|
|
||||||
)
|
|
||||||
|
|
||||||
type option struct {
|
|
||||||
Username string
|
|
||||||
Password string
|
|
||||||
Address []string
|
|
||||||
Database string
|
|
||||||
LogLevel int
|
|
||||||
SlowThreshold int
|
|
||||||
MaxLifeTime int
|
|
||||||
MaxOpenConn int
|
|
||||||
MaxIdleConn int
|
|
||||||
Connect func(dsn string, maxRetry int) (*gorm.DB, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// newMysqlGormDB Initialize the database connection.
|
|
||||||
func newMysqlGormDB(o *option) (*gorm.DB, error) {
|
|
||||||
err := maybeCreateTable(o)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
|
||||||
o.Username, o.Password, o.Address[0], o.Database)
|
|
||||||
sqlLogger := log.NewSqlLogger(
|
|
||||||
logger.LogLevel(o.LogLevel),
|
|
||||||
true,
|
|
||||||
time.Duration(o.SlowThreshold)*time.Millisecond,
|
|
||||||
)
|
|
||||||
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
|
|
||||||
Logger: sqlLogger,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
sqlDB, err := db.DB()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
sqlDB.SetConnMaxLifetime(time.Second * time.Duration(o.MaxLifeTime))
|
|
||||||
sqlDB.SetMaxOpenConns(o.MaxOpenConn)
|
|
||||||
sqlDB.SetMaxIdleConns(o.MaxIdleConn)
|
|
||||||
return db, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// maybeCreateTable creates a database if it does not exists.
|
|
||||||
func maybeCreateTable(o *option) error {
|
|
||||||
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
|
||||||
o.Username, o.Password, o.Address[0], "mysql")
|
|
||||||
|
|
||||||
var db *gorm.DB
|
|
||||||
var err error
|
|
||||||
if f := o.Connect; f != nil {
|
|
||||||
db, err = f(dsn, maxRetry)
|
|
||||||
} else {
|
|
||||||
db, err = connectToDatabase(dsn, maxRetry)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
panic(err.Error() + " Open failed " + dsn)
|
|
||||||
}
|
|
||||||
|
|
||||||
sqlDB, err := db.DB()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer sqlDB.Close()
|
|
||||||
sql := fmt.Sprintf(
|
|
||||||
"CREATE DATABASE IF NOT EXISTS `%s` default charset utf8mb4 COLLATE utf8mb4_unicode_ci",
|
|
||||||
o.Database,
|
|
||||||
)
|
|
||||||
err = db.Exec(sql).Error
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("init db %w", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// connectToDatabase Connection retry for mysql.
|
|
||||||
func connectToDatabase(dsn string, maxRetry int) (*gorm.DB, error) {
|
|
||||||
var db *gorm.DB
|
|
||||||
var err error
|
|
||||||
for i := 0; i <= maxRetry; i++ {
|
|
||||||
db, err = gorm.Open(mysql.Open(dsn), nil)
|
|
||||||
if err == nil {
|
|
||||||
return db, nil
|
|
||||||
}
|
|
||||||
if mysqlErr, ok := err.(*mysqldriver.MySQLError); ok && mysqlErr.Number == 1045 {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
time.Sleep(time.Duration(1) * time.Second)
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewGormDB gorm mysql.
|
|
||||||
func NewGormDB() (*gorm.DB, error) {
|
|
||||||
specialerror.AddReplace(gorm.ErrRecordNotFound, errs.ErrRecordNotFound)
|
|
||||||
specialerror.AddErrHandler(replaceDuplicateKey)
|
|
||||||
|
|
||||||
return newMysqlGormDB(&option{
|
|
||||||
Username: config.Config.Mysql.Username,
|
|
||||||
Password: config.Config.Mysql.Password,
|
|
||||||
Address: config.Config.Mysql.Address,
|
|
||||||
Database: config.Config.Mysql.Database,
|
|
||||||
LogLevel: config.Config.Mysql.LogLevel,
|
|
||||||
SlowThreshold: config.Config.Mysql.SlowThreshold,
|
|
||||||
MaxLifeTime: config.Config.Mysql.MaxLifeTime,
|
|
||||||
MaxOpenConn: config.Config.Mysql.MaxOpenConn,
|
|
||||||
MaxIdleConn: config.Config.Mysql.MaxIdleConn,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func replaceDuplicateKey(err error) errs.CodeError {
|
|
||||||
if IsMysqlDuplicateKey(err) {
|
|
||||||
return errs.ErrDuplicateKey
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsMysqlDuplicateKey(err error) bool {
|
|
||||||
if mysqlErr, ok := err.(*mysqldriver.MySQLError); ok {
|
|
||||||
return mysqlErr.Number == 1062
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
@ -1,121 +0,0 @@
|
|||||||
package relation
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"database/sql"
|
|
||||||
"database/sql/driver"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"reflect"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"gorm.io/driver/mysql"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"gorm.io/gorm/logger"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestMaybeCreateTable(t *testing.T) {
|
|
||||||
t.Run("normal", func(t *testing.T) {
|
|
||||||
err := maybeCreateTable(&option{
|
|
||||||
Username: "root",
|
|
||||||
Password: "openIM123",
|
|
||||||
Address: []string{"172.28.0.1:13306"},
|
|
||||||
Database: "openIM_v3",
|
|
||||||
LogLevel: 4,
|
|
||||||
SlowThreshold: 500,
|
|
||||||
MaxOpenConn: 1000,
|
|
||||||
MaxIdleConn: 100,
|
|
||||||
MaxLifeTime: 60,
|
|
||||||
Connect: connect(expectExec{
|
|
||||||
query: "CREATE DATABASE IF NOT EXISTS `openIM_v3` default charset utf8mb4 COLLATE utf8mb4_unicode_ci",
|
|
||||||
args: nil,
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("im-db", func(t *testing.T) {
|
|
||||||
err := maybeCreateTable(&option{
|
|
||||||
Username: "root",
|
|
||||||
Password: "openIM123",
|
|
||||||
Address: []string{"172.28.0.1:13306"},
|
|
||||||
Database: "im-db",
|
|
||||||
LogLevel: 4,
|
|
||||||
SlowThreshold: 500,
|
|
||||||
MaxOpenConn: 1000,
|
|
||||||
MaxIdleConn: 100,
|
|
||||||
MaxLifeTime: 60,
|
|
||||||
Connect: connect(expectExec{
|
|
||||||
query: "CREATE DATABASE IF NOT EXISTS `im-db` default charset utf8mb4 COLLATE utf8mb4_unicode_ci",
|
|
||||||
args: nil,
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("err", func(t *testing.T) {
|
|
||||||
e := errors.New("e")
|
|
||||||
err := maybeCreateTable(&option{
|
|
||||||
Username: "root",
|
|
||||||
Password: "openIM123",
|
|
||||||
Address: []string{"172.28.0.1:13306"},
|
|
||||||
Database: "openIM_v3",
|
|
||||||
LogLevel: 4,
|
|
||||||
SlowThreshold: 500,
|
|
||||||
MaxOpenConn: 1000,
|
|
||||||
MaxIdleConn: 100,
|
|
||||||
MaxLifeTime: 60,
|
|
||||||
Connect: connect(expectExec{
|
|
||||||
err: e,
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
if !errors.Is(err, e) {
|
|
||||||
t.Fatalf("err not is e: %v", err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func connect(e expectExec) func(string, int) (*gorm.DB, error) {
|
|
||||||
return func(string, int) (*gorm.DB, error) {
|
|
||||||
return gorm.Open(mysql.New(mysql.Config{
|
|
||||||
SkipInitializeWithVersion: true,
|
|
||||||
Conn: sql.OpenDB(e),
|
|
||||||
}), &gorm.Config{
|
|
||||||
Logger: logger.Discard,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type expectExec struct {
|
|
||||||
err error
|
|
||||||
query string
|
|
||||||
args []driver.NamedValue
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c expectExec) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) {
|
|
||||||
if c.err != nil {
|
|
||||||
return nil, c.err
|
|
||||||
}
|
|
||||||
if query != c.query {
|
|
||||||
return nil, fmt.Errorf("query mismatch. expect: %s, got: %s", c.query, query)
|
|
||||||
}
|
|
||||||
if reflect.DeepEqual(args, c.args) {
|
|
||||||
return nil, fmt.Errorf("args mismatch. expect: %v, got: %v", c.args, args)
|
|
||||||
}
|
|
||||||
return noEffectResult{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e expectExec) Connect(context.Context) (driver.Conn, error) { return e, nil }
|
|
||||||
func (expectExec) Driver() driver.Driver { panic("not implemented") }
|
|
||||||
func (expectExec) Prepare(query string) (driver.Stmt, error) { panic("not implemented") }
|
|
||||||
func (expectExec) Close() (e error) { return }
|
|
||||||
func (expectExec) Begin() (driver.Tx, error) { panic("not implemented") }
|
|
||||||
|
|
||||||
type noEffectResult struct{}
|
|
||||||
|
|
||||||
func (noEffectResult) LastInsertId() (i int64, e error) { return }
|
|
||||||
func (noEffectResult) RowsAffected() (i int64, e error) { return }
|
|
||||||
@ -16,34 +16,27 @@ package relation
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
BlackModelTableName = "blacks"
|
|
||||||
)
|
|
||||||
|
|
||||||
type BlackModel struct {
|
type BlackModel struct {
|
||||||
OwnerUserID string `gorm:"column:owner_user_id;primary_key;size:64"`
|
OwnerUserID string `bson:"owner_user_id"`
|
||||||
BlockUserID string `gorm:"column:block_user_id;primary_key;size:64"`
|
BlockUserID string `bson:"block_user_id"`
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
CreateTime time.Time `bson:"create_time"`
|
||||||
AddSource int32 `gorm:"column:add_source"`
|
AddSource int32 `bson:"add_source"`
|
||||||
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
|
OperatorUserID string `bson:"operator_user_id"`
|
||||||
Ex string `gorm:"column:ex;size:1024"`
|
Ex string `bson:"ex"`
|
||||||
}
|
|
||||||
|
|
||||||
func (BlackModel) TableName() string {
|
|
||||||
return BlackModelTableName
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type BlackModelInterface interface {
|
type BlackModelInterface interface {
|
||||||
Create(ctx context.Context, blacks []*BlackModel) (err error)
|
Create(ctx context.Context, blacks []*BlackModel) (err error)
|
||||||
Delete(ctx context.Context, blacks []*BlackModel) (err error)
|
Delete(ctx context.Context, blacks []*BlackModel) (err error)
|
||||||
UpdateByMap(ctx context.Context, ownerUserID, blockUserID string, args map[string]any) (err error)
|
//UpdateByMap(ctx context.Context, ownerUserID, blockUserID string, args map[string]any) (err error)
|
||||||
Update(ctx context.Context, blacks []*BlackModel) (err error)
|
//Update(ctx context.Context, blacks []*BlackModel) (err error)
|
||||||
Find(ctx context.Context, blacks []*BlackModel) (blackList []*BlackModel, err error)
|
Find(ctx context.Context, blacks []*BlackModel) (blackList []*BlackModel, err error)
|
||||||
Take(ctx context.Context, ownerUserID, blockUserID string) (black *BlackModel, err error)
|
Take(ctx context.Context, ownerUserID, blockUserID string) (black *BlackModel, err error)
|
||||||
FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blacks []*BlackModel, total int64, err error)
|
FindOwnerBlacks(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (total int64, blacks []*BlackModel, err error)
|
||||||
FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*BlackModel, err error)
|
FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*BlackModel, err error)
|
||||||
FindBlackUserIDs(ctx context.Context, ownerUserID string) (blackUserIDs []string, err error)
|
FindBlackUserIDs(ctx context.Context, ownerUserID string) (blackUserIDs []string, err error)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,51 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package relation
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
pbmsg "github.com/OpenIMSDK/protocol/msg"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
ChatLogModelTableName = "chat_logs"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ChatLogModel struct {
|
|
||||||
ServerMsgID string `gorm:"column:server_msg_id;primary_key;type:char(64)" json:"serverMsgID"`
|
|
||||||
ClientMsgID string `gorm:"column:client_msg_id;type:char(64)" json:"clientMsgID"`
|
|
||||||
SendID string `gorm:"column:send_id;type:char(64);index:send_id,priority:2" json:"sendID"`
|
|
||||||
RecvID string `gorm:"column:recv_id;type:char(64);index:recv_id,priority:2" json:"recvID"`
|
|
||||||
SenderPlatformID int32 `gorm:"column:sender_platform_id" json:"senderPlatformID"`
|
|
||||||
SenderNickname string `gorm:"column:sender_nick_name;type:varchar(255)" json:"senderNickname"`
|
|
||||||
SenderFaceURL string `gorm:"column:sender_face_url;type:varchar(255);" json:"senderFaceURL"`
|
|
||||||
SessionType int32 `gorm:"column:session_type;index:session_type,priority:2;index:session_type_alone" json:"sessionType"`
|
|
||||||
MsgFrom int32 `gorm:"column:msg_from" json:"msgFrom"`
|
|
||||||
ContentType int32 `gorm:"column:content_type;index:content_type,priority:2;index:content_type_alone" json:"contentType"`
|
|
||||||
Content string `gorm:"column:content;type:varchar(3000)" json:"content"`
|
|
||||||
Status int32 `gorm:"column:status" json:"status"`
|
|
||||||
SendTime time.Time `gorm:"column:send_time;index:sendTime;index:content_type,priority:1;index:session_type,priority:1;index:recv_id,priority:1;index:send_id,priority:1" json:"sendTime"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ChatLogModel) TableName() string {
|
|
||||||
return ChatLogModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type ChatLogModelInterface interface {
|
|
||||||
Create(msg *pbmsg.MsgDataToMQ) error
|
|
||||||
}
|
|
||||||
@ -20,31 +20,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
conversationModelTableName = "conversations"
|
|
||||||
)
|
|
||||||
|
|
||||||
//type ConversationModel struct {
|
|
||||||
// OwnerUserID string `gorm:"column:owner_user_id;primary_key;type:char(128)" json:"OwnerUserID"`
|
|
||||||
// ConversationID string `gorm:"column:conversation_id;primary_key;type:char(128)" json:"conversationID"`
|
|
||||||
// ConversationType int32 `gorm:"column:conversation_type" json:"conversationType"`
|
|
||||||
// UserID string `gorm:"column:user_id;type:char(64)" json:"userID"`
|
|
||||||
// GroupID string `gorm:"column:group_id;type:char(128)" json:"groupID"`
|
|
||||||
// RecvMsgOpt int32 `gorm:"column:recv_msg_opt" json:"recvMsgOpt"`
|
|
||||||
// IsPinned bool `gorm:"column:is_pinned" json:"isPinned"`
|
|
||||||
// IsPrivateChat bool `gorm:"column:is_private_chat" json:"isPrivateChat"`
|
|
||||||
// BurnDuration int32 `gorm:"column:burn_duration;default:30" json:"burnDuration"`
|
|
||||||
// GroupAtType int32 `gorm:"column:group_at_type" json:"groupAtType"`
|
|
||||||
// AttachedInfo string `gorm:"column:attached_info;type:varchar(1024)" json:"attachedInfo"`
|
|
||||||
// Ex string `gorm:"column:ex;type:varchar(1024)" json:"ex"`
|
|
||||||
// MaxSeq int64 `gorm:"column:max_seq" json:"maxSeq"`
|
|
||||||
// MinSeq int64 `gorm:"column:min_seq" json:"minSeq"`
|
|
||||||
// CreateTime time.Time `gorm:"column:create_time;index:create_time;autoCreateTime"`
|
|
||||||
// IsMsgDestruct bool `gorm:"column:is_msg_destruct;default:false"`
|
|
||||||
// MsgDestructTime int64 `gorm:"column:msg_destruct_time;default:604800"`
|
|
||||||
// LatestMsgDestructTime time.Time `gorm:"column:latest_msg_destruct_time;autoCreateTime"`
|
|
||||||
//}
|
|
||||||
|
|
||||||
type ConversationModel struct {
|
type ConversationModel struct {
|
||||||
OwnerUserID string `bson:"owner_user_id"`
|
OwnerUserID string `bson:"owner_user_id"`
|
||||||
ConversationID string `bson:"conversation_id"`
|
ConversationID string `bson:"conversation_id"`
|
||||||
@ -66,10 +41,6 @@ type ConversationModel struct {
|
|||||||
LatestMsgDestructTime time.Time `bson:"latest_msg_destruct_time"`
|
LatestMsgDestructTime time.Time `bson:"latest_msg_destruct_time"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ConversationModel) TableName() string {
|
|
||||||
return conversationModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type ConversationModelInterface interface {
|
type ConversationModelInterface interface {
|
||||||
Create(ctx context.Context, conversations []*ConversationModel) (err error)
|
Create(ctx context.Context, conversations []*ConversationModel) (err error)
|
||||||
Delete(ctx context.Context, groupIDs []string) (err error)
|
Delete(ctx context.Context, groupIDs []string) (err error)
|
||||||
@ -83,11 +54,9 @@ type ConversationModelInterface interface {
|
|||||||
FindUserIDAllConversations(ctx context.Context, userID string) (conversations []*ConversationModel, err error)
|
FindUserIDAllConversations(ctx context.Context, userID string) (conversations []*ConversationModel, err error)
|
||||||
FindRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) ([]string, error)
|
FindRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) ([]string, error)
|
||||||
GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string) (opt int, err error)
|
GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string) (opt int, err error)
|
||||||
//FindSuperGroupRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) ([]string, error)
|
|
||||||
GetAllConversationIDs(ctx context.Context) ([]string, error)
|
GetAllConversationIDs(ctx context.Context) ([]string, error)
|
||||||
GetAllConversationIDsNumber(ctx context.Context) (int64, error)
|
GetAllConversationIDsNumber(ctx context.Context) (int64, error)
|
||||||
PageConversationIDs(ctx context.Context, pagination pagination.Pagination) (conversationIDs []string, err error)
|
PageConversationIDs(ctx context.Context, pagination pagination.Pagination) (conversationIDs []string, err error)
|
||||||
//GetUserAllHasReadSeqs(ctx context.Context, ownerUserID string) (hashReadSeqs map[string]int64, err error)
|
|
||||||
GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*ConversationModel, error)
|
GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*ConversationModel, error)
|
||||||
GetConversationIDsNeedDestruct(ctx context.Context) ([]*ConversationModel, error)
|
GetConversationIDsNeedDestruct(ctx context.Context) ([]*ConversationModel, error)
|
||||||
GetConversationNotReceiveMessageUserIDs(ctx context.Context, conversationID string) ([]string, error)
|
GetConversationNotReceiveMessageUserIDs(ctx context.Context, conversationID string) ([]string, error)
|
||||||
|
|||||||
@ -1,15 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package relation // import "github.com/openimsdk/open-im-server/v3/pkg/common/db/table/relation"
|
|
||||||
@ -16,23 +16,12 @@ package relation
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
FriendModelCollectionName = "friends"
|
|
||||||
)
|
|
||||||
|
|
||||||
// OwnerUserID string `gorm:"column:owner_user_id;primary_key;size:64"`
|
|
||||||
// FriendUserID string `gorm:"column:friend_user_id;primary_key;size:64"`
|
|
||||||
// Remark string `gorm:"column:remark;size:255"`
|
|
||||||
// CreateTime time.Time `gorm:"column:create_time;autoCreateTime"`
|
|
||||||
// AddSource int32 `gorm:"column:add_source"`
|
|
||||||
// OperatorUserID string `gorm:"column:operator_user_id;size:64"`
|
|
||||||
// Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
|
|
||||||
// FriendModel represents the data structure for a friend relationship in MongoDB.
|
// FriendModel represents the data structure for a friend relationship in MongoDB.
|
||||||
type FriendModel struct {
|
type FriendModel struct {
|
||||||
ID primitive.ObjectID `bson:"_id,omitempty"`
|
ID primitive.ObjectID `bson:"_id,omitempty"`
|
||||||
@ -45,11 +34,6 @@ type FriendModel struct {
|
|||||||
Ex string `bson:"ex"`
|
Ex string `bson:"ex"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// CollectionName returns the name of the MongoDB collection.
|
|
||||||
func (FriendModel) CollectionName() string {
|
|
||||||
return FriendModelCollectionName
|
|
||||||
}
|
|
||||||
|
|
||||||
// FriendModelInterface defines the operations for managing friends in MongoDB.
|
// FriendModelInterface defines the operations for managing friends in MongoDB.
|
||||||
type FriendModelInterface interface {
|
type FriendModelInterface interface {
|
||||||
// Create inserts multiple friend records.
|
// Create inserts multiple friend records.
|
||||||
@ -58,9 +42,7 @@ type FriendModelInterface interface {
|
|||||||
Delete(ctx context.Context, ownerUserID string, friendUserIDs []string) (err error)
|
Delete(ctx context.Context, ownerUserID string, friendUserIDs []string) (err error)
|
||||||
// UpdateByMap updates specific fields of a friend document using a map.
|
// UpdateByMap updates specific fields of a friend document using a map.
|
||||||
UpdateByMap(ctx context.Context, ownerUserID string, friendUserID string, args map[string]any) (err error)
|
UpdateByMap(ctx context.Context, ownerUserID string, friendUserID string, args map[string]any) (err error)
|
||||||
// Update modifies multiple friend documents.
|
// UpdateRemark modify remarks.
|
||||||
// Update(ctx context.Context, friends []*FriendModel) (err error)
|
|
||||||
// UpdateRemark updates the remark for a specific friend.
|
|
||||||
UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error)
|
UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) (err error)
|
||||||
// Take retrieves a single friend document. Returns an error if not found.
|
// Take retrieves a single friend document. Returns an error if not found.
|
||||||
Take(ctx context.Context, ownerUserID, friendUserID string) (friend *FriendModel, err error)
|
Take(ctx context.Context, ownerUserID, friendUserID string) (friend *FriendModel, err error)
|
||||||
@ -71,11 +53,9 @@ type FriendModelInterface interface {
|
|||||||
// FindReversalFriends finds users who have added the specified user as a friend.
|
// FindReversalFriends finds users who have added the specified user as a friend.
|
||||||
FindReversalFriends(ctx context.Context, friendUserID string, ownerUserIDs []string) (friends []*FriendModel, err error)
|
FindReversalFriends(ctx context.Context, friendUserID string, ownerUserIDs []string) (friends []*FriendModel, err error)
|
||||||
// FindOwnerFriends retrieves a paginated list of friends for a given owner.
|
// FindOwnerFriends retrieves a paginated list of friends for a given owner.
|
||||||
FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (friends []*FriendModel, total int64, err error)
|
FindOwnerFriends(ctx context.Context, ownerUserID string, pagination pagination.Pagination) (total int64, friends []*FriendModel, err error)
|
||||||
// FindInWhoseFriends finds users who have added the specified user as a friend, with pagination.
|
// FindInWhoseFriends finds users who have added the specified user as a friend, with pagination.
|
||||||
FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) (friends []*FriendModel, total int64, err error)
|
FindInWhoseFriends(ctx context.Context, friendUserID string, pagination pagination.Pagination) (total int64, friends []*FriendModel, err error)
|
||||||
// FindFriendUserIDs retrieves a list of friend user IDs for a given owner.
|
// FindFriendUserIDs retrieves a list of friend user IDs for a given owner.
|
||||||
FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error)
|
FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error)
|
||||||
// NewTx creates a new transaction.
|
|
||||||
NewTx(tx any) FriendModelInterface
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,13 +16,12 @@ package relation
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/pagination"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
)
|
)
|
||||||
|
|
||||||
const FriendRequestModelCollectionName = "friend_requests"
|
|
||||||
|
|
||||||
type FriendRequestModel struct {
|
type FriendRequestModel struct {
|
||||||
ID primitive.ObjectID `bson:"_id,omitempty"`
|
ID primitive.ObjectID `bson:"_id,omitempty"`
|
||||||
FromUserID string `bson:"from_user_id"`
|
FromUserID string `bson:"from_user_id"`
|
||||||
@ -36,10 +35,6 @@ type FriendRequestModel struct {
|
|||||||
Ex string `bson:"ex"`
|
Ex string `bson:"ex"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (FriendRequestModel) CollectionName() string {
|
|
||||||
return FriendRequestModelCollectionName
|
|
||||||
}
|
|
||||||
|
|
||||||
type FriendRequestModelInterface interface {
|
type FriendRequestModelInterface interface {
|
||||||
// Insert multiple records
|
// Insert multiple records
|
||||||
Create(ctx context.Context, friendRequests []*FriendRequestModel) (err error)
|
Create(ctx context.Context, friendRequests []*FriendRequestModel) (err error)
|
||||||
@ -53,11 +48,10 @@ type FriendRequestModelInterface interface {
|
|||||||
Find(ctx context.Context, fromUserID, toUserID string) (friendRequest *FriendRequestModel, err error)
|
Find(ctx context.Context, fromUserID, toUserID string) (friendRequest *FriendRequestModel, err error)
|
||||||
Take(ctx context.Context, fromUserID, toUserID string) (friendRequest *FriendRequestModel, err error)
|
Take(ctx context.Context, fromUserID, toUserID string) (friendRequest *FriendRequestModel, err error)
|
||||||
// Get list of friend requests received by toUserID
|
// Get list of friend requests received by toUserID
|
||||||
FindToUserID(ctx context.Context,toUserID string,pageNumber, showNumber int32,) (friendRequests []*FriendRequestModel, total int64, err error)
|
FindToUserID(ctx context.Context, toUserID string, pagination pagination.Pagination) (total int64, friendRequests []*FriendRequestModel, err error)
|
||||||
// Get list of friend requests sent by fromUserID
|
// Get list of friend requests sent by fromUserID
|
||||||
FindFromUserID(ctx context.Context,fromUserID string,pageNumber, showNumber int32,) (friendRequests []*FriendRequestModel, total int64, err error)
|
FindFromUserID(ctx context.Context, fromUserID string, pagination pagination.Pagination) (total int64, friendRequests []*FriendRequestModel, err error)
|
||||||
FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*FriendRequestModel, err error)
|
FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*FriendRequestModel, err error)
|
||||||
NewTx(tx any) FriendRequestModelInterface
|
|
||||||
// Check if the record exists
|
// Check if the record exists
|
||||||
Exist(ctx context.Context, userID string) (exist bool, err error)
|
Exist(ctx context.Context, userID string) (exist bool, err error)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,28 +20,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
GroupModelTableName = "groups"
|
|
||||||
)
|
|
||||||
|
|
||||||
//type GroupModel struct {
|
|
||||||
// GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"`
|
|
||||||
// GroupName string `gorm:"column:name;size:255" json:"groupName"`
|
|
||||||
// Notification string `gorm:"column:notification;size:255" json:"notification"`
|
|
||||||
// Introduction string `gorm:"column:introduction;size:255" json:"introduction"`
|
|
||||||
// FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"`
|
|
||||||
// CreateTime time.Time `gorm:"column:create_time;index:create_time;autoCreateTime"`
|
|
||||||
// Ex string `gorm:"column:ex" json:"ex;size:1024"`
|
|
||||||
// Status int32 `gorm:"column:status"`
|
|
||||||
// CreatorUserID string `gorm:"column:creator_user_id;size:64"`
|
|
||||||
// GroupType int32 `gorm:"column:group_type"`
|
|
||||||
// NeedVerification int32 `gorm:"column:need_verification"`
|
|
||||||
// LookMemberInfo int32 `gorm:"column:look_member_info" json:"lookMemberInfo"`
|
|
||||||
// ApplyMemberFriend int32 `gorm:"column:apply_member_friend" json:"applyMemberFriend"`
|
|
||||||
// NotificationUpdateTime time.Time `gorm:"column:notification_update_time"`
|
|
||||||
// NotificationUserID string `gorm:"column:notification_user_id;size:64"`
|
|
||||||
//}
|
|
||||||
|
|
||||||
type GroupModel struct {
|
type GroupModel struct {
|
||||||
GroupID string `bson:"group_id"`
|
GroupID string `bson:"group_id"`
|
||||||
GroupName string `bson:"group_name"`
|
GroupName string `bson:"group_name"`
|
||||||
@ -60,10 +38,6 @@ type GroupModel struct {
|
|||||||
NotificationUserID string `bson:"notification_user_id"`
|
NotificationUserID string `bson:"notification_user_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (GroupModel) TableName() string {
|
|
||||||
return GroupModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type GroupModelInterface interface {
|
type GroupModelInterface interface {
|
||||||
Create(ctx context.Context, groups []*GroupModel) (err error)
|
Create(ctx context.Context, groups []*GroupModel) (err error)
|
||||||
UpdateMap(ctx context.Context, groupID string, args map[string]any) (err error)
|
UpdateMap(ctx context.Context, groupID string, args map[string]any) (err error)
|
||||||
|
|||||||
@ -20,24 +20,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
GroupMemberModelTableName = "group_members"
|
|
||||||
)
|
|
||||||
|
|
||||||
//type GroupMemberModel struct {
|
|
||||||
// GroupID string `gorm:"column:group_id;primary_key;size:64"`
|
|
||||||
// UserID string `gorm:"column:user_id;primary_key;size:64"`
|
|
||||||
// Nickname string `gorm:"column:nickname;size:255"`
|
|
||||||
// FaceURL string `gorm:"column:user_group_face_url;size:255"`
|
|
||||||
// RoleLevel int32 `gorm:"column:role_level"`
|
|
||||||
// JoinTime time.Time `gorm:"column:join_time"`
|
|
||||||
// JoinSource int32 `gorm:"column:join_source"`
|
|
||||||
// InviterUserID string `gorm:"column:inviter_user_id;size:64"`
|
|
||||||
// OperatorUserID string `gorm:"column:operator_user_id;size:64"`
|
|
||||||
// MuteEndTime time.Time `gorm:"column:mute_end_time"`
|
|
||||||
// Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
//}
|
|
||||||
|
|
||||||
type GroupMemberModel struct {
|
type GroupMemberModel struct {
|
||||||
GroupID string `bson:"group_id"`
|
GroupID string `bson:"group_id"`
|
||||||
UserID string `bson:"user_id"`
|
UserID string `bson:"user_id"`
|
||||||
@ -52,10 +34,6 @@ type GroupMemberModel struct {
|
|||||||
Ex string `bson:"ex"`
|
Ex string `bson:"ex"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (GroupMemberModel) TableName() string {
|
|
||||||
return GroupMemberModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type GroupMemberModelInterface interface {
|
type GroupMemberModelInterface interface {
|
||||||
//NewTx(tx any) GroupMemberModelInterface
|
//NewTx(tx any) GroupMemberModelInterface
|
||||||
Create(ctx context.Context, groupMembers []*GroupMemberModel) (err error)
|
Create(ctx context.Context, groupMembers []*GroupMemberModel) (err error)
|
||||||
|
|||||||
@ -20,24 +20,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
GroupRequestModelTableName = "group_requests"
|
|
||||||
)
|
|
||||||
|
|
||||||
//type GroupRequestModel struct {
|
|
||||||
// UserID string `gorm:"column:user_id;primary_key;size:64"`
|
|
||||||
// GroupID string `gorm:"column:group_id;primary_key;size:64"`
|
|
||||||
// HandleResult int32 `gorm:"column:handle_result"`
|
|
||||||
// ReqMsg string `gorm:"column:req_msg;size:1024"`
|
|
||||||
// HandledMsg string `gorm:"column:handle_msg;size:1024"`
|
|
||||||
// ReqTime time.Time `gorm:"column:req_time"`
|
|
||||||
// HandleUserID string `gorm:"column:handle_user_id;size:64"`
|
|
||||||
// HandledTime time.Time `gorm:"column:handle_time"`
|
|
||||||
// JoinSource int32 `gorm:"column:join_source"`
|
|
||||||
// InviterUserID string `gorm:"column:inviter_user_id;size:64"`
|
|
||||||
// Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
//}
|
|
||||||
|
|
||||||
type GroupRequestModel struct {
|
type GroupRequestModel struct {
|
||||||
UserID string `bson:"user_id"`
|
UserID string `bson:"user_id"`
|
||||||
GroupID string `bson:"group_id"`
|
GroupID string `bson:"group_id"`
|
||||||
@ -52,10 +34,6 @@ type GroupRequestModel struct {
|
|||||||
Ex string `bson:"ex"`
|
Ex string `bson:"ex"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (GroupRequestModel) TableName() string {
|
|
||||||
return GroupRequestModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type GroupRequestModelInterface interface {
|
type GroupRequestModelInterface interface {
|
||||||
Create(ctx context.Context, groupRequests []*GroupRequestModel) (err error)
|
Create(ctx context.Context, groupRequests []*GroupRequestModel) (err error)
|
||||||
Delete(ctx context.Context, groupID string, userID string) (err error)
|
Delete(ctx context.Context, groupID string, userID string) (err error)
|
||||||
|
|||||||
@ -6,18 +6,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
//type Log struct {
|
|
||||||
// LogID string `gorm:"column:log_id;primary_key;type:char(64)"`
|
|
||||||
// Platform string `gorm:"column:platform;type:varchar(32)"`
|
|
||||||
// UserID string `gorm:"column:user_id;type:char(64)"`
|
|
||||||
// CreateTime time.Time `gorm:"index:,sort:desc"`
|
|
||||||
// Url string `gorm:"column:url;type varchar(255)"`
|
|
||||||
// FileName string `gorm:"column:filename;type varchar(255)"`
|
|
||||||
// SystemType string `gorm:"column:system_type;type varchar(255)"`
|
|
||||||
// Version string `gorm:"column:version;type varchar(255)"`
|
|
||||||
// Ex string `gorm:"column:ex;type varchar(255)"`
|
|
||||||
//}
|
|
||||||
|
|
||||||
type Log struct {
|
type Log struct {
|
||||||
LogID string `bson:"log_id"`
|
LogID string `bson:"log_id"`
|
||||||
Platform string `bson:"platform"`
|
Platform string `bson:"platform"`
|
||||||
|
|||||||
@ -19,10 +19,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
ObjectInfoModelTableName = "object"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ObjectModel struct {
|
type ObjectModel struct {
|
||||||
Name string `bson:"name"`
|
Name string `bson:"name"`
|
||||||
UserID string `bson:"user_id"`
|
UserID string `bson:"user_id"`
|
||||||
@ -35,22 +31,6 @@ type ObjectModel struct {
|
|||||||
CreateTime time.Time `bson:"create_time"`
|
CreateTime time.Time `bson:"create_time"`
|
||||||
}
|
}
|
||||||
|
|
||||||
//type ObjectModel struct {
|
|
||||||
// Name string `gorm:"column:name;primary_key"`
|
|
||||||
// UserID string `gorm:"column:user_id"`
|
|
||||||
// Hash string `gorm:"column:hash"`
|
|
||||||
// Engine string `gorm:"column:engine"`
|
|
||||||
// Key string `gorm:"column:key"`
|
|
||||||
// Size int64 `gorm:"column:size"`
|
|
||||||
// ContentType string `gorm:"column:content_type"`
|
|
||||||
// Cause string `gorm:"column:cause"`
|
|
||||||
// CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
//}
|
|
||||||
|
|
||||||
func (ObjectModel) TableName() string {
|
|
||||||
return ObjectInfoModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type ObjectInfoModelInterface interface {
|
type ObjectInfoModelInterface interface {
|
||||||
SetObject(ctx context.Context, obj *ObjectModel) error
|
SetObject(ctx context.Context, obj *ObjectModel) error
|
||||||
Take(ctx context.Context, engine string, name string) (*ObjectModel, error)
|
Take(ctx context.Context, engine string, name string) (*ObjectModel, error)
|
||||||
|
|||||||
@ -15,9 +15,8 @@
|
|||||||
package relation
|
package relation
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"gorm.io/gorm"
|
|
||||||
|
|
||||||
"github.com/OpenIMSDK/tools/utils"
|
"github.com/OpenIMSDK/tools/utils"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BatchUpdateGroupMember struct {
|
type BatchUpdateGroupMember struct {
|
||||||
@ -32,5 +31,5 @@ type GroupSimpleUserID struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func IsNotFound(err error) bool {
|
func IsNotFound(err error) bool {
|
||||||
return utils.Unwrap(err) == gorm.ErrRecordNotFound
|
return utils.Unwrap(err) == mongo.ErrNoDocuments
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user