parent
48095dea97
commit
3861f2bc2a
@ -1,98 +0,0 @@
|
|||||||
# OpenIM V2 至 V3 数据迁移指南
|
|
||||||
|
|
||||||
该指南提供了从 OpenIM V2 迁移至 V3 的详细步骤。请确保在开始迁移过程之前,熟悉所有步骤,并按照指南准确执行。
|
|
||||||
|
|
||||||
+ [OpenIM Chat](https://github.com/OpenIMSDK/chat)
|
|
||||||
+ [OpenIM Server](https://github.com/OpenIMSDK/Open-IM-Server)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 1. 数据备份
|
|
||||||
|
|
||||||
在开始数据迁移之前,强烈建议备份所有相关的数据以防止任何可能的数据丢失。
|
|
||||||
|
|
||||||
### 2. 迁移 OpenIM MySQL 数据
|
|
||||||
|
|
||||||
+ 位置: `open-im-server/tools/data-conversion/openim/cmd/conversion-mysql.go`
|
|
||||||
+ 配置 `conversion-mysql.go` 文件中的数据库信息。
|
|
||||||
+ 手动创建 V3 版本的数据库,并确保字符集为 `utf8mb4`。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
// V2 数据库配置
|
|
||||||
var (
|
|
||||||
usernameV2 = "root"
|
|
||||||
passwordV2 = "openIM"
|
|
||||||
addrV2 = "127.0.0.1:13306"
|
|
||||||
databaseV2 = "openIM_v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
// V3 数据库配置
|
|
||||||
var (
|
|
||||||
usernameV3 = "root"
|
|
||||||
passwordV3 = "openIM123"
|
|
||||||
addrV3 = "127.0.0.1:13306"
|
|
||||||
databaseV3 = "openim_v3"
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
**执行数据迁移命令:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make build BINS="conversion-mysql"
|
|
||||||
```
|
|
||||||
|
|
||||||
启动的二进制在 `_output/bin/tools` 中
|
|
||||||
|
|
||||||
|
|
||||||
### 3. 转换聊天消息(可选)
|
|
||||||
|
|
||||||
+ 只支持转换存储在 Kafka 中的消息。
|
|
||||||
+ 位置: `open-im-server/tools/data-conversion/openim/conversion-msg/conversion-msg.go`
|
|
||||||
+ 配置 `msg.go` 文件中的消息和服务器信息。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
var (
|
|
||||||
topic = "ws2ms_chat" // V2 版本 Kafka 主题
|
|
||||||
kafkaAddr = "127.0.0.1:9092" // V2 版本 Kafka 地址
|
|
||||||
rpcAddr = "127.0.0.1:10130" // V3 版本 RPC 地址
|
|
||||||
adminUserID = "openIM123456" // V3 版本管理员用户ID
|
|
||||||
concurrency = 4 // 并发数量
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
**执行数据迁移命令:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make build BINS="conversion-msg"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. 转换业务服务器数据
|
|
||||||
|
|
||||||
+ 只支持转换存储在 Kafka 中的消息。
|
|
||||||
+ 位置: `open-im-server/tools/data-conversion/chat/cmd/conversion-chat/chat.go`
|
|
||||||
+ 需要手动创建 V3 版本的数据库,并确保字符集为 `utf8mb4`。
|
|
||||||
+ 配置 `main.go` 文件中的数据库信息。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
// V2 数据库配置
|
|
||||||
var (
|
|
||||||
usernameV2 = "root"
|
|
||||||
passwordV2 = "openIM"
|
|
||||||
addrV2 = "127.0.0.1:13306"
|
|
||||||
databaseV2 = "admin_chat"
|
|
||||||
)
|
|
||||||
|
|
||||||
// V3 数据库配置
|
|
||||||
var (
|
|
||||||
usernameV3 = "root"
|
|
||||||
passwordV3 = "openIM123"
|
|
||||||
addrV3 = "127.0.0.1:13306"
|
|
||||||
databaseV3 = "openim_enterprise"
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
**执行数据迁移命令:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make build BINS="conversion-chat"
|
|
||||||
```
|
|
@ -1,77 +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 main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"gorm.io/driver/mysql"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"gorm.io/gorm/logger"
|
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/chat/conversion"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
var (
|
|
||||||
usernameV2 = "root" // Username for MySQL v2 version
|
|
||||||
passwordV2 = "openIM" // Password for MySQL v2 version
|
|
||||||
addrV2 = "127.0.0.1:13306" // Address for MySQL v2 version
|
|
||||||
databaseV2 = "admin_chat" // Database name for MySQL v2 version
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
usernameV3 = "root" // Username for MySQL v3 version
|
|
||||||
passwordV3 = "openIM123" // Password for MySQL v3 version
|
|
||||||
addrV3 = "127.0.0.1:13306" // Address for MySQL v3 version
|
|
||||||
databaseV3 = "openim_enterprise" // Database name for MySQL v3 version
|
|
||||||
)
|
|
||||||
|
|
||||||
var concurrency = 1 // Concurrency quantity
|
|
||||||
|
|
||||||
log.SetFlags(log.LstdFlags | log.Llongfile)
|
|
||||||
dsnV2 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", usernameV2, passwordV2, addrV2, databaseV2)
|
|
||||||
dsnV3 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", usernameV3, passwordV3, addrV3, databaseV3)
|
|
||||||
dbV2, err := gorm.Open(mysql.Open(dsnV2), &gorm.Config{Logger: logger.Discard})
|
|
||||||
if err != nil {
|
|
||||||
log.Println("open v2 db failed", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
dbV3, err := gorm.Open(mysql.Open(dsnV3), &gorm.Config{Logger: logger.Discard})
|
|
||||||
if err != nil {
|
|
||||||
log.Println("open v3 db failed", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var tasks utils.TakeList
|
|
||||||
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Account) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Attribute) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Register) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.UserLoginRecord) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Admin) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Applet) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.ForbiddenAccount) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.InvitationRegister) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.IPForbidden) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.LimitUserLoginIP) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.RegisterAddFriend) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.RegisterAddGroup) })
|
|
||||||
|
|
||||||
utils.RunTask(concurrency, tasks)
|
|
||||||
|
|
||||||
}
|
|
@ -1,167 +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 conversion
|
|
||||||
|
|
||||||
import (
|
|
||||||
v2 "github.com/openimsdk/open-im-server/v3/tools/data-conversion/chat/v2"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/chat/v3/admin"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/chat/v3/chat"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ########## chat ##########
|
|
||||||
|
|
||||||
func Account(v v2.Account) (chat.Account, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime, &v.ChangeTime)
|
|
||||||
return chat.Account{
|
|
||||||
UserID: v.UserID,
|
|
||||||
Password: v.Password,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
ChangeTime: v.ChangeTime,
|
|
||||||
OperatorUserID: v.OperatorUserID,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func Attribute(v v2.Attribute) (chat.Attribute, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime, &v.ChangeTime, &v.BirthTime)
|
|
||||||
return chat.Attribute{
|
|
||||||
UserID: v.UserID,
|
|
||||||
Account: v.Account,
|
|
||||||
PhoneNumber: v.PhoneNumber,
|
|
||||||
AreaCode: v.AreaCode,
|
|
||||||
Email: v.Email,
|
|
||||||
Nickname: v.Nickname,
|
|
||||||
FaceURL: v.FaceURL,
|
|
||||||
Gender: v.Gender,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
ChangeTime: v.ChangeTime,
|
|
||||||
BirthTime: v.BirthTime,
|
|
||||||
Level: v.Level,
|
|
||||||
AllowVibration: v.AllowVibration,
|
|
||||||
AllowBeep: v.AllowBeep,
|
|
||||||
AllowAddFriend: v.AllowAddFriend,
|
|
||||||
GlobalRecvMsgOpt: 0,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func Register(v v2.Register) (chat.Register, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return chat.Register{
|
|
||||||
UserID: v.UserID,
|
|
||||||
DeviceID: v.DeviceID,
|
|
||||||
IP: v.IP,
|
|
||||||
Platform: v.Platform,
|
|
||||||
AccountType: v.AccountType,
|
|
||||||
Mode: v.Mode,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func UserLoginRecord(v v2.UserLoginRecord) (chat.UserLoginRecord, bool) {
|
|
||||||
utils.InitTime(&v.LoginTime)
|
|
||||||
return chat.UserLoginRecord{
|
|
||||||
UserID: v.UserID,
|
|
||||||
LoginTime: v.LoginTime,
|
|
||||||
IP: v.IP,
|
|
||||||
DeviceID: v.DeviceID,
|
|
||||||
Platform: v.Platform,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
// ########## admin ##########
|
|
||||||
|
|
||||||
func Admin(v v2.Admin) (admin.Admin, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return admin.Admin{
|
|
||||||
Account: v.Account,
|
|
||||||
Password: v.Password,
|
|
||||||
FaceURL: v.FaceURL,
|
|
||||||
Nickname: v.Nickname,
|
|
||||||
UserID: v.UserID,
|
|
||||||
Level: v.Level,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func Applet(v v2.Applet) (admin.Applet, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return admin.Applet{
|
|
||||||
ID: v.ID,
|
|
||||||
Name: v.Name,
|
|
||||||
AppID: v.AppID,
|
|
||||||
Icon: v.Icon,
|
|
||||||
URL: v.URL,
|
|
||||||
MD5: v.MD5,
|
|
||||||
Size: v.Size,
|
|
||||||
Version: v.Version,
|
|
||||||
Priority: v.Priority,
|
|
||||||
Status: v.Status,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func ForbiddenAccount(v v2.ForbiddenAccount) (admin.ForbiddenAccount, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return admin.ForbiddenAccount{
|
|
||||||
UserID: v.UserID,
|
|
||||||
Reason: v.Reason,
|
|
||||||
OperatorUserID: v.OperatorUserID,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func InvitationRegister(v v2.InvitationRegister) (admin.InvitationRegister, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return admin.InvitationRegister{
|
|
||||||
InvitationCode: v.InvitationCode,
|
|
||||||
UsedByUserID: v.UsedByUserID,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func IPForbidden(v v2.IPForbidden) (admin.IPForbidden, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return admin.IPForbidden{
|
|
||||||
IP: v.IP,
|
|
||||||
LimitRegister: v.LimitRegister > 0,
|
|
||||||
LimitLogin: v.LimitLogin > 0,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func LimitUserLoginIP(v v2.LimitUserLoginIP) (admin.LimitUserLoginIP, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return admin.LimitUserLoginIP{
|
|
||||||
UserID: v.UserID,
|
|
||||||
IP: v.IP,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func RegisterAddFriend(v v2.RegisterAddFriend) (admin.RegisterAddFriend, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return admin.RegisterAddFriend{
|
|
||||||
UserID: v.UserID,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func RegisterAddGroup(v v2.RegisterAddGroup) (admin.RegisterAddGroup, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return admin.RegisterAddGroup{
|
|
||||||
GroupID: v.GroupID,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
}, true
|
|
||||||
}
|
|
@ -1,77 +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 v2
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// AppVersion manages PC client versions
|
|
||||||
type AppVersion struct {
|
|
||||||
Version string `gorm:"column:version;size:64" json:"version"`
|
|
||||||
Type int `gorm:"column:type;primary_key" json:"type"`
|
|
||||||
UpdateTime int `gorm:"column:update_time" json:"update_time"`
|
|
||||||
ForceUpdate bool `gorm:"column:force_update" json:"force_update"`
|
|
||||||
FileName string `gorm:"column:file_name" json:"file_name"`
|
|
||||||
YamlName string `gorm:"column:yaml_name" json:"yaml_name"`
|
|
||||||
UpdateLog string `gorm:"column:update_log" json:"update_log"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Admin manages backend administrators
|
|
||||||
type Admin struct {
|
|
||||||
Account string `gorm:"column:account;primary_key;type:char(64)" json:"account"`
|
|
||||||
Password string `gorm:"column:Password;type:char(64)" json:"password"`
|
|
||||||
FaceURL string `gorm:"column:FaceURL;type:char(64)" json:"faceURL"`
|
|
||||||
Nickname string `gorm:"column:Nickname;type:char(64)" json:"nickname"`
|
|
||||||
UserID string `gorm:"column:UserID;type:char(64)" json:"userID"` //openIM userID
|
|
||||||
Level int32 `gorm:"column:level;default:1" json:"level"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// RegisterAddFriend specifies default friends when registering
|
|
||||||
type RegisterAddFriend struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)" json:"userID"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// RegisterAddGroup specifies default groups when registering
|
|
||||||
type RegisterAddGroup struct {
|
|
||||||
GroupID string `gorm:"column:group_id;primary_key;type:char(64)" json:"userID"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClientInitConfig contains system-related configuration items
|
|
||||||
type ClientInitConfig struct {
|
|
||||||
DiscoverPageURL string `gorm:"column:discover_page_url;size:128" json:"discoverPageURL"`
|
|
||||||
OrdinaryUserAddFriend int32 `gorm:"column:ordinary_user_add_friend; default:1" json:"ordinaryUserAddFriend"`
|
|
||||||
BossUserID string `gorm:"column:boss_user_id;type:char(64)" json:"bossUserID"`
|
|
||||||
AdminURL string `gorm:"column:admin_url;type:char(128)" json:"adminURL"`
|
|
||||||
AllowSendMsgNotFriend int32 `gorm:"column:allow_send_msg_not_friend;default:1" json:"allowSendMsgNotFriend"`
|
|
||||||
NeedInvitationCodeRegister int32 `gorm:"column:need_invitation_code_register;default:0" json:"needInvitationCodeRegister"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Applet struct {
|
|
||||||
ID string `gorm:"column:id;primary_key;size:64"`
|
|
||||||
Name string `gorm:"column:name;uniqueIndex;size:64"`
|
|
||||||
AppID string `gorm:"column:app_id;uniqueIndex;size:255"`
|
|
||||||
Icon string `gorm:"column:icon;size:255"`
|
|
||||||
URL string `gorm:"column:url;size:255"`
|
|
||||||
MD5 string `gorm:"column:md5;size:255"`
|
|
||||||
Size int64 `gorm:"column:size"`
|
|
||||||
Version string `gorm:"column:version;size:64"`
|
|
||||||
Priority uint32 `gorm:"column:priority;size:64"`
|
|
||||||
Status uint8 `gorm:"column:status"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time;autoCreateTime;size:64"`
|
|
||||||
}
|
|
@ -1,109 +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 v2
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Register Registration information sheet
|
|
||||||
type Register struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)" json:"userID"`
|
|
||||||
DeviceID string `gorm:"column:device_id;type:varchar(255)" json:"deviceID"`
|
|
||||||
IP string `gorm:"column:ip;type:varchar(32)" json:"ip"`
|
|
||||||
Platform string `gorm:"column:platform;type:varchar(32)" json:"platform"`
|
|
||||||
AccountType string `gorm:"column:account_type;type:varchar(32)" json:"accountType"` //email phone account
|
|
||||||
Mode string `gorm:"column:mode;type:varchar(32)"` //user admin
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Account username and password table
|
|
||||||
type Account struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)" json:"userID"`
|
|
||||||
Password string `gorm:"column:password;type:varchar(255)" json:"password"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
ChangeTime time.Time `gorm:"column:change_time" json:"changeTime"`
|
|
||||||
OperatorUserID string `gorm:"column:operator_user_id;type:varchar(64)" json:"operatorUserID"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attribute user information table
|
|
||||||
type Attribute struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)" json:"userID"`
|
|
||||||
Account string `gorm:"column:account;type:char(64)" json:"account"`
|
|
||||||
PhoneNumber string `gorm:"column:phone_number;type:varchar(32)" json:"phoneNumber"`
|
|
||||||
AreaCode string `gorm:"column:area_code;type:varchar(8)" json:"areaCode"`
|
|
||||||
Email string `gorm:"column:email;type:varchar(64)" json:"email"`
|
|
||||||
Nickname string `gorm:"column:nickname;type:varchar(64)" json:"nickname"`
|
|
||||||
FaceURL string `gorm:"column:face_url;type:varchar(255)" json:"faceURL"`
|
|
||||||
Gender int32 `gorm:"column:gender" json:"gender"`
|
|
||||||
Birth uint32 `gorm:"column:birth" json:"birth"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
ChangeTime time.Time `gorm:"column:change_time" json:"changeTime"`
|
|
||||||
BirthTime time.Time `gorm:"column:birth_time" json:"birthTime"`
|
|
||||||
Level int32 `gorm:"column:level;default:1" json:"level"`
|
|
||||||
AllowVibration int32 `gorm:"column:allow_vibration;default:1" json:"allowVibration"`
|
|
||||||
AllowBeep int32 `gorm:"column:allow_beep;default:1" json:"allowBeep"`
|
|
||||||
AllowAddFriend int32 `gorm:"column:allow_add_friend;default:1" json:"allowAddFriend"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// User friend relationship table
|
|
||||||
type ForbiddenAccount struct {
|
|
||||||
UserID string `gorm:"column:user_id;index:userID;primary_key;type:char(64)" json:"userID"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
Reason string `gorm:"column:reason;type:varchar(255)" json:"reason"`
|
|
||||||
OperatorUserID string `gorm:"column:operator_user_id;type:varchar(255)" json:"operatorUserID"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// user login record table
|
|
||||||
type UserLoginRecord struct {
|
|
||||||
UserID string `gorm:"column:user_id;size:64" json:"userID"`
|
|
||||||
LoginTime time.Time `gorm:"column:login_time" json:"loginTime"`
|
|
||||||
IP string `gorm:"column:ip;type:varchar(32)" json:"ip"`
|
|
||||||
DeviceID string `gorm:"column:device_id;type:varchar(255)" json:"deviceID"`
|
|
||||||
Platform string `gorm:"column:platform;type:varchar(32)" json:"platform"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ip login registration is prohibited
|
|
||||||
type IPForbidden struct {
|
|
||||||
IP string `gorm:"column:ip;primary_key;type:char(32)" json:"ip"`
|
|
||||||
LimitRegister int32 `gorm:"column:limit_register" json:"limitRegister"`
|
|
||||||
LimitLogin int32 `gorm:"column:limit_login" json:"limitLogin"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restrict userids to certain ip addresses
|
|
||||||
type LimitUserLoginIP struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)" json:"userID"`
|
|
||||||
IP string `gorm:"column:ip;primary_key;type:char(32)" json:"ip"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// The invitation code is registered for use
|
|
||||||
type InvitationRegister struct {
|
|
||||||
InvitationCode string `gorm:"column:invitation_code;primary_key;type:char(32)" json:"invitationCode"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
|
|
||||||
UsedByUserID string `gorm:"column:user_id;index:userID;type:char(64)" json:"usedByUserID"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type SignalRecord struct {
|
|
||||||
FileName string `gorm:"column:file_name;primary_key;type:char(128)" json:"fileName"`
|
|
||||||
MediaType string `gorm:"column:media_type;type:char(64);index:media_type_index" json:"mediaType"`
|
|
||||||
RoomType string `gorm:"column:room_type;type:char(20)" json:"roomType"`
|
|
||||||
SenderID string `gorm:"column:sender_id;type:char(64);index:sender_id_index" json:"senderID"`
|
|
||||||
RecvID string `gorm:"column:recv_id;type:char(64);index:recv_id_index" json:"recvID"`
|
|
||||||
GroupID string `gorm:"column:group_id;type:char(64)" json:"groupID"`
|
|
||||||
DownloadURL string `gorm:"column:download_url;type:text" json:"downloadURL"`
|
|
||||||
CreateTime time.Time `gorm:"create_time;index:create_time_index" json:"createTime"`
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Admin Background administrator.
|
|
||||||
type Admin struct {
|
|
||||||
Account string `gorm:"column:account;primary_key;type:varchar(64)"`
|
|
||||||
Password string `gorm:"column:password;type:varchar(64)"`
|
|
||||||
FaceURL string `gorm:"column:face_url;type:varchar(255)"`
|
|
||||||
Nickname string `gorm:"column:nickname;type:varchar(64)"`
|
|
||||||
UserID string `gorm:"column:user_id;type:varchar(64)"` // openIM userID
|
|
||||||
Level int32 `gorm:"column:level;default:1" `
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Admin) TableName() string {
|
|
||||||
return "admins"
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Applet struct {
|
|
||||||
ID string `gorm:"column:id;primary_key;size:64"`
|
|
||||||
Name string `gorm:"column:name;size:64"`
|
|
||||||
AppID string `gorm:"column:app_id;uniqueIndex;size:255"`
|
|
||||||
Icon string `gorm:"column:icon;size:255"`
|
|
||||||
URL string `gorm:"column:url;size:255"`
|
|
||||||
MD5 string `gorm:"column:md5;size:255"`
|
|
||||||
Size int64 `gorm:"column:size"`
|
|
||||||
Version string `gorm:"column:version;size:64"`
|
|
||||||
Priority uint32 `gorm:"column:priority;size:64"`
|
|
||||||
Status uint8 `gorm:"column:status"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time;autoCreateTime;size:64"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Applet) TableName() string {
|
|
||||||
return "applets"
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
// ClientConfig Client related configuration items.
|
|
||||||
type ClientConfig struct {
|
|
||||||
Key string `gorm:"column:key;primary_key;type:varchar(255)"`
|
|
||||||
Value string `gorm:"column:value;not null;type:text"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ClientConfig) TableName() string {
|
|
||||||
return "client_config"
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ForbiddenAccount forbidden account.
|
|
||||||
type ForbiddenAccount struct {
|
|
||||||
UserID string `gorm:"column:user_id;index:userID;primary_key;type:char(64)"`
|
|
||||||
Reason string `gorm:"column:reason;type:varchar(255)" `
|
|
||||||
OperatorUserID string `gorm:"column:operator_user_id;type:varchar(255)"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" `
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ForbiddenAccount) TableName() string {
|
|
||||||
return "forbidden_accounts"
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// The invitation code is registered for use.
|
|
||||||
type InvitationRegister struct {
|
|
||||||
InvitationCode string `gorm:"column:invitation_code;primary_key;type:char(32)"`
|
|
||||||
UsedByUserID string `gorm:"column:user_id;index:userID;type:char(64)"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (InvitationRegister) TableName() string {
|
|
||||||
return "invitation_registers"
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ip login registration is prohibited.
|
|
||||||
type IPForbidden struct {
|
|
||||||
IP string `gorm:"column:ip;primary_key;type:char(32)"`
|
|
||||||
LimitRegister bool `gorm:"column:limit_register"`
|
|
||||||
LimitLogin bool `gorm:"column:limit_login"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (IPForbidden) TableName() string {
|
|
||||||
return "ip_forbiddens"
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Restrict userids to certain ip addresses.
|
|
||||||
type LimitUserLoginIP struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)"`
|
|
||||||
IP string `gorm:"column:ip;primary_key;type:char(32)"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time" `
|
|
||||||
}
|
|
||||||
|
|
||||||
func (LimitUserLoginIP) TableName() string {
|
|
||||||
return "limit_user_login_ips"
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RegisterAddFriend Indicates the default friend when registering.
|
|
||||||
type RegisterAddFriend struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (RegisterAddFriend) TableName() string {
|
|
||||||
return "register_add_friends"
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 admin
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RegisterAddGroup Indicates the default group for registration.
|
|
||||||
type RegisterAddGroup struct {
|
|
||||||
GroupID string `gorm:"column:group_id;primary_key;type:char(64)"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (RegisterAddGroup) TableName() string {
|
|
||||||
return "register_add_groups"
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 chat
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Account Account password table.
|
|
||||||
type Account struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)"`
|
|
||||||
Password string `gorm:"column:password;type:varchar(32)"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time;autoCreateTime"`
|
|
||||||
ChangeTime time.Time `gorm:"column:change_time;autoUpdateTime"`
|
|
||||||
OperatorUserID string `gorm:"column:operator_user_id;type:varchar(64)"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Account) TableName() string {
|
|
||||||
return "accounts"
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 chat
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Attribute Indicates the user attribute table.
|
|
||||||
type Attribute struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)"`
|
|
||||||
Account string `gorm:"column:account;type:char(64)"`
|
|
||||||
PhoneNumber string `gorm:"column:phone_number;type:varchar(32)"`
|
|
||||||
AreaCode string `gorm:"column:area_code;type:varchar(8)"`
|
|
||||||
Email string `gorm:"column:email;type:varchar(64)" `
|
|
||||||
Nickname string `gorm:"column:nickname;type:varchar(64)" `
|
|
||||||
FaceURL string `gorm:"column:face_url;type:varchar(255)" `
|
|
||||||
Gender int32 `gorm:"column:gender"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
ChangeTime time.Time `gorm:"column:change_time"`
|
|
||||||
BirthTime time.Time `gorm:"column:birth_time"`
|
|
||||||
Level int32 `gorm:"column:level;default:1"`
|
|
||||||
AllowVibration int32 `gorm:"column:allow_vibration;default:1"`
|
|
||||||
AllowBeep int32 `gorm:"column:allow_beep;default:1"`
|
|
||||||
AllowAddFriend int32 `gorm:"column:allow_add_friend;default:1"`
|
|
||||||
GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt;default:0"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Attribute) TableName() string {
|
|
||||||
return "attributes"
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 chat
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Register Indicates the registration information.
|
|
||||||
type Register struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;type:char(64)"`
|
|
||||||
DeviceID string `gorm:"column:device_id;type:varchar(255)"`
|
|
||||||
IP string `gorm:"column:ip;type:varchar(64)"`
|
|
||||||
Platform string `gorm:"column:platform;type:varchar(32)"`
|
|
||||||
AccountType string `gorm:"column:account_type;type:varchar(32)"` // email phone account
|
|
||||||
Mode string `gorm:"column:mode;type:varchar(32)"` // user admin
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Register) TableName() string {
|
|
||||||
return "registers"
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
// Copyright © 2023 OpenIM open source community. 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 chat
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// User login information table.
|
|
||||||
type UserLoginRecord struct {
|
|
||||||
UserID string `gorm:"column:user_id;size:64"`
|
|
||||||
LoginTime time.Time `gorm:"column:login_time"`
|
|
||||||
IP string `gorm:"column:ip;type:varchar(32)"`
|
|
||||||
DeviceID string `gorm:"column:device_id;type:varchar(255)"`
|
|
||||||
Platform string `gorm:"column:platform;type:varchar(32)"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (UserLoginRecord) TableName() string {
|
|
||||||
return "user_login_records"
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
module github.com/openimsdk/open-im-server/v3/tools/data-conversion
|
|
||||||
|
|
||||||
go 1.19
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/IBM/sarama v1.42.1
|
|
||||||
github.com/OpenIMSDK/protocol v0.0.33
|
|
||||||
github.com/OpenIMSDK/tools v0.0.20
|
|
||||||
github.com/golang/protobuf v1.5.3
|
|
||||||
github.com/openimsdk/open-im-server/v3 v3.4.0
|
|
||||||
golang.org/x/net v0.19.0
|
|
||||||
google.golang.org/grpc v1.60.0
|
|
||||||
google.golang.org/protobuf v1.31.0
|
|
||||||
gorm.io/driver/mysql v1.5.2
|
|
||||||
gorm.io/gorm v1.25.5
|
|
||||||
)
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/bwmarrin/snowflake v0.3.0 // indirect
|
|
||||||
github.com/bytedance/sonic v1.9.1 // indirect
|
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
|
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
|
||||||
github.com/eapache/go-resiliency v1.4.0 // indirect
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect
|
|
||||||
github.com/eapache/queue v1.1.0 // indirect
|
|
||||||
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
|
|
||||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
|
||||||
github.com/gin-gonic/gin v1.9.1 // indirect
|
|
||||||
github.com/go-playground/locales v0.14.1 // indirect
|
|
||||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
|
||||||
github.com/go-playground/validator/v10 v10.15.5 // indirect
|
|
||||||
github.com/go-sql-driver/mysql v1.7.1 // indirect
|
|
||||||
github.com/goccy/go-json v0.10.2 // indirect
|
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
|
||||||
github.com/hashicorp/errwrap v1.0.0 // indirect
|
|
||||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
|
||||||
github.com/hashicorp/go-uuid v1.0.3 // indirect
|
|
||||||
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
|
|
||||||
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
|
|
||||||
github.com/jcmturner/gofork v1.7.6 // indirect
|
|
||||||
github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect
|
|
||||||
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
|
|
||||||
github.com/jinzhu/copier v0.4.0 // indirect
|
|
||||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
|
||||||
github.com/klauspost/compress v1.16.7 // indirect
|
|
||||||
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
|
|
||||||
github.com/leodido/go-urn v1.2.4 // indirect
|
|
||||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect
|
|
||||||
github.com/lestrrat-go/strftime v1.0.6 // indirect
|
|
||||||
github.com/mattn/go-isatty v0.0.19 // indirect
|
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
|
||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
|
||||||
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
|
|
||||||
github.com/pierrec/lz4/v4 v4.1.18 // indirect
|
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
|
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
|
||||||
github.com/ugorji/go/codec v1.2.11 // indirect
|
|
||||||
go.uber.org/atomic v1.7.0 // indirect
|
|
||||||
go.uber.org/multierr v1.6.0 // indirect
|
|
||||||
go.uber.org/zap v1.24.0 // indirect
|
|
||||||
golang.org/x/arch v0.3.0 // indirect
|
|
||||||
golang.org/x/crypto v0.17.0 // indirect
|
|
||||||
golang.org/x/image v0.13.0 // indirect
|
|
||||||
golang.org/x/sys v0.15.0 // indirect
|
|
||||||
golang.org/x/text v0.14.0 // indirect
|
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a // indirect
|
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
||||||
)
|
|
@ -1,207 +0,0 @@
|
|||||||
github.com/IBM/sarama v1.42.1 h1:wugyWa15TDEHh2kvq2gAy1IHLjEjuYOYgXz/ruC/OSQ=
|
|
||||||
github.com/IBM/sarama v1.42.1/go.mod h1:Xxho9HkHd4K/MDUo/T/sOqwtX/17D33++E9Wib6hUdQ=
|
|
||||||
github.com/OpenIMSDK/protocol v0.0.33 h1:T07KWD0jt7IRlrYRujCa+eXmfgcSi8sRgLL8t2ZlHQA=
|
|
||||||
github.com/OpenIMSDK/protocol v0.0.33/go.mod h1:F25dFrwrIx3lkNoiuf6FkCfxuwf8L4Z8UIsdTHP/r0Y=
|
|
||||||
github.com/OpenIMSDK/tools v0.0.20 h1:zBTjQZRJ5lR1FIzP9mtWyAvh5dKsmJXQugi4p8X/97k=
|
|
||||||
github.com/OpenIMSDK/tools v0.0.20/go.mod h1:eg+q4A34Qmu73xkY0mt37FHGMCMfC6CtmOnm0kFEGFI=
|
|
||||||
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
|
||||||
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
|
|
||||||
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
|
|
||||||
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
|
||||||
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
|
|
||||||
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
|
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
|
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/eapache/go-resiliency v1.4.0 h1:3OK9bWpPk5q6pbFAaYSEwD9CLUSHG8bnZuqX2yMt3B0=
|
|
||||||
github.com/eapache/go-resiliency v1.4.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0=
|
|
||||||
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
|
|
||||||
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
|
|
||||||
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
|
|
||||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
|
||||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
|
||||||
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
|
|
||||||
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
|
|
||||||
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
|
|
||||||
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
|
|
||||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
|
||||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
|
||||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
|
||||||
github.com/go-playground/validator/v10 v10.15.5 h1:LEBecTWb/1j5TNY1YYG2RcOUN3R7NLylN+x8TTueE24=
|
|
||||||
github.com/go-playground/validator/v10 v10.15.5/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
|
||||||
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/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
|
||||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
|
||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
|
||||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
|
||||||
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
|
||||||
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
|
||||||
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
|
||||||
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
|
|
||||||
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
|
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
|
||||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
|
||||||
github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
|
||||||
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
|
|
||||||
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
|
||||||
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
|
|
||||||
github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
|
|
||||||
github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo=
|
|
||||||
github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM=
|
|
||||||
github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg=
|
|
||||||
github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo=
|
|
||||||
github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o=
|
|
||||||
github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg=
|
|
||||||
github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8=
|
|
||||||
github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs=
|
|
||||||
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/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
|
|
||||||
github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
|
|
||||||
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/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
|
||||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
|
||||||
github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4=
|
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
|
||||||
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
|
|
||||||
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
|
||||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
|
||||||
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
|
|
||||||
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
|
||||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
|
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
|
||||||
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
|
|
||||||
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
|
|
||||||
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
|
|
||||||
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
|
|
||||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
|
|
||||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
|
|
||||||
github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
|
|
||||||
github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
|
|
||||||
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
|
||||||
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
|
||||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
|
||||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
|
||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
|
||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
|
||||||
github.com/openimsdk/open-im-server/v3 v3.4.0 h1:e7nslaWEHYc5xD1A3zHtnhbIWgfgtJSnPGHIqwjARaE=
|
|
||||||
github.com/openimsdk/open-im-server/v3 v3.4.0/go.mod h1:HKqjLZSMjD7ec59VV694Yfqnj9SIVotzDSPWgAei2Tg=
|
|
||||||
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
|
|
||||||
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
|
|
||||||
github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ=
|
|
||||||
github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
|
||||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
|
||||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
|
||||||
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
|
|
||||||
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
|
||||||
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
|
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
|
||||||
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
|
|
||||||
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
|
||||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
|
||||||
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
|
|
||||||
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
|
|
||||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
|
||||||
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
|
|
||||||
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
|
||||||
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
|
|
||||||
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
|
||||||
golang.org/x/image v0.13.0 h1:3cge/F/QTkNLauhf2QoE9zp+7sr+ZcL4HnoZmdwg9sg=
|
|
||||||
golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
|
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
|
||||||
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
|
|
||||||
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
|
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
|
||||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
|
||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a h1:a2MQQVoTo96JC9PMGtGBymLp7+/RzpFc2yX/9WfFg1c=
|
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0=
|
|
||||||
google.golang.org/grpc v1.60.0 h1:6FQAR0kM31P6MRdeluor2w2gPaS4SVNrD/DNTxrQ15k=
|
|
||||||
google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM=
|
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
|
||||||
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
|
||||||
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
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/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
||||||
gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs=
|
|
||||||
gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb8=
|
|
||||||
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=
|
|
||||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
|
@ -1,227 +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 main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"encoding/json"
|
|
||||||
"log"
|
|
||||||
"sync"
|
|
||||||
"sync/atomic"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/IBM/sarama"
|
|
||||||
"github.com/OpenIMSDK/protocol/constant"
|
|
||||||
"github.com/OpenIMSDK/protocol/msg"
|
|
||||||
"github.com/OpenIMSDK/protocol/sdkws"
|
|
||||||
"github.com/OpenIMSDK/tools/mw"
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
"google.golang.org/grpc/credentials/insecure"
|
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/apistruct"
|
|
||||||
pbmsg "github.com/openimsdk/open-im-server/v3/tools/data-conversion/openim/proto/msg"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
var (
|
|
||||||
// The Kafka topic for ws2ms_chat in version 2 configuration
|
|
||||||
topic = "ws2ms_chat"
|
|
||||||
|
|
||||||
// The Kafka address in version 2 configuration
|
|
||||||
kafkaAddr = "127.0.0.1:9092"
|
|
||||||
|
|
||||||
// The RPC address in version 3 configuration
|
|
||||||
rpcAddr = "127.0.0.1:10130"
|
|
||||||
|
|
||||||
// The administrator userID in version 3
|
|
||||||
adminUserID = "openIM123456"
|
|
||||||
|
|
||||||
// The number of concurrent processes
|
|
||||||
concurrency = 1
|
|
||||||
)
|
|
||||||
|
|
||||||
getRpcConn := func() (*grpc.ClientConn, error) {
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
|
||||||
defer cancel()
|
|
||||||
return grpc.DialContext(ctx, rpcAddr, grpc.WithTransportCredentials(insecure.NewCredentials()), mw.GrpcClient())
|
|
||||||
}
|
|
||||||
conn, err := getRpcConn()
|
|
||||||
if err != nil {
|
|
||||||
log.Println("get rpc conn", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer conn.Close()
|
|
||||||
|
|
||||||
msgClient := msg.NewMsgClient(conn)
|
|
||||||
|
|
||||||
conf := sarama.NewConfig()
|
|
||||||
conf.Consumer.Offsets.Initial = sarama.OffsetOldest
|
|
||||||
|
|
||||||
consumer, err := sarama.NewConsumer([]string{kafkaAddr}, conf)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("kafka consumer conn", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
partitions, err := consumer.Partitions(topic) // Get all partitions according to topic
|
|
||||||
if err != nil {
|
|
||||||
log.Println("kafka partitions", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(partitions) == 0 {
|
|
||||||
log.Println("kafka partitions is empty")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
log.Println("kafka partitions", partitions)
|
|
||||||
|
|
||||||
msgCh := make(chan *pbmsg.MsgDataToMQ, concurrency*2)
|
|
||||||
|
|
||||||
var kfkWg sync.WaitGroup
|
|
||||||
|
|
||||||
distinct := make(map[string]struct{})
|
|
||||||
var lock sync.Mutex
|
|
||||||
|
|
||||||
for _, partition := range partitions {
|
|
||||||
kfkWg.Add(1)
|
|
||||||
go func(partition int32) {
|
|
||||||
defer kfkWg.Done()
|
|
||||||
pc, err := consumer.ConsumePartition(topic, partition, sarama.OffsetOldest)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("kafka Consume Partition %d failed %s\n", partition, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer pc.Close()
|
|
||||||
ch := pc.Messages()
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-time.After(time.Second * 10): // 10s Shuts down when the data cannot be read
|
|
||||||
return
|
|
||||||
case message, ok := <-ch:
|
|
||||||
if !ok {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
msgFromMQV2 := pbmsg.MsgDataToMQ{}
|
|
||||||
err := proto.Unmarshal(message.Value, &msgFromMQV2)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("kafka msg partition %d offset %d unmarshal failed %s\n", message.Partition, message.Offset, message.Value)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if msgFromMQV2.MsgData == nil || msgFromMQV2.OperationID == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if msgFromMQV2.MsgData.ContentType < constant.ContentTypeBegin || msgFromMQV2.MsgData.ContentType > constant.AdvancedText {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
lock.Lock()
|
|
||||||
_, exist := distinct[msgFromMQV2.MsgData.ClientMsgID]
|
|
||||||
if !exist {
|
|
||||||
distinct[msgFromMQV2.MsgData.ClientMsgID] = struct{}{}
|
|
||||||
}
|
|
||||||
lock.Unlock()
|
|
||||||
if exist {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
msgCh <- &msgFromMQV2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}(partition)
|
|
||||||
}
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
kfkWg.Wait()
|
|
||||||
close(msgCh)
|
|
||||||
}()
|
|
||||||
|
|
||||||
var msgWg sync.WaitGroup
|
|
||||||
|
|
||||||
var (
|
|
||||||
success int64
|
|
||||||
failed int64
|
|
||||||
)
|
|
||||||
for i := 0; i < concurrency; i++ {
|
|
||||||
msgWg.Add(1)
|
|
||||||
go func() {
|
|
||||||
defer msgWg.Done()
|
|
||||||
for message := range msgCh {
|
|
||||||
HandlerV2Msg(msgClient, adminUserID, message, &success, &failed)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
msgWg.Wait()
|
|
||||||
log.Printf("total %d success %d failed %d\n", success+failed, success, failed)
|
|
||||||
}
|
|
||||||
|
|
||||||
func HandlerV2Msg(msgClient msg.MsgClient, adminUserID string, msgFromMQV2 *pbmsg.MsgDataToMQ, success *int64, failed *int64) {
|
|
||||||
msgData := &sdkws.MsgData{
|
|
||||||
SendID: msgFromMQV2.MsgData.SendID,
|
|
||||||
RecvID: msgFromMQV2.MsgData.RecvID,
|
|
||||||
GroupID: msgFromMQV2.MsgData.GroupID,
|
|
||||||
ClientMsgID: msgFromMQV2.MsgData.ClientMsgID,
|
|
||||||
ServerMsgID: msgFromMQV2.MsgData.ServerMsgID,
|
|
||||||
SenderPlatformID: msgFromMQV2.MsgData.SenderPlatformID,
|
|
||||||
SenderNickname: msgFromMQV2.MsgData.SenderNickname,
|
|
||||||
SenderFaceURL: msgFromMQV2.MsgData.SenderFaceURL,
|
|
||||||
SessionType: msgFromMQV2.MsgData.SessionType,
|
|
||||||
MsgFrom: msgFromMQV2.MsgData.MsgFrom,
|
|
||||||
ContentType: msgFromMQV2.MsgData.ContentType,
|
|
||||||
SendTime: msgFromMQV2.MsgData.SendTime,
|
|
||||||
CreateTime: msgFromMQV2.MsgData.CreateTime,
|
|
||||||
Status: msgFromMQV2.MsgData.Status,
|
|
||||||
IsRead: false,
|
|
||||||
Options: msgFromMQV2.MsgData.Options,
|
|
||||||
AtUserIDList: msgFromMQV2.MsgData.AtUserIDList,
|
|
||||||
AttachedInfo: msgFromMQV2.MsgData.AttachedInfo,
|
|
||||||
Ex: msgFromMQV2.MsgData.Ex,
|
|
||||||
}
|
|
||||||
|
|
||||||
if msgFromMQV2.MsgData.OfflinePushInfo != nil {
|
|
||||||
msgData.OfflinePushInfo = &sdkws.OfflinePushInfo{
|
|
||||||
Title: msgFromMQV2.MsgData.OfflinePushInfo.Title,
|
|
||||||
Desc: msgFromMQV2.MsgData.OfflinePushInfo.Desc,
|
|
||||||
Ex: msgFromMQV2.MsgData.OfflinePushInfo.Ex,
|
|
||||||
IOSPushSound: msgFromMQV2.MsgData.OfflinePushInfo.IOSPushSound,
|
|
||||||
IOSBadgeCount: msgFromMQV2.MsgData.OfflinePushInfo.IOSBadgeCount,
|
|
||||||
SignalInfo: "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch msgData.ContentType {
|
|
||||||
case constant.Text:
|
|
||||||
data, err := json.Marshal(apistruct.TextElem{
|
|
||||||
Content: string(msgFromMQV2.MsgData.Content),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
msgData.Content = data
|
|
||||||
default:
|
|
||||||
msgData.Content = msgFromMQV2.MsgData.Content
|
|
||||||
}
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
|
||||||
defer cancel()
|
|
||||||
ctx = context.WithValue(context.Background(), constant.OperationID, msgFromMQV2.OperationID)
|
|
||||||
ctx = context.WithValue(ctx, constant.OpUserID, adminUserID)
|
|
||||||
|
|
||||||
resp, err := msgClient.SendMsg(ctx, &msg.SendMsgReq{MsgData: msgData})
|
|
||||||
if err != nil {
|
|
||||||
atomic.AddInt64(failed, 1)
|
|
||||||
log.Printf("send msg %+v failed %s\n", msgData, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
atomic.AddInt64(success, 1)
|
|
||||||
log.Printf("send msg success %+v resp %+v\n", msgData, resp)
|
|
||||||
}
|
|
@ -1,87 +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 main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"gorm.io/driver/mysql"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"gorm.io/gorm/logger"
|
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/openim/mysql/conversion"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
var (
|
|
||||||
// MySQL username for version 2
|
|
||||||
usernameV2 = "root"
|
|
||||||
|
|
||||||
// MySQL password for version 2
|
|
||||||
passwordV2 = "openIM"
|
|
||||||
|
|
||||||
// MySQL address for version 2
|
|
||||||
addrV2 = "127.0.0.1:13306"
|
|
||||||
|
|
||||||
// MySQL database name for version 2
|
|
||||||
databaseV2 = "openIM_v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// MySQL username for version 3
|
|
||||||
usernameV3 = "root"
|
|
||||||
|
|
||||||
// MySQL password for version 3
|
|
||||||
passwordV3 = "openIM123"
|
|
||||||
|
|
||||||
// MySQL address for version 3
|
|
||||||
addrV3 = "127.0.0.1:13306"
|
|
||||||
|
|
||||||
// MySQL database name for version 3
|
|
||||||
databaseV3 = "openim_v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
// The number of concurrent processes
|
|
||||||
var concurrency = 1
|
|
||||||
|
|
||||||
log.SetFlags(log.LstdFlags | log.Llongfile)
|
|
||||||
dsnV2 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", usernameV2, passwordV2, addrV2, databaseV2)
|
|
||||||
dsnV3 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", usernameV3, passwordV3, addrV3, databaseV3)
|
|
||||||
dbV2, err := gorm.Open(mysql.Open(dsnV2), &gorm.Config{Logger: logger.Discard})
|
|
||||||
if err != nil {
|
|
||||||
log.Println("open v2 db failed", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
dbV3, err := gorm.Open(mysql.Open(dsnV3), &gorm.Config{Logger: logger.Discard})
|
|
||||||
if err != nil {
|
|
||||||
log.Println("open v3 db failed", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var tasks utils.TakeList
|
|
||||||
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Friend) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.FriendRequest) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Group) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.GroupMember) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.GroupRequest) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.User) })
|
|
||||||
|
|
||||||
utils.RunTask(concurrency, tasks)
|
|
||||||
|
|
||||||
}
|
|
@ -1,65 +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 common
|
|
||||||
|
|
||||||
// =================================== V2 =====================================
|
|
||||||
// MySQL
|
|
||||||
// V2.
|
|
||||||
const (
|
|
||||||
UsernameV2 = "root"
|
|
||||||
PasswordV2 = "openIM"
|
|
||||||
IpV2 = "121.5.182.23:13306"
|
|
||||||
DatabaseV2 = "openIM_v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
// V2 chat.
|
|
||||||
const (
|
|
||||||
ChatUsernameV2 = "root"
|
|
||||||
ChatPasswordV2 = "openIM"
|
|
||||||
ChatIpV2 = "121.5.182.23:13306"
|
|
||||||
ChatDatabaseV2 = "admin_chat"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Kafka.
|
|
||||||
const (
|
|
||||||
Topic = "ws2ms_chat"
|
|
||||||
KafkaAddr = "121.5.182.23:9092"
|
|
||||||
)
|
|
||||||
|
|
||||||
// =================================== V3 =====================================
|
|
||||||
// V3.
|
|
||||||
const (
|
|
||||||
UsernameV3 = "root"
|
|
||||||
PasswordV3 = "openIM123"
|
|
||||||
IpV3 = "43.134.63.160:13306"
|
|
||||||
DatabaseV3 = "openim_v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
// V3 chat.
|
|
||||||
const (
|
|
||||||
ChatUsernameV3 = "root"
|
|
||||||
ChatPasswordV3 = "openIM123"
|
|
||||||
ChatIpV3 = "43.134.63.160:13306"
|
|
||||||
ChatDatabaseV3 = "openim_enterprise"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Zookeeper.
|
|
||||||
const (
|
|
||||||
ZkAddr = "43.134.63.160:12181"
|
|
||||||
ZKSchema = "openim"
|
|
||||||
ZKUsername = ""
|
|
||||||
ZKPassword = ""
|
|
||||||
MsgRpcName = "Msg"
|
|
||||||
)
|
|
@ -1,29 +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 common
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
func ErrorPrint(s string) {
|
|
||||||
fmt.Printf("\x1b[%dm%v\x1b[0m\n", 31, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func SuccessPrint(s string) {
|
|
||||||
fmt.Printf("\x1b[%dm%v\x1b[0m\n", 32, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func WarningPrint(s string) {
|
|
||||||
fmt.Printf("\x1b[%dmWarning: But %v\x1b[0m\n", 33, s)
|
|
||||||
}
|
|
@ -1,68 +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 mysql
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"gorm.io/driver/mysql"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"gorm.io/gorm/logger"
|
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/openim/mysql/conversion"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Cmd() {
|
|
||||||
var (
|
|
||||||
usernameV2 = "root"
|
|
||||||
passwordV2 = "openIM"
|
|
||||||
addrV2 = "121.5.182.23:13306"
|
|
||||||
databaseV2 = "openIM_v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
usernameV3 = "root"
|
|
||||||
passwordV3 = "openIM123"
|
|
||||||
addrV3 = "203.56.175.233:13306"
|
|
||||||
databaseV3 = "openim_v3"
|
|
||||||
)
|
|
||||||
log.SetFlags(log.LstdFlags | log.Llongfile)
|
|
||||||
dsnV2 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", usernameV2, passwordV2, addrV2, databaseV2)
|
|
||||||
dsnV3 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", usernameV3, passwordV3, addrV3, databaseV3)
|
|
||||||
dbV2, err := gorm.Open(mysql.Open(dsnV2), &gorm.Config{Logger: logger.Discard})
|
|
||||||
if err != nil {
|
|
||||||
log.Println("open v2 db failed", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
dbV3, err := gorm.Open(mysql.Open(dsnV3), &gorm.Config{Logger: logger.Discard})
|
|
||||||
if err != nil {
|
|
||||||
log.Println("open v3 db failed", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var tasks utils.TakeList
|
|
||||||
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Friend) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.FriendRequest) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.Group) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.GroupMember) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.GroupRequest) })
|
|
||||||
tasks.Append(func() (string, error) { return utils.FindAndInsert(dbV2, dbV3, conversion.User) })
|
|
||||||
|
|
||||||
utils.RunTask(4, tasks)
|
|
||||||
|
|
||||||
}
|
|
@ -1,125 +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 conversion
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/OpenIMSDK/protocol/constant"
|
|
||||||
|
|
||||||
v2 "github.com/openimsdk/open-im-server/v3/tools/data-conversion/openim/mysql/v2"
|
|
||||||
v3 "github.com/openimsdk/open-im-server/v3/tools/data-conversion/openim/mysql/v3"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/tools/data-conversion/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Friend(v v2.Friend) (v3.FriendModel, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return v3.FriendModel{
|
|
||||||
OwnerUserID: v.OwnerUserID,
|
|
||||||
FriendUserID: v.FriendUserID,
|
|
||||||
Remark: v.Remark,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
AddSource: v.AddSource,
|
|
||||||
OperatorUserID: v.OperatorUserID,
|
|
||||||
Ex: v.Ex,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func FriendRequest(v v2.FriendRequest) (v3.FriendRequestModel, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime, &v.HandleTime)
|
|
||||||
return v3.FriendRequestModel{
|
|
||||||
FromUserID: v.FromUserID,
|
|
||||||
ToUserID: v.ToUserID,
|
|
||||||
HandleResult: v.HandleResult,
|
|
||||||
ReqMsg: v.ReqMsg,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
HandlerUserID: v.HandlerUserID,
|
|
||||||
HandleMsg: v.HandleMsg,
|
|
||||||
HandleTime: v.HandleTime,
|
|
||||||
Ex: v.Ex,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func Group(v v2.Group) (v3.GroupModel, bool) {
|
|
||||||
switch v.GroupType {
|
|
||||||
case constant.WorkingGroup, constant.NormalGroup:
|
|
||||||
v.GroupType = constant.WorkingGroup
|
|
||||||
default:
|
|
||||||
return v3.GroupModel{}, false
|
|
||||||
}
|
|
||||||
utils.InitTime(&v.CreateTime, &v.NotificationUpdateTime)
|
|
||||||
return v3.GroupModel{
|
|
||||||
GroupID: v.GroupID,
|
|
||||||
GroupName: v.GroupName,
|
|
||||||
Notification: v.Notification,
|
|
||||||
Introduction: v.Introduction,
|
|
||||||
FaceURL: v.FaceURL,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
Ex: v.Ex,
|
|
||||||
Status: v.Status,
|
|
||||||
CreatorUserID: v.CreatorUserID,
|
|
||||||
GroupType: v.GroupType,
|
|
||||||
NeedVerification: v.NeedVerification,
|
|
||||||
LookMemberInfo: v.LookMemberInfo,
|
|
||||||
ApplyMemberFriend: v.ApplyMemberFriend,
|
|
||||||
NotificationUpdateTime: v.NotificationUpdateTime,
|
|
||||||
NotificationUserID: v.NotificationUserID,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupMember(v v2.GroupMember) (v3.GroupMemberModel, bool) {
|
|
||||||
utils.InitTime(&v.JoinTime, &v.MuteEndTime)
|
|
||||||
return v3.GroupMemberModel{
|
|
||||||
GroupID: v.GroupID,
|
|
||||||
UserID: v.UserID,
|
|
||||||
Nickname: v.Nickname,
|
|
||||||
FaceURL: v.FaceURL,
|
|
||||||
RoleLevel: v.RoleLevel,
|
|
||||||
JoinTime: v.JoinTime,
|
|
||||||
JoinSource: v.JoinSource,
|
|
||||||
InviterUserID: v.InviterUserID,
|
|
||||||
OperatorUserID: v.OperatorUserID,
|
|
||||||
MuteEndTime: v.MuteEndTime,
|
|
||||||
Ex: v.Ex,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupRequest(v v2.GroupRequest) (v3.GroupRequestModel, bool) {
|
|
||||||
utils.InitTime(&v.ReqTime, &v.HandledTime)
|
|
||||||
return v3.GroupRequestModel{
|
|
||||||
UserID: v.UserID,
|
|
||||||
GroupID: v.GroupID,
|
|
||||||
HandleResult: v.HandleResult,
|
|
||||||
ReqMsg: v.ReqMsg,
|
|
||||||
HandledMsg: v.HandledMsg,
|
|
||||||
ReqTime: v.ReqTime,
|
|
||||||
HandleUserID: v.HandleUserID,
|
|
||||||
HandledTime: v.HandledTime,
|
|
||||||
JoinSource: v.JoinSource,
|
|
||||||
InviterUserID: v.InviterUserID,
|
|
||||||
Ex: v.Ex,
|
|
||||||
}, true
|
|
||||||
}
|
|
||||||
|
|
||||||
func User(v v2.User) (v3.UserModel, bool) {
|
|
||||||
utils.InitTime(&v.CreateTime)
|
|
||||||
return v3.UserModel{
|
|
||||||
UserID: v.UserID,
|
|
||||||
Nickname: v.Nickname,
|
|
||||||
FaceURL: v.FaceURL,
|
|
||||||
Ex: v.Ex,
|
|
||||||
CreateTime: v.CreateTime,
|
|
||||||
AppMangerLevel: v.AppMangerLevel,
|
|
||||||
GlobalRecvMsgOpt: v.GlobalRecvMsgOpt,
|
|
||||||
}, true
|
|
||||||
}
|
|
@ -1,105 +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 db
|
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
type Friend struct {
|
|
||||||
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"`
|
|
||||||
AddSource int32 `gorm:"column:add_source"`
|
|
||||||
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
|
|
||||||
Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type FriendRequest struct {
|
|
||||||
FromUserID string `gorm:"column:from_user_id;primary_key;size:64"`
|
|
||||||
ToUserID string `gorm:"column:to_user_id;primary_key;size:64"`
|
|
||||||
HandleResult int32 `gorm:"column:handle_result"`
|
|
||||||
ReqMsg string `gorm:"column:req_msg;size:255"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
HandlerUserID string `gorm:"column:handler_user_id;size:64"`
|
|
||||||
HandleMsg string `gorm:"column:handle_msg;size:255"`
|
|
||||||
HandleTime time.Time `gorm:"column:handle_time"`
|
|
||||||
Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (FriendRequest) TableName() string {
|
|
||||||
return "friend_requests"
|
|
||||||
}
|
|
||||||
|
|
||||||
type Group 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"`
|
|
||||||
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 GroupMember 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 GroupRequest 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 User struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;size:64"`
|
|
||||||
Nickname string `gorm:"column:name;size:255"`
|
|
||||||
FaceURL string `gorm:"column:face_url;size:255"`
|
|
||||||
Gender int32 `gorm:"column:gender"`
|
|
||||||
PhoneNumber string `gorm:"column:phone_number;size:32"`
|
|
||||||
Birth time.Time `gorm:"column:birth"`
|
|
||||||
Email string `gorm:"column:email;size:64"`
|
|
||||||
Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time;index:create_time"`
|
|
||||||
AppMangerLevel int32 `gorm:"column:app_manger_level"`
|
|
||||||
GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"`
|
|
||||||
|
|
||||||
status int32 `gorm:"column:status"`
|
|
||||||
}
|
|
@ -1,49 +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"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
BlackModelTableName = "blacks"
|
|
||||||
)
|
|
||||||
|
|
||||||
type BlackModel struct {
|
|
||||||
OwnerUserID string `gorm:"column:owner_user_id;primary_key;size:64"`
|
|
||||||
BlockUserID string `gorm:"column:block_user_id;primary_key;size:64"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
AddSource int32 `gorm:"column:add_source"`
|
|
||||||
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
|
|
||||||
Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BlackModel) TableName() string {
|
|
||||||
return BlackModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type BlackModelInterface interface {
|
|
||||||
Create(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]interface{}) (err error)
|
|
||||||
Update(ctx context.Context, blacks []*BlackModel) (err error)
|
|
||||||
Find(ctx context.Context, blacks []*BlackModel) (blackList []*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)
|
|
||||||
FindOwnerBlackInfos(ctx context.Context, ownerUserID string, userIDs []string) (blacks []*BlackModel, 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
|
|
||||||
}
|
|
@ -1,73 +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"
|
|
||||||
"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"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ConversationModel) TableName() string {
|
|
||||||
return conversationModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type ConversationModelInterface interface {
|
|
||||||
Create(ctx context.Context, conversations []*ConversationModel) (err error)
|
|
||||||
Delete(ctx context.Context, groupIDs []string) (err error)
|
|
||||||
UpdateByMap(ctx context.Context, userIDs []string, conversationID string, args map[string]interface{}) (rows int64, err error)
|
|
||||||
Update(ctx context.Context, conversation *ConversationModel) (err error)
|
|
||||||
Find(ctx context.Context, ownerUserID string, conversationIDs []string) (conversations []*ConversationModel, err error)
|
|
||||||
FindUserID(ctx context.Context, userIDs []string, conversationIDs []string) ([]string, error)
|
|
||||||
FindUserIDAllConversationID(ctx context.Context, userID string) ([]string, error)
|
|
||||||
Take(ctx context.Context, userID, conversationID string) (conversation *ConversationModel, err error)
|
|
||||||
FindConversationID(ctx context.Context, userID string, conversationIDs []string) (existConversationID []string, err error)
|
|
||||||
FindUserIDAllConversations(ctx context.Context, userID string) (conversations []*ConversationModel, err error)
|
|
||||||
FindRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string) ([]string, 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)
|
|
||||||
GetAllConversationIDsNumber(ctx context.Context) (int64, error)
|
|
||||||
PageConversationIDs(ctx context.Context, pageNumber, showNumber int32) (conversationIDs []string, err error)
|
|
||||||
GetUserAllHasReadSeqs(ctx context.Context, ownerUserID string) (hashReadSeqs map[string]int64, err error)
|
|
||||||
GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*ConversationModel, error)
|
|
||||||
GetConversationIDsNeedDestruct(ctx context.Context) ([]*ConversationModel, error)
|
|
||||||
GetConversationNotReceiveMessageUserIDs(ctx context.Context, conversationID string) ([]string, error)
|
|
||||||
NewTx(tx any) ConversationModelInterface
|
|
||||||
}
|
|
@ -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"
|
|
@ -1,67 +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"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
FriendModelTableName = "friends"
|
|
||||||
)
|
|
||||||
|
|
||||||
type FriendModel struct {
|
|
||||||
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"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (FriendModel) TableName() string {
|
|
||||||
return FriendModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type FriendModelInterface interface {
|
|
||||||
// Create inserts multiple friend records.
|
|
||||||
Create(ctx context.Context, friends []*FriendModel) error
|
|
||||||
// Delete removes specified friends for an owner user.
|
|
||||||
Delete(ctx context.Context, ownerUserID string, friendUserIDs []string) error
|
|
||||||
// UpdateByMap updates a single friend's information for an owner user based on a map of arguments. Zero values are updated.
|
|
||||||
UpdateByMap(ctx context.Context, ownerUserID string, friendUserID string, args map[string]interface{}) error
|
|
||||||
// Update modifies the information of friends, excluding zero values.
|
|
||||||
Update(ctx context.Context, friends []*FriendModel) error
|
|
||||||
// UpdateRemark updates the remark for a friend, supporting zero values.
|
|
||||||
UpdateRemark(ctx context.Context, ownerUserID, friendUserID, remark string) error
|
|
||||||
// Take retrieves a single friend's information. Returns an error if not found.
|
|
||||||
Take(ctx context.Context, ownerUserID, friendUserID string) (*FriendModel, error)
|
|
||||||
// FindUserState finds the friendship status between two users, returning both if a mutual friendship exists.
|
|
||||||
FindUserState(ctx context.Context, userID1, userID2 string) ([]*FriendModel, error)
|
|
||||||
// FindFriends retrieves a list of friends for an owner, not returning an error for non-existent friendUserIDs.
|
|
||||||
FindFriends(ctx context.Context, ownerUserID string, friendUserIDs []string) ([]*FriendModel, error)
|
|
||||||
// FindReversalFriends finds who has added the specified user as a friend, not returning an error for non-existent ownerUserIDs.
|
|
||||||
FindReversalFriends(ctx context.Context, friendUserID string, ownerUserIDs []string) ([]*FriendModel, error)
|
|
||||||
// FindOwnerFriends paginates through the friends list of an owner user.
|
|
||||||
FindOwnerFriends(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) ([]*FriendModel, int64, error)
|
|
||||||
// FindInWhoseFriends paginates through users who have added the specified user as a friend.
|
|
||||||
FindInWhoseFriends(ctx context.Context, friendUserID string, pageNumber, showNumber int32) ([]*FriendModel, int64, error)
|
|
||||||
// FindFriendUserIDs retrieves a list of friend user IDs for an owner user.
|
|
||||||
FindFriendUserIDs(ctx context.Context, ownerUserID string) ([]string, error)
|
|
||||||
// NewTx creates a new transactional instance of the FriendModelInterface.
|
|
||||||
NewTx(tx any) FriendModelInterface
|
|
||||||
}
|
|
@ -1,70 +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"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
const FriendRequestModelTableName = "friend_requests"
|
|
||||||
|
|
||||||
type FriendRequestModel struct {
|
|
||||||
FromUserID string `gorm:"column:from_user_id;primary_key;size:64"`
|
|
||||||
ToUserID string `gorm:"column:to_user_id;primary_key;size:64"`
|
|
||||||
HandleResult int32 `gorm:"column:handle_result"`
|
|
||||||
ReqMsg string `gorm:"column:req_msg;size:255"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time; autoCreateTime"`
|
|
||||||
HandlerUserID string `gorm:"column:handler_user_id;size:64"`
|
|
||||||
HandleMsg string `gorm:"column:handle_msg;size:255"`
|
|
||||||
HandleTime time.Time `gorm:"column:handle_time"`
|
|
||||||
Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (FriendRequestModel) TableName() string {
|
|
||||||
return FriendRequestModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type FriendRequestModelInterface interface {
|
|
||||||
// Insert multiple records
|
|
||||||
Create(ctx context.Context, friendRequests []*FriendRequestModel) (err error)
|
|
||||||
|
|
||||||
// Delete a record
|
|
||||||
Delete(ctx context.Context, fromUserID, toUserID string) (err error)
|
|
||||||
|
|
||||||
// Update records with zero values based on a map of changes
|
|
||||||
UpdateByMap(ctx context.Context, formUserID, toUserID string, args map[string]interface{}) (err error)
|
|
||||||
|
|
||||||
// Update multiple records (non-zero values)
|
|
||||||
Update(ctx context.Context, friendRequest *FriendRequestModel) (err error)
|
|
||||||
|
|
||||||
// Find a friend request sent to a specific user; does not return an error if not found
|
|
||||||
Find(ctx context.Context, fromUserID, toUserID string) (friendRequest *FriendRequestModel, err error)
|
|
||||||
|
|
||||||
// Alias for Find (retrieves a friend request between two users)
|
|
||||||
Take(ctx context.Context, fromUserID, toUserID string) (friendRequest *FriendRequestModel, err error)
|
|
||||||
|
|
||||||
// Get a list of friend requests received by `toUserID`
|
|
||||||
FindToUserID(ctx context.Context, toUserID string, pageNumber, showNumber int32) (friendRequests []*FriendRequestModel, total int64, err error)
|
|
||||||
|
|
||||||
// Get a list of friend requests sent by `fromUserID`
|
|
||||||
FindFromUserID(ctx context.Context, fromUserID string, pageNumber, showNumber int32) (friendRequests []*FriendRequestModel, total int64, err error)
|
|
||||||
|
|
||||||
// Find all friend requests between two users (both directions)
|
|
||||||
FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*FriendRequestModel, err error)
|
|
||||||
|
|
||||||
// Create a new transaction
|
|
||||||
NewTx(tx any) FriendRequestModelInterface
|
|
||||||
}
|
|
@ -1,67 +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"
|
|
||||||
"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"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (GroupModel) TableName() string {
|
|
||||||
return GroupModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type GroupModelInterface interface {
|
|
||||||
NewTx(tx any) GroupModelInterface
|
|
||||||
Create(ctx context.Context, groups []*GroupModel) (err error)
|
|
||||||
UpdateMap(ctx context.Context, groupID string, args map[string]interface{}) (err error)
|
|
||||||
UpdateStatus(ctx context.Context, groupID string, status int32) (err error)
|
|
||||||
Find(ctx context.Context, groupIDs []string) (groups []*GroupModel, err error)
|
|
||||||
FindNotDismissedGroup(ctx context.Context, groupIDs []string) (groups []*GroupModel, err error)
|
|
||||||
Take(ctx context.Context, groupID string) (group *GroupModel, err error)
|
|
||||||
Search(
|
|
||||||
ctx context.Context,
|
|
||||||
keyword string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (total uint32, groups []*GroupModel, err error)
|
|
||||||
// GetGroupIDsByCreatorUserID retrieves a list of group IDs created by the specified user.
|
|
||||||
GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error)
|
|
||||||
// CountTotal retrieves the total number of groups.
|
|
||||||
CountTotal(ctx context.Context, before *time.Time) (count int64, err error)
|
|
||||||
// CountRangeEverydayTotal retrieves the total number of groups created every day within the specified time range.
|
|
||||||
CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error)
|
|
||||||
}
|
|
@ -1,74 +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"
|
|
||||||
"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"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (GroupMemberModel) TableName() string {
|
|
||||||
return GroupMemberModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type GroupMemberModelInterface interface {
|
|
||||||
NewTx(tx any) GroupMemberModelInterface
|
|
||||||
Create(ctx context.Context, groupMembers []*GroupMemberModel) (err error)
|
|
||||||
Delete(ctx context.Context, groupID string, userIDs []string) (err error)
|
|
||||||
DeleteGroup(ctx context.Context, groupIDs []string) (err error)
|
|
||||||
Update(ctx context.Context, groupID string, userID string, data map[string]any) (err error)
|
|
||||||
UpdateRoleLevel(ctx context.Context, groupID string, userID string, roleLevel int32) (rowsAffected int64, err error)
|
|
||||||
Find(
|
|
||||||
ctx context.Context,
|
|
||||||
groupIDs []string,
|
|
||||||
userIDs []string,
|
|
||||||
roleLevels []int32,
|
|
||||||
) (groupMembers []*GroupMemberModel, err error)
|
|
||||||
FindMemberUserID(ctx context.Context, groupID string) (userIDs []string, err error)
|
|
||||||
Take(ctx context.Context, groupID string, userID string) (groupMember *GroupMemberModel, err error)
|
|
||||||
TakeOwner(ctx context.Context, groupID string) (groupMember *GroupMemberModel, err error)
|
|
||||||
SearchMember(
|
|
||||||
ctx context.Context,
|
|
||||||
keyword string,
|
|
||||||
groupIDs []string,
|
|
||||||
userIDs []string,
|
|
||||||
roleLevels []int32,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (total uint32, groupList []*GroupMemberModel, err error)
|
|
||||||
MapGroupMemberNum(ctx context.Context, groupIDs []string) (count map[string]uint32, err error)
|
|
||||||
FindJoinUserID(ctx context.Context, groupIDs []string) (groupUsers map[string][]string, err error)
|
|
||||||
FindUserJoinedGroupID(ctx context.Context, userID string) (groupIDs []string, err error)
|
|
||||||
TakeGroupMemberNum(ctx context.Context, groupID string) (count int64, err error)
|
|
||||||
FindUsersJoinedGroupID(ctx context.Context, userIDs []string) (map[string][]string, error)
|
|
||||||
FindUserManagedGroupID(ctx context.Context, userID string) (groupIDs []string, err error)
|
|
||||||
}
|
|
@ -1,61 +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"
|
|
||||||
"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"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (GroupRequestModel) TableName() string {
|
|
||||||
return GroupRequestModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
type GroupRequestModelInterface interface {
|
|
||||||
NewTx(tx any) GroupRequestModelInterface
|
|
||||||
Create(ctx context.Context, groupRequests []*GroupRequestModel) (err error)
|
|
||||||
Delete(ctx context.Context, groupID string, userID string) (err error)
|
|
||||||
UpdateHandler(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32) (err error)
|
|
||||||
Take(ctx context.Context, groupID string, userID string) (groupRequest *GroupRequestModel, err error)
|
|
||||||
FindGroupRequests(ctx context.Context, groupID string, userIDs []string) (int64, []*GroupRequestModel, error)
|
|
||||||
Page(
|
|
||||||
ctx context.Context,
|
|
||||||
userID string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (total uint32, groups []*GroupRequestModel, err error)
|
|
||||||
PageGroup(
|
|
||||||
ctx context.Context,
|
|
||||||
groupIDs []string,
|
|
||||||
pageNumber, showNumber int32,
|
|
||||||
) (total uint32, groups []*GroupRequestModel, err error)
|
|
||||||
}
|
|
@ -1,43 +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"
|
|
||||||
"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)"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Log) TableName() string {
|
|
||||||
return "logs"
|
|
||||||
}
|
|
||||||
|
|
||||||
type LogInterface interface {
|
|
||||||
Create(ctx context.Context, log []*Log) error
|
|
||||||
Search(ctx context.Context, keyword string, start time.Time, end time.Time, pageNumber int32, showNumber int32) (uint32, []*Log, error)
|
|
||||||
Delete(ctx context.Context, logID []string, userID string) error
|
|
||||||
Get(ctx context.Context, logIDs []string, userID string) ([]*Log, error)
|
|
||||||
}
|
|
@ -1,45 +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"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
ObjectInfoModelTableName = "object"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ObjectModel struct {
|
|
||||||
Name string `gorm:"column:name;primary_key"`
|
|
||||||
UserID string `gorm:"column:user_id"`
|
|
||||||
Hash string `gorm:"column:hash"`
|
|
||||||
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 {
|
|
||||||
NewTx(tx any) ObjectInfoModelInterface
|
|
||||||
SetObject(ctx context.Context, obj *ObjectModel) error
|
|
||||||
Take(ctx context.Context, name string) (*ObjectModel, error)
|
|
||||||
}
|
|
@ -1,87 +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"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
UserModelTableName = "users"
|
|
||||||
)
|
|
||||||
|
|
||||||
type UserModel struct {
|
|
||||||
UserID string `gorm:"column:user_id;primary_key;size:64"`
|
|
||||||
Nickname string `gorm:"column:name;size:255"`
|
|
||||||
FaceURL string `gorm:"column:face_url;size:255"`
|
|
||||||
Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time;index:create_time;autoCreateTime"`
|
|
||||||
AppMangerLevel int32 `gorm:"column:app_manger_level;default:1"`
|
|
||||||
GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UserModel) GetNickname() string {
|
|
||||||
return u.Nickname
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UserModel) GetFaceURL() string {
|
|
||||||
return u.FaceURL
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UserModel) GetUserID() string {
|
|
||||||
return u.UserID
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UserModel) GetEx() string {
|
|
||||||
return u.Ex
|
|
||||||
}
|
|
||||||
|
|
||||||
func (UserModel) TableName() string {
|
|
||||||
return UserModelTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
// UserModelInterface defines the operations available for managing user models.
|
|
||||||
type UserModelInterface interface {
|
|
||||||
// Create inserts a new user or multiple users into the database.
|
|
||||||
Create(ctx context.Context, users []*UserModel) (err error)
|
|
||||||
|
|
||||||
// UpdateByMap updates a user's information based on a map of changes.
|
|
||||||
UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error)
|
|
||||||
|
|
||||||
// Update modifies a user's information in the database.
|
|
||||||
Update(ctx context.Context, user *UserModel) (err error)
|
|
||||||
|
|
||||||
// Find retrieves information for a list of users by their IDs. If a user does not exist, it is simply skipped without returning an error.
|
|
||||||
Find(ctx context.Context, userIDs []string) (users []*UserModel, err error)
|
|
||||||
|
|
||||||
// Take retrieves a specific user's information by their ID. Returns an error if the user does not exist.
|
|
||||||
Take(ctx context.Context, userID string) (user *UserModel, err error)
|
|
||||||
|
|
||||||
// Page retrieves a paginated list of users and the total count of users. If no users exist, returns an empty list without an error.
|
|
||||||
Page(ctx context.Context, pageNumber, showNumber int32) (users []*UserModel, count int64, err error)
|
|
||||||
|
|
||||||
// GetAllUserID retrieves all user IDs in a paginated manner.
|
|
||||||
GetAllUserID(ctx context.Context, pageNumber, showNumber int32) (userIDs []string, err error)
|
|
||||||
|
|
||||||
// GetUserGlobalRecvMsgOpt retrieves a user's global message receiving option.
|
|
||||||
GetUserGlobalRecvMsgOpt(ctx context.Context, userID string) (opt int, err error)
|
|
||||||
|
|
||||||
// CountTotal returns the total number of users before a specified time.
|
|
||||||
CountTotal(ctx context.Context, before *time.Time) (count int64, err error)
|
|
||||||
|
|
||||||
// CountRangeEverydayTotal calculates the daily increment of users within a specified time range.
|
|
||||||
CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error)
|
|
||||||
}
|
|
@ -1,36 +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 (
|
|
||||||
"gorm.io/gorm"
|
|
||||||
|
|
||||||
"github.com/OpenIMSDK/tools/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
type BatchUpdateGroupMember struct {
|
|
||||||
GroupID string
|
|
||||||
UserID string
|
|
||||||
Map map[string]any
|
|
||||||
}
|
|
||||||
|
|
||||||
type GroupSimpleUserID struct {
|
|
||||||
Hash uint64
|
|
||||||
MemberNum uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsNotFound(err error) bool {
|
|
||||||
return utils.Unwrap(err) == gorm.ErrRecordNotFound
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,329 +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.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
|
|
||||||
import "Open-IM-Server/pkg/proto/sdk_ws/wrappers.proto";
|
|
||||||
option go_package = "Open_IM/pkg/proto/msg;msg";
|
|
||||||
package msg;
|
|
||||||
|
|
||||||
message MsgDataToMQ{
|
|
||||||
string token =1;
|
|
||||||
string operationID = 2;
|
|
||||||
server_api_params.MsgData msgData = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message MsgDataToDB {
|
|
||||||
server_api_params.MsgData msgData = 1;
|
|
||||||
string operationID = 2;
|
|
||||||
|
|
||||||
}
|
|
||||||
message PushMsgDataToMQ{
|
|
||||||
string OperationID = 1;
|
|
||||||
server_api_params.MsgData msgData = 2;
|
|
||||||
string pushToUserID = 3;
|
|
||||||
}
|
|
||||||
message MsgDataToMongoByMQ{
|
|
||||||
uint64 lastSeq =1;
|
|
||||||
string aggregationID = 2;
|
|
||||||
repeated MsgDataToMQ messageList = 3;
|
|
||||||
string triggerID = 4;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//message PullMessageReq {
|
|
||||||
// string UserID = 1;
|
|
||||||
// int64 SeqBegin = 2;
|
|
||||||
// int64 SeqEnd = 3;
|
|
||||||
// string OperationID = 4;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//message PullMessageResp {
|
|
||||||
// int32 ErrCode = 1;
|
|
||||||
// string ErrMsg = 2;
|
|
||||||
// int64 MaxSeq = 3;
|
|
||||||
// int64 MinSeq = 4;
|
|
||||||
// repeated GatherFormat SingleUserMsg = 5;
|
|
||||||
// repeated GatherFormat GroupUserMsg = 6;
|
|
||||||
//}
|
|
||||||
//message PullMessageBySeqListReq{
|
|
||||||
// string UserID = 1;
|
|
||||||
// string OperationID = 2;
|
|
||||||
// repeated int64 seqList =3;
|
|
||||||
//}
|
|
||||||
message GetMaxAndMinSeqReq {
|
|
||||||
string UserID = 1;
|
|
||||||
string OperationID = 2;
|
|
||||||
}
|
|
||||||
message GetMaxAndMinSeqResp {
|
|
||||||
int32 ErrCode = 1;
|
|
||||||
string ErrMsg = 2;
|
|
||||||
uint32 MaxSeq = 3;
|
|
||||||
uint32 MinSeq = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SendMsgReq {
|
|
||||||
|
|
||||||
string token =1;
|
|
||||||
string operationID = 2;
|
|
||||||
server_api_params.MsgData msgData = 3;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
message SendMsgResp {
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
string serverMsgID = 4;
|
|
||||||
string clientMsgID = 5;
|
|
||||||
int64 sendTime = 6;
|
|
||||||
string ex = 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message ClearMsgReq{
|
|
||||||
string userID = 1;
|
|
||||||
string opUserID = 2;
|
|
||||||
string operationID = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message ClearMsgResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SetMsgMinSeqReq{
|
|
||||||
string userID = 1;
|
|
||||||
string groupID = 2;
|
|
||||||
uint32 minSeq = 3;
|
|
||||||
string operationID = 4;
|
|
||||||
string opUserID = 5;
|
|
||||||
}
|
|
||||||
message SetMsgMinSeqResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SetSendMsgStatusReq{
|
|
||||||
string operationID = 1;
|
|
||||||
int32 status = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SetSendMsgStatusResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GetSendMsgStatusReq{
|
|
||||||
string operationID = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GetSendMsgStatusResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
int32 status = 3;
|
|
||||||
}
|
|
||||||
message DelSuperGroupMsgReq{
|
|
||||||
string opUserID = 1;
|
|
||||||
string userID = 2;
|
|
||||||
string groupID = 3;
|
|
||||||
string operationID = 4;
|
|
||||||
}
|
|
||||||
message DelSuperGroupMsgResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
|
||||||
message GetSuperGroupMsgReq{
|
|
||||||
string operationID = 1;
|
|
||||||
uint32 Seq = 2;
|
|
||||||
string groupID = 3;
|
|
||||||
|
|
||||||
}
|
|
||||||
message GetSuperGroupMsgResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
server_api_params.MsgData msgData = 3;
|
|
||||||
}
|
|
||||||
message GetWriteDiffMsgReq{
|
|
||||||
string operationID = 1;
|
|
||||||
uint32 Seq = 2;
|
|
||||||
|
|
||||||
}
|
|
||||||
message GetWriteDiffMsgResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
server_api_params.MsgData msgData = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ModifyMessageReactionExtensionsReq {
|
|
||||||
string operationID = 1;
|
|
||||||
string sourceID = 2;
|
|
||||||
string opUserID = 3;
|
|
||||||
int32 sessionType = 4;
|
|
||||||
map <string, server_api_params.KeyValue>reactionExtensionList = 5;
|
|
||||||
string clientMsgID = 6;
|
|
||||||
google.protobuf.StringValue ex = 7;
|
|
||||||
google.protobuf.StringValue attachedInfo = 8;
|
|
||||||
bool isReact = 9;
|
|
||||||
bool isExternalExtensions = 10;
|
|
||||||
int64 msgFirstModifyTime = 11;
|
|
||||||
}
|
|
||||||
message SetMessageReactionExtensionsReq {
|
|
||||||
string operationID = 1;
|
|
||||||
string sourceID = 2;
|
|
||||||
string opUserID = 3;
|
|
||||||
int32 opUserIDPlatformID = 4;
|
|
||||||
int32 sessionType = 5;
|
|
||||||
map <string, server_api_params.KeyValue>reactionExtensionList = 6;
|
|
||||||
string clientMsgID = 7;
|
|
||||||
google.protobuf.StringValue ex = 8;
|
|
||||||
google.protobuf.StringValue attachedInfo = 9;
|
|
||||||
bool isReact = 10;
|
|
||||||
bool isExternalExtensions = 11;
|
|
||||||
int64 msgFirstModifyTime = 12;
|
|
||||||
}
|
|
||||||
message SetMessageReactionExtensionsResp {
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
string clientMsgID = 3;
|
|
||||||
int64 msgFirstModifyTime = 4;
|
|
||||||
bool isReact = 5;
|
|
||||||
repeated KeyValueResp result = 6;
|
|
||||||
}
|
|
||||||
message AddMessageReactionExtensionsReq {
|
|
||||||
string operationID = 1;
|
|
||||||
string sourceID = 2;
|
|
||||||
string opUserID = 3;
|
|
||||||
int32 opUserIDPlatformID = 4;
|
|
||||||
int32 sessionType = 5;
|
|
||||||
map <string, server_api_params.KeyValue>reactionExtensionList = 6;
|
|
||||||
string clientMsgID = 7;
|
|
||||||
google.protobuf.StringValue ex = 8;
|
|
||||||
google.protobuf.StringValue attachedInfo = 9;
|
|
||||||
bool isReact = 10;
|
|
||||||
bool isExternalExtensions = 11;
|
|
||||||
int64 msgFirstModifyTime = 12;
|
|
||||||
uint32 seq = 13;
|
|
||||||
}
|
|
||||||
message AddMessageReactionExtensionsResp {
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
string clientMsgID = 3;
|
|
||||||
int64 msgFirstModifyTime = 4;
|
|
||||||
bool isReact = 5;
|
|
||||||
repeated KeyValueResp result = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message GetMessageListReactionExtensionsReq {
|
|
||||||
string operationID = 1;
|
|
||||||
string opUserID = 2;
|
|
||||||
string sourceID = 3;
|
|
||||||
int32 sessionType = 4;
|
|
||||||
bool isExternalExtensions = 5;
|
|
||||||
message MessageReactionKey {
|
|
||||||
string clientMsgID = 1;
|
|
||||||
int64 msgFirstModifyTime = 2;
|
|
||||||
}
|
|
||||||
repeated string typeKeyList = 6;
|
|
||||||
repeated MessageReactionKey messageReactionKeyList = 7;
|
|
||||||
}
|
|
||||||
message GetMessageListReactionExtensionsResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
repeated SingleMessageExtensionResult singleMessageResult =3;
|
|
||||||
|
|
||||||
}
|
|
||||||
message SingleMessageExtensionResult {
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
map <string, server_api_params.KeyValue>reactionExtensionList = 3;
|
|
||||||
string clientMsgID = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message ModifyMessageReactionExtensionsResp {
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
repeated ExtendMsgResp successList = 3;
|
|
||||||
repeated ExtendMsgResp failedList = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DeleteMessageListReactionExtensionsReq {
|
|
||||||
string operationID = 1;
|
|
||||||
string opUserID = 2;
|
|
||||||
string sourceID = 3;
|
|
||||||
int32 opUserIDPlatformID = 4;
|
|
||||||
int32 sessionType = 5;
|
|
||||||
string clientMsgID = 6;
|
|
||||||
bool isExternalExtensions = 7;
|
|
||||||
int64 msgFirstModifyTime = 8;
|
|
||||||
repeated server_api_params.KeyValue reactionExtensionList = 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DeleteMessageListReactionExtensionsResp {
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
repeated KeyValueResp result = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ExtendMsgResp {
|
|
||||||
ExtendMsg extendMsg = 1;
|
|
||||||
int32 errCode = 2;
|
|
||||||
string errMsg = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ExtendMsg {
|
|
||||||
map <string, KeyValueResp>reactionExtensionList = 1;
|
|
||||||
string clientMsgID = 2;
|
|
||||||
int64 msgFirstModifyTime = 3;
|
|
||||||
string attachedInfo = 4;
|
|
||||||
string ex = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message KeyValueResp {
|
|
||||||
server_api_params.KeyValue keyValue = 1;
|
|
||||||
int32 errCode = 2;
|
|
||||||
string errMsg = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message MsgDataToModifyByMQ{
|
|
||||||
string aggregationID = 1;
|
|
||||||
repeated MsgDataToMQ messageList = 2;
|
|
||||||
string triggerID = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
service msg {
|
|
||||||
rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp);
|
|
||||||
rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp);
|
|
||||||
rpc SendMsg(SendMsgReq) returns(SendMsgResp);
|
|
||||||
rpc DelMsgList(server_api_params.DelMsgListReq) returns(server_api_params.DelMsgListResp);
|
|
||||||
rpc DelSuperGroupMsg(DelSuperGroupMsgReq) returns(DelSuperGroupMsgResp);
|
|
||||||
rpc ClearMsg(ClearMsgReq) returns(ClearMsgResp);
|
|
||||||
rpc SetMsgMinSeq(SetMsgMinSeqReq) returns(SetMsgMinSeqResp);
|
|
||||||
rpc SetSendMsgStatus(SetSendMsgStatusReq) returns(SetSendMsgStatusResp);
|
|
||||||
rpc GetSendMsgStatus(GetSendMsgStatusReq) returns(GetSendMsgStatusResp);
|
|
||||||
rpc GetSuperGroupMsg(GetSuperGroupMsgReq) returns(GetSuperGroupMsgResp);
|
|
||||||
rpc GetWriteDiffMsg(GetWriteDiffMsgReq) returns(GetWriteDiffMsgResp);
|
|
||||||
|
|
||||||
// modify msg
|
|
||||||
rpc SetMessageReactionExtensions(SetMessageReactionExtensionsReq) returns(SetMessageReactionExtensionsResp);
|
|
||||||
rpc GetMessageListReactionExtensions(GetMessageListReactionExtensionsReq) returns(GetMessageListReactionExtensionsResp);
|
|
||||||
rpc AddMessageReactionExtensions(AddMessageReactionExtensionsReq) returns(AddMessageReactionExtensionsResp);
|
|
||||||
rpc DeleteMessageReactionExtensions(DeleteMessageListReactionExtensionsReq) returns(DeleteMessageListReactionExtensionsResp);
|
|
||||||
}
|
|
@ -1,123 +0,0 @@
|
|||||||
// Protocol Buffers - Google's data interchange format
|
|
||||||
// Copyright 2008 Google Inc. All rights reserved.
|
|
||||||
// https://developers.google.com/protocol-buffers/
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
// Wrappers for primitive (non-message) types. These types are useful
|
|
||||||
// for embedding primitives in the `google.protobuf.Any` type and for places
|
|
||||||
// where we need to distinguish between the absence of a primitive
|
|
||||||
// typed field and its default value.
|
|
||||||
//
|
|
||||||
// These wrappers have no meaningful use within repeated fields as they lack
|
|
||||||
// the ability to detect presence on individual elements.
|
|
||||||
// These wrappers have no meaningful use within a map or a oneof since
|
|
||||||
// individual entries of a map or fields of a oneof can already detect presence.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package google.protobuf;
|
|
||||||
|
|
||||||
option csharp_namespace = "Google.Protobuf.WellKnownTypes";
|
|
||||||
option cc_enable_arenas = true;
|
|
||||||
option go_package = "google.golang.org/protobuf/types/known/wrapperspb";
|
|
||||||
option java_package = "com.google.protobuf";
|
|
||||||
option java_outer_classname = "WrappersProto";
|
|
||||||
option java_multiple_files = true;
|
|
||||||
option objc_class_prefix = "GPB";
|
|
||||||
|
|
||||||
// Wrapper message for `double`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `DoubleValue` is JSON number.
|
|
||||||
message DoubleValue {
|
|
||||||
// The double value.
|
|
||||||
double value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `float`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `FloatValue` is JSON number.
|
|
||||||
message FloatValue {
|
|
||||||
// The float value.
|
|
||||||
float value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `int64`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Int64Value` is JSON string.
|
|
||||||
message Int64Value {
|
|
||||||
// The int64 value.
|
|
||||||
int64 value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `uint64`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `UInt64Value` is JSON string.
|
|
||||||
message UInt64Value {
|
|
||||||
// The uint64 value.
|
|
||||||
uint64 value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `int32`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `Int32Value` is JSON number.
|
|
||||||
message Int32Value {
|
|
||||||
// The int32 value.
|
|
||||||
int32 value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `uint32`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `UInt32Value` is JSON number.
|
|
||||||
message UInt32Value {
|
|
||||||
// The uint32 value.
|
|
||||||
uint32 value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `bool`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `BoolValue` is JSON `true` and `false`.
|
|
||||||
message BoolValue {
|
|
||||||
// The bool value.
|
|
||||||
bool value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `string`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `StringValue` is JSON string.
|
|
||||||
message StringValue {
|
|
||||||
// The string value.
|
|
||||||
string value = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrapper message for `bytes`.
|
|
||||||
//
|
|
||||||
// The JSON representation for `BytesValue` is JSON string.
|
|
||||||
message BytesValue {
|
|
||||||
// The bytes value.
|
|
||||||
bytes value = 1;
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,754 +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.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
import "Open-IM-Server/pkg/proto/sdk_ws/wrappers.proto";
|
|
||||||
option go_package = "Open_IM/pkg/proto/sdk_ws;server_api_params";
|
|
||||||
package server_api_params;
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////base///////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
message GroupInfo{
|
|
||||||
string groupID = 1;
|
|
||||||
string groupName = 2;
|
|
||||||
string notification = 3;
|
|
||||||
string introduction = 4;
|
|
||||||
string faceURL = 5;
|
|
||||||
string ownerUserID = 6;
|
|
||||||
uint32 createTime = 7;
|
|
||||||
uint32 memberCount = 8;
|
|
||||||
string ex = 9;
|
|
||||||
int32 status = 10;
|
|
||||||
string creatorUserID = 11;
|
|
||||||
int32 groupType = 12;
|
|
||||||
int32 needVerification = 13;
|
|
||||||
int32 lookMemberInfo = 14;
|
|
||||||
int32 applyMemberFriend = 15;
|
|
||||||
uint32 notificationUpdateTime = 16;
|
|
||||||
string notificationUserID = 17;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupInfoForSet{
|
|
||||||
string groupID = 1;
|
|
||||||
string groupName = 2;
|
|
||||||
string notification = 3;
|
|
||||||
string introduction = 4;
|
|
||||||
string faceURL = 5;
|
|
||||||
string ex = 6;
|
|
||||||
google.protobuf.Int32Value needVerification = 7;
|
|
||||||
google.protobuf.Int32Value lookMemberInfo = 8;
|
|
||||||
google.protobuf.Int32Value applyMemberFriend = 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message GroupMemberFullInfo {
|
|
||||||
string groupID = 1 ;
|
|
||||||
string userID = 2 ;
|
|
||||||
int32 roleLevel = 3;
|
|
||||||
int32 joinTime = 4;
|
|
||||||
string nickname = 5;
|
|
||||||
string faceURL = 6;
|
|
||||||
int32 appMangerLevel = 7; //if >0
|
|
||||||
int32 joinSource = 8;
|
|
||||||
string operatorUserID = 9;
|
|
||||||
string ex = 10;
|
|
||||||
uint32 muteEndTime = 11;
|
|
||||||
string inviterUserID = 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
message PublicUserInfo{
|
|
||||||
string userID = 1;
|
|
||||||
string nickname = 2;
|
|
||||||
string faceURL = 3;
|
|
||||||
int32 gender = 4;
|
|
||||||
string ex = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message UserInfo{
|
|
||||||
string userID = 1;
|
|
||||||
string nickname = 2;
|
|
||||||
string faceURL = 3;
|
|
||||||
int32 gender = 4;
|
|
||||||
string phoneNumber = 5;
|
|
||||||
uint32 birth = 6;
|
|
||||||
string email = 7;
|
|
||||||
string ex = 8;
|
|
||||||
uint32 createTime = 9;
|
|
||||||
int32 appMangerLevel = 10;
|
|
||||||
int32 globalRecvMsgOpt = 11;
|
|
||||||
string birthStr = 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
message FriendInfo{
|
|
||||||
string ownerUserID = 1;
|
|
||||||
string remark = 2;
|
|
||||||
uint32 createTime = 3;
|
|
||||||
UserInfo friendUser = 4;
|
|
||||||
int32 addSource = 5;
|
|
||||||
string operatorUserID = 6;
|
|
||||||
string ex = 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
message BlackInfo{
|
|
||||||
string ownerUserID = 1;
|
|
||||||
uint32 createTime = 2;
|
|
||||||
PublicUserInfo blackUserInfo = 3;
|
|
||||||
int32 addSource = 4;
|
|
||||||
string operatorUserID = 5;
|
|
||||||
string ex = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupRequest{
|
|
||||||
PublicUserInfo userInfo = 1;
|
|
||||||
GroupInfo groupInfo = 2;
|
|
||||||
int32 handleResult = 3;
|
|
||||||
string reqMsg = 4;
|
|
||||||
string handleMsg = 5;
|
|
||||||
uint32 reqTime = 6;
|
|
||||||
string handleUserID = 7;
|
|
||||||
uint32 handleTime = 8;
|
|
||||||
string ex = 9;
|
|
||||||
int32 joinSource = 10;
|
|
||||||
string inviterUserID = 11;
|
|
||||||
}
|
|
||||||
|
|
||||||
message FriendRequest{
|
|
||||||
string fromUserID = 1;
|
|
||||||
string fromNickname = 2;
|
|
||||||
string fromFaceURL = 3;
|
|
||||||
int32 fromGender = 4;
|
|
||||||
string toUserID = 5;
|
|
||||||
string toNickname = 6;
|
|
||||||
string toFaceURL = 7;
|
|
||||||
int32 toGender = 8;
|
|
||||||
int32 handleResult = 9;
|
|
||||||
string reqMsg = 10;
|
|
||||||
uint32 createTime = 11;
|
|
||||||
string handlerUserID = 12;
|
|
||||||
string handleMsg = 13;
|
|
||||||
uint32 handleTime = 14;
|
|
||||||
string ex = 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////organization/////////////////////////////////////
|
|
||||||
|
|
||||||
message Department {
|
|
||||||
string departmentID = 1;
|
|
||||||
string faceURL = 2;
|
|
||||||
string name = 3;
|
|
||||||
string parentID = 4;
|
|
||||||
int32 order = 5;
|
|
||||||
int32 departmentType = 6;
|
|
||||||
uint32 createTime = 7;
|
|
||||||
uint32 subDepartmentNum = 8;
|
|
||||||
uint32 memberNum = 9;
|
|
||||||
string ex = 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
message OrganizationUser {
|
|
||||||
string userID = 1;
|
|
||||||
string nickname = 2;
|
|
||||||
string englishName = 3;
|
|
||||||
string faceURL = 4;
|
|
||||||
int32 gender = 5;
|
|
||||||
string mobile = 6;
|
|
||||||
string telephone = 7;
|
|
||||||
uint32 birth = 8;
|
|
||||||
string email = 9;
|
|
||||||
uint32 createTime = 10;
|
|
||||||
string ex = 11;
|
|
||||||
string birthStr = 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DepartmentMember {
|
|
||||||
string userID = 1;
|
|
||||||
string departmentID = 2;
|
|
||||||
int32 order = 3;
|
|
||||||
string position = 4;
|
|
||||||
int32 leader = 5;
|
|
||||||
int32 status = 6;
|
|
||||||
string ex = 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message UserDepartmentMember {
|
|
||||||
OrganizationUser organizationUser = 1;
|
|
||||||
DepartmentMember departmentMember = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message UserInDepartment {
|
|
||||||
OrganizationUser organizationUser = 1;
|
|
||||||
repeated DepartmentMember departmentMemberList = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////organization end//////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////base end/////////////////////////////////////
|
|
||||||
message PullMessageBySeqListReq{
|
|
||||||
string userID = 1;
|
|
||||||
string operationID = 2;
|
|
||||||
repeated uint32 seqList = 3;
|
|
||||||
map <string, seqList>groupSeqList = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message seqList {
|
|
||||||
repeated uint32 seqList = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message MsgDataList {
|
|
||||||
repeated MsgData msgDataList = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message PullMessageBySeqListResp {
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
repeated MsgData list = 3;
|
|
||||||
map<string, MsgDataList> groupMsgDataList = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
message GetMaxAndMinSeqReq {
|
|
||||||
repeated string groupIDList = 1;
|
|
||||||
string userID = 2;
|
|
||||||
string operationID = 3;
|
|
||||||
}
|
|
||||||
message MaxAndMinSeq{
|
|
||||||
uint32 maxSeq = 1;
|
|
||||||
uint32 minSeq = 2;
|
|
||||||
}
|
|
||||||
message GetMaxAndMinSeqResp {
|
|
||||||
uint32 maxSeq = 1;
|
|
||||||
uint32 minSeq = 2;
|
|
||||||
int32 errCode = 3;
|
|
||||||
string errMsg = 4;
|
|
||||||
map<string, MaxAndMinSeq> groupMaxAndMinSeq = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message UserSendMsgResp {
|
|
||||||
string serverMsgID = 1;
|
|
||||||
string clientMsgID = 2;
|
|
||||||
int64 sendTime = 3;
|
|
||||||
string ex = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message MsgData {
|
|
||||||
string sendID = 1;
|
|
||||||
string recvID = 2;
|
|
||||||
string groupID = 3;
|
|
||||||
string clientMsgID = 4;
|
|
||||||
string serverMsgID = 5;
|
|
||||||
int32 senderPlatformID = 6;
|
|
||||||
string senderNickname = 7;
|
|
||||||
string senderFaceURL = 8;
|
|
||||||
int32 sessionType = 9;
|
|
||||||
int32 msgFrom = 10;
|
|
||||||
int32 contentType = 11;
|
|
||||||
bytes content = 12;
|
|
||||||
uint32 seq = 14;
|
|
||||||
int64 sendTime = 15;
|
|
||||||
int64 createTime = 16;
|
|
||||||
int32 status = 17;
|
|
||||||
map<string, bool> options = 18;
|
|
||||||
OfflinePushInfo offlinePushInfo = 19;
|
|
||||||
repeated string atUserIDList = 20;
|
|
||||||
bytes msgDataList = 21;
|
|
||||||
string attachedInfo = 22;
|
|
||||||
string ex = 23;
|
|
||||||
|
|
||||||
bool isReact = 40;
|
|
||||||
bool isExternalExtensions = 41;
|
|
||||||
int64 msgFirstModifyTime = 42;
|
|
||||||
|
|
||||||
}
|
|
||||||
message OfflinePushInfo{
|
|
||||||
string title = 1;
|
|
||||||
string desc = 2;
|
|
||||||
string ex = 3;
|
|
||||||
string iOSPushSound = 4;
|
|
||||||
bool iOSBadgeCount = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
message TipsComm{
|
|
||||||
bytes detail = 1;
|
|
||||||
string defaultTips = 2;
|
|
||||||
string jsonDetail = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////group/////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
// OnGroupCreated()
|
|
||||||
message GroupCreatedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
repeated GroupMemberFullInfo memberList = 3;
|
|
||||||
int64 operationTime = 4;
|
|
||||||
GroupMemberFullInfo groupOwnerUser = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
// OnGroupInfoSet()
|
|
||||||
message GroupInfoSetTips{
|
|
||||||
GroupMemberFullInfo opUser = 1; //who do this
|
|
||||||
int64 muteTime = 2;
|
|
||||||
GroupInfo group = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// OnJoinGroupApplication()
|
|
||||||
message JoinGroupApplicationTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
PublicUserInfo applicant = 2;
|
|
||||||
string reqMsg = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// OnQuitGroup()
|
|
||||||
//Actively leave the group
|
|
||||||
message MemberQuitTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo quitUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// OnApplicationGroupAccepted()
|
|
||||||
message GroupApplicationAcceptedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
string handleMsg = 4;
|
|
||||||
int32 receiverAs = 5; // admin(==1) or applicant(==0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// OnApplicationGroupRejected()
|
|
||||||
message GroupApplicationRejectedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
string handleMsg = 4;
|
|
||||||
int32 receiverAs = 5; // admin(==1) or applicant(==0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// OnTransferGroupOwner()
|
|
||||||
message GroupOwnerTransferredTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
GroupMemberFullInfo newGroupOwner = 3;
|
|
||||||
int64 operationTime = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// OnMemberKicked()
|
|
||||||
message MemberKickedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
repeated GroupMemberFullInfo kickedUserList = 3;
|
|
||||||
int64 operationTime = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// OnMemberInvited()
|
|
||||||
message MemberInvitedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
repeated GroupMemberFullInfo invitedUserList = 3;
|
|
||||||
int64 operationTime = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Actively join the group
|
|
||||||
message MemberEnterTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo entrantUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupDismissedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupMemberMutedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
GroupMemberFullInfo mutedUser = 4;
|
|
||||||
uint32 mutedSeconds = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupMemberCancelMutedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
GroupMemberFullInfo mutedUser = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupMutedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupCancelMutedTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message GroupMemberInfoSetTips{
|
|
||||||
GroupInfo group = 1;
|
|
||||||
GroupMemberFullInfo opUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
GroupMemberFullInfo changedUser = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message OrganizationChangedTips{
|
|
||||||
UserInfo opUser = 2;
|
|
||||||
int64 operationTime = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////friend/////////////////////
|
|
||||||
//message FriendInfo{
|
|
||||||
// UserInfo OwnerUser = 1;
|
|
||||||
// string Remark = 2;
|
|
||||||
// uint64 CreateTime = 3;
|
|
||||||
// UserInfo FriendUser = 4;
|
|
||||||
//}
|
|
||||||
|
|
||||||
message FriendApplication{
|
|
||||||
int64 addTime = 1;
|
|
||||||
string addSource = 2;
|
|
||||||
string addWording = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message FromToUserID{
|
|
||||||
string fromUserID = 1;
|
|
||||||
string toUserID = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
//FromUserID apply to add ToUserID
|
|
||||||
message FriendApplicationTips{
|
|
||||||
FromToUserID fromToUserID = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//FromUserID accept or reject ToUserID
|
|
||||||
message FriendApplicationApprovedTips{
|
|
||||||
FromToUserID fromToUserID = 1;
|
|
||||||
string handleMsg = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
//FromUserID accept or reject ToUserID
|
|
||||||
message FriendApplicationRejectedTips{
|
|
||||||
FromToUserID fromToUserID = 1;
|
|
||||||
string handleMsg = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// FromUserID Added a friend ToUserID
|
|
||||||
message FriendAddedTips{
|
|
||||||
FriendInfo friend = 1;
|
|
||||||
int64 operationTime = 2;
|
|
||||||
PublicUserInfo opUser = 3; //who do this
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromUserID deleted a friend ToUserID
|
|
||||||
message FriendDeletedTips{
|
|
||||||
FromToUserID fromToUserID = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
message BlackAddedTips{
|
|
||||||
FromToUserID fromToUserID = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message BlackDeletedTips{
|
|
||||||
FromToUserID fromToUserID = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message FriendInfoChangedTips{
|
|
||||||
FromToUserID fromToUserID = 1;
|
|
||||||
}
|
|
||||||
//////////////////////user/////////////////////
|
|
||||||
message UserInfoUpdatedTips{
|
|
||||||
string userID = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////conversation/////////////////////
|
|
||||||
message ConversationUpdateTips{
|
|
||||||
string UserID = 1;
|
|
||||||
repeated string conversationIDList = 2;
|
|
||||||
int64 updateUnreadCountTime = 3;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
message ConversationSetPrivateTips{
|
|
||||||
string recvID = 1;
|
|
||||||
string sendID = 2;
|
|
||||||
bool isPrivate = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////message///////////////////////
|
|
||||||
message DeleteMessageTips{
|
|
||||||
string opUserID = 1;
|
|
||||||
string userID = 2;
|
|
||||||
repeated uint32 seqList = 3;
|
|
||||||
}
|
|
||||||
///cms
|
|
||||||
message RequestPagination {
|
|
||||||
int32 pageNumber = 1;
|
|
||||||
int32 showNumber = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ResponsePagination {
|
|
||||||
int32 CurrentPage = 5;
|
|
||||||
int32 ShowNumber = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////signal//////////////
|
|
||||||
message SignalReq {
|
|
||||||
oneof payload {
|
|
||||||
SignalInviteReq invite = 1;
|
|
||||||
SignalInviteInGroupReq inviteInGroup = 2;
|
|
||||||
SignalCancelReq cancel = 3;
|
|
||||||
SignalAcceptReq accept = 4;
|
|
||||||
SignalHungUpReq hungUp = 5;
|
|
||||||
SignalRejectReq reject = 6;
|
|
||||||
SignalGetRoomByGroupIDReq getRoomByGroupID = 7;
|
|
||||||
|
|
||||||
SignalOnRoomParticipantConnectedReq onRoomParticipantConnectedReq = 8;
|
|
||||||
SignalOnRoomParticipantDisconnectedReq onRoomParticipantDisconnectedReq = 9;
|
|
||||||
SignalGetTokenByRoomIDReq getTokenByRoomID = 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalResp {
|
|
||||||
oneof payload {
|
|
||||||
SignalInviteReply invite = 1;
|
|
||||||
SignalInviteInGroupReply inviteInGroup = 2;
|
|
||||||
SignalCancelReply cancel = 3;
|
|
||||||
SignalAcceptReply accept = 4;
|
|
||||||
SignalHungUpReply hungUp = 5;
|
|
||||||
SignalRejectReply reject = 6;
|
|
||||||
SignalGetRoomByGroupIDReply getRoomByGroupID = 7;
|
|
||||||
SignalGetTokenByRoomIDReply getTokenByRoomID = 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message InvitationInfo {
|
|
||||||
string inviterUserID = 1;
|
|
||||||
repeated string inviteeUserIDList = 2;
|
|
||||||
string customData = 3;
|
|
||||||
string groupID = 4;
|
|
||||||
string roomID = 5;
|
|
||||||
int32 timeout = 6;
|
|
||||||
string mediaType = 7;
|
|
||||||
int32 platformID = 8;
|
|
||||||
int32 sessionType = 9;
|
|
||||||
int32 initiateTime = 10;
|
|
||||||
repeated string busyLineUserIDList = 11;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ParticipantMetaData{
|
|
||||||
GroupInfo groupInfo = 1;
|
|
||||||
GroupMemberFullInfo groupMemberInfo = 2;
|
|
||||||
PublicUserInfo userInfo = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalInviteReq {
|
|
||||||
string opUserID = 1;
|
|
||||||
InvitationInfo invitation = 2;
|
|
||||||
OfflinePushInfo offlinePushInfo = 3;
|
|
||||||
ParticipantMetaData participant = 4;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalInviteReply {
|
|
||||||
string token = 1;
|
|
||||||
string roomID = 2;
|
|
||||||
string liveURL = 3;
|
|
||||||
repeated string busyLineUserIDList = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalInviteInGroupReq {
|
|
||||||
string opUserID = 1;
|
|
||||||
InvitationInfo invitation = 2;
|
|
||||||
OfflinePushInfo offlinePushInfo = 3;
|
|
||||||
ParticipantMetaData participant = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalInviteInGroupReply {
|
|
||||||
string token = 1;
|
|
||||||
string roomID = 2;
|
|
||||||
string liveURL = 3;
|
|
||||||
repeated string busyLineUserIDList = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalCancelReq {
|
|
||||||
string opUserID = 1;
|
|
||||||
InvitationInfo invitation = 2;
|
|
||||||
OfflinePushInfo offlinePushInfo = 3;
|
|
||||||
ParticipantMetaData participant = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalCancelReply {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalAcceptReq {
|
|
||||||
string opUserID = 1;
|
|
||||||
InvitationInfo invitation = 2;
|
|
||||||
OfflinePushInfo offlinePushInfo = 3;
|
|
||||||
ParticipantMetaData participant = 4;
|
|
||||||
int32 opUserPlatformID = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalAcceptReply {
|
|
||||||
string token = 1;
|
|
||||||
string roomID = 2;
|
|
||||||
string liveURL = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalHungUpReq {
|
|
||||||
string opUserID = 1;
|
|
||||||
InvitationInfo invitation = 2;
|
|
||||||
OfflinePushInfo offlinePushInfo = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalHungUpReply {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message SignalRejectReq {
|
|
||||||
string opUserID = 1;
|
|
||||||
InvitationInfo invitation = 2;
|
|
||||||
OfflinePushInfo offlinePushInfo = 3;
|
|
||||||
ParticipantMetaData participant = 4;
|
|
||||||
int32 opUserPlatformID = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalRejectReply {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalGetRoomByGroupIDReq {
|
|
||||||
string opUserID = 1;
|
|
||||||
string groupID = 2;
|
|
||||||
ParticipantMetaData participant = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalGetRoomByGroupIDReply {
|
|
||||||
InvitationInfo invitation = 1;
|
|
||||||
repeated ParticipantMetaData participant = 2;
|
|
||||||
string roomID = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalOnRoomParticipantConnectedReq {
|
|
||||||
InvitationInfo invitation = 1;
|
|
||||||
repeated ParticipantMetaData participant = 2;
|
|
||||||
string groupID = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalOnRoomParticipantDisconnectedReq {
|
|
||||||
InvitationInfo invitation = 1;
|
|
||||||
repeated ParticipantMetaData participant = 2;
|
|
||||||
string groupID = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalGetTokenByRoomIDReq {
|
|
||||||
string roomID = 1;
|
|
||||||
string opUserID = 2;
|
|
||||||
ParticipantMetaData participant = 3;
|
|
||||||
string operationID = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SignalGetTokenByRoomIDReply {
|
|
||||||
string token = 1;
|
|
||||||
string liveURL = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message DelMsgListReq{
|
|
||||||
string opUserID = 1;
|
|
||||||
string userID = 2;
|
|
||||||
repeated uint32 seqList = 3;
|
|
||||||
string operationID = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DelMsgListResp{
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SetAppBackgroundStatusReq {
|
|
||||||
string userID = 1;
|
|
||||||
bool isBackground = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message SetAppBackgroundStatusResp {
|
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ExtendMsgSet {
|
|
||||||
string sourceID = 1;
|
|
||||||
int32 sessionType = 2;
|
|
||||||
map <string, ExtendMsg>extendMsgs = 3;
|
|
||||||
int64 MaxMsgUpdateTime = 4;
|
|
||||||
int32 extendMsgNum = 5;
|
|
||||||
int64 createTime = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ExtendMsg {
|
|
||||||
map <string, KeyValue>reactionExtensionList = 1;
|
|
||||||
string clientMsgID = 2;
|
|
||||||
int64 msgFirstModifyTime = 3;
|
|
||||||
string attachedInfo = 4;
|
|
||||||
string ex = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message KeyValue {
|
|
||||||
string typeKey = 1;
|
|
||||||
string value = 2;
|
|
||||||
int64 latestUpdateTime = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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 utils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"sync"
|
|
||||||
"sync/atomic"
|
|
||||||
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"gorm.io/gorm/schema"
|
|
||||||
)
|
|
||||||
|
|
||||||
func FindAndInsert[V2 any, V3 schema.Tabler](v2db *gorm.DB, v3db *gorm.DB, fn func(V2) (V3, bool)) (string, error) {
|
|
||||||
const batchSize = 100
|
|
||||||
var t V3
|
|
||||||
name := t.TableName()
|
|
||||||
if err := v3db.AutoMigrate(&t); err != nil {
|
|
||||||
return name, fmt.Errorf("auto migrate v3 %s failed %w", name, err)
|
|
||||||
}
|
|
||||||
for i := 0; ; i++ {
|
|
||||||
var v2s []V2
|
|
||||||
if err := v2db.Offset(i * batchSize).Limit(batchSize).Find(&v2s).Error; err != nil {
|
|
||||||
return name, fmt.Errorf("find v2 %s failed %w", name, err)
|
|
||||||
}
|
|
||||||
if len(v2s) == 0 {
|
|
||||||
return name, nil
|
|
||||||
}
|
|
||||||
v3s := make([]V3, 0, len(v2s))
|
|
||||||
for _, v := range v2s {
|
|
||||||
res, ok := fn(v)
|
|
||||||
if ok {
|
|
||||||
v3s = append(v3s, res)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(v3s) == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err := v3db.Create(&v3s).Error; err != nil {
|
|
||||||
return name, fmt.Errorf("insert v3 %s failed %w", name, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type TakeList []Task
|
|
||||||
|
|
||||||
func (l *TakeList) Append(fn ...Task) {
|
|
||||||
*l = append(*l, fn...)
|
|
||||||
}
|
|
||||||
|
|
||||||
type Task func() (string, error)
|
|
||||||
|
|
||||||
func RunTask(concurrency int, tasks TakeList) []string {
|
|
||||||
if len(tasks) == 0 {
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
if concurrency < 1 {
|
|
||||||
concurrency = 1
|
|
||||||
}
|
|
||||||
if concurrency > len(tasks) {
|
|
||||||
concurrency = len(tasks)
|
|
||||||
}
|
|
||||||
|
|
||||||
taskCh := make(chan func() (string, error), 4)
|
|
||||||
go func() {
|
|
||||||
defer close(taskCh)
|
|
||||||
for i := range tasks {
|
|
||||||
taskCh <- tasks[i]
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
var lock sync.Mutex
|
|
||||||
var failedTables []string
|
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
|
||||||
wg.Add(concurrency)
|
|
||||||
var count int64
|
|
||||||
|
|
||||||
for i := 0; i < concurrency; i++ {
|
|
||||||
go func() {
|
|
||||||
defer wg.Done()
|
|
||||||
for task := range taskCh {
|
|
||||||
name, err := task()
|
|
||||||
index := atomic.AddInt64(&count, 1)
|
|
||||||
if err == nil {
|
|
||||||
log.Printf("[%d/%d] %s success\n", index, len(tasks), name)
|
|
||||||
} else {
|
|
||||||
lock.Lock()
|
|
||||||
failedTables = append(failedTables, name)
|
|
||||||
lock.Unlock()
|
|
||||||
log.Printf("[%d/%d] %s failed %s\n", index, len(tasks), name, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
wg.Wait()
|
|
||||||
if len(failedTables) == 0 {
|
|
||||||
log.Println("all tables success")
|
|
||||||
} else {
|
|
||||||
log.Printf("failed tables %d: %+v\n", len(failedTables), failedTables)
|
|
||||||
}
|
|
||||||
|
|
||||||
return failedTables
|
|
||||||
}
|
|
@ -1,28 +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 utils
|
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
func InitTime(ts ...*time.Time) {
|
|
||||||
for i := range ts {
|
|
||||||
if ts[i] == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if ts[i].IsZero() || ts[i].UnixMicro() < 0 {
|
|
||||||
*ts[i] = time.UnixMicro(0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in new issue