mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-26 19:46:57 +08:00
db model update
This commit is contained in:
parent
0cea353558
commit
34a67e07b6
@ -21,7 +21,7 @@ func key(dbAddress, dbName string) string {
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
//mysql init
|
//mysql init
|
||||||
|
initMysqlDB()
|
||||||
// mongo init
|
// mongo init
|
||||||
mgoDailInfo := &mgo.DialInfo{
|
mgoDailInfo := &mgo.DialInfo{
|
||||||
Addrs: config.Config.Mongo.DBAddress,
|
Addrs: config.Config.Mongo.DBAddress,
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const cChat = "chat"
|
const cChat = "chat"
|
||||||
|
const cGroup = "group"
|
||||||
|
|
||||||
type MsgInfo struct {
|
type MsgInfo struct {
|
||||||
SendTime int64
|
SendTime int64
|
||||||
@ -22,7 +23,13 @@ type UserChat struct {
|
|||||||
Msg []MsgInfo
|
Msg []MsgInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GroupMember struct {
|
||||||
|
GroupID string
|
||||||
|
UIDList []string
|
||||||
|
}
|
||||||
|
|
||||||
func (d *DataBases) GetUserChat(uid string, seqBegin, seqEnd int64) (SingleMsg []*pbMsg.MsgFormat, GroupMsg []*pbMsg.MsgFormat, MaxSeq int64, MinSeq int64, err error) {
|
func (d *DataBases) GetUserChat(uid string, seqBegin, seqEnd int64) (SingleMsg []*pbMsg.MsgFormat, GroupMsg []*pbMsg.MsgFormat, MaxSeq int64, MinSeq int64, err error) {
|
||||||
|
count := 0
|
||||||
session := d.mgoSession.Clone()
|
session := d.mgoSession.Clone()
|
||||||
if session == nil {
|
if session == nil {
|
||||||
return nil, nil, MaxSeq, MinSeq, errors.New("session == nil")
|
return nil, nil, MaxSeq, MinSeq, errors.New("session == nil")
|
||||||
@ -57,7 +64,7 @@ func (d *DataBases) GetUserChat(uid string, seqBegin, seqEnd int64) (SingleMsg [
|
|||||||
if pChat.RecvSeq > MaxSeq {
|
if pChat.RecvSeq > MaxSeq {
|
||||||
MaxSeq = pChat.RecvSeq
|
MaxSeq = pChat.RecvSeq
|
||||||
}
|
}
|
||||||
if i == 0 {
|
if count == 0 {
|
||||||
MinSeq = pChat.RecvSeq
|
MinSeq = pChat.RecvSeq
|
||||||
}
|
}
|
||||||
if pChat.RecvSeq < MinSeq {
|
if pChat.RecvSeq < MinSeq {
|
||||||
@ -68,6 +75,7 @@ func (d *DataBases) GetUserChat(uid string, seqBegin, seqEnd int64) (SingleMsg [
|
|||||||
} else {
|
} else {
|
||||||
GroupMsg = append(GroupMsg, temp)
|
GroupMsg = append(GroupMsg, temp)
|
||||||
}
|
}
|
||||||
|
count++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,3 +163,71 @@ func (d *DataBases) MgoSkipUID(count int) (string, error) {
|
|||||||
c.Find(nil).Skip(count).Limit(1).One(&sChat)
|
c.Find(nil).Skip(count).Limit(1).One(&sChat)
|
||||||
return sChat.UID, nil
|
return sChat.UID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *DataBases) GetGroupMember(groupID string) []string {
|
||||||
|
groupInfo := GroupMember{}
|
||||||
|
groupInfo.GroupID = groupID
|
||||||
|
groupInfo.UIDList = make([]string, 0)
|
||||||
|
|
||||||
|
session := d.mgoSession.Clone()
|
||||||
|
if session == nil {
|
||||||
|
return groupInfo.UIDList
|
||||||
|
}
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
|
c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup)
|
||||||
|
|
||||||
|
if err := c.Find(bson.M{"groupid": groupInfo.GroupID}).One(&groupInfo); err != nil {
|
||||||
|
return groupInfo.UIDList
|
||||||
|
}
|
||||||
|
|
||||||
|
return groupInfo.UIDList
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DataBases) AddGroupMember(groupID, uid string) error {
|
||||||
|
session := d.mgoSession.Clone()
|
||||||
|
if session == nil {
|
||||||
|
return errors.New("session == nil")
|
||||||
|
}
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
|
c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup)
|
||||||
|
|
||||||
|
n, err := c.Find(bson.M{"groupid": groupID}).Count()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if n == 0 {
|
||||||
|
groupInfo := GroupMember{}
|
||||||
|
groupInfo.GroupID = groupID
|
||||||
|
groupInfo.UIDList = append(groupInfo.UIDList, uid)
|
||||||
|
err = c.Insert(&groupInfo)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = c.Update(bson.M{"groupid": groupID}, bson.M{"$addToSet": bson.M{"uidlist": uid}})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DataBases) DelGroupMember(groupID, uid string) error {
|
||||||
|
session := d.mgoSession.Clone()
|
||||||
|
if session == nil {
|
||||||
|
return errors.New("session == nil")
|
||||||
|
}
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
|
c := session.DB(config.Config.Mongo.DBDatabase).C(cGroup)
|
||||||
|
|
||||||
|
if err := c.Update(bson.M{"groupid": groupID}, bson.M{"$pull": bson.M{"uidlist": uid}}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -14,6 +14,85 @@ type mysqlDB struct {
|
|||||||
dbMap map[string]*gorm.DB
|
dbMap map[string]*gorm.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initMysqlDB() {
|
||||||
|
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
||||||
|
config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], "mysql")
|
||||||
|
db, err := gorm.Open("mysql", dsn)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check the database and table during initialization
|
||||||
|
sql := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s ;", config.Config.Mysql.DBDatabaseName)
|
||||||
|
err = db.Exec(sql).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
db.Close()
|
||||||
|
|
||||||
|
dsn = fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
||||||
|
config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], config.Config.Mysql.DBDatabaseName)
|
||||||
|
db, err = gorm.Open("mysql", dsn)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable := "CREATE TABLE IF NOT EXISTS `user` (\n `uid` varchar(64) NOT NULL,\n `name` varchar(64) DEFAULT NULL,\n `icon` varchar(1024) DEFAULT NULL,\n `gender` int(11) unsigned zerofill DEFAULT NULL,\n `mobile` varchar(32) DEFAULT NULL,\n `birth` varchar(16) DEFAULT NULL,\n `email` varchar(64) DEFAULT NULL,\n `ex` varchar(1024) DEFAULT NULL,\n `create_time` datetime DEFAULT NULL,\n PRIMARY KEY (`uid`),\n UNIQUE KEY `uk_uid` (`uid`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable = "CREATE TABLE IF NOT EXISTS `friend` (\n `owner_id` varchar(255) NOT NULL,\n `friend_id` varchar(255) NOT NULL,\n `comment` varchar(255) DEFAULT NULL,\n `friend_flag` int(11) NOT NULL,\n `create_time` datetime NOT NULL,\n PRIMARY KEY (`owner_id`,`friend_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable = "CREATE TABLE IF NOT EXISTS `friend_request` (\n `req_id` varchar(255) NOT NULL,\n `user_id` varchar(255) NOT NULL,\n `flag` int(11) NOT NULL DEFAULT '0',\n `req_message` varchar(255) DEFAULT NULL,\n `create_time` datetime NOT NULL,\n PRIMARY KEY (`user_id`,`req_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable = "CREATE TABLE IF NOT EXISTS `black_list` (\n `uid` varchar(32) NOT NULL COMMENT 'uid',\n `begin_disable_time` datetime DEFAULT NULL,\n `end_disable_time` datetime DEFAULT NULL,\n `ex` varchar(1024) DEFAULT NULL,\n PRIMARY KEY (`uid`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable = "CREATE TABLE IF NOT EXISTS `user_black_list` (\n `owner_id` varchar(255) NOT NULL,\n `block_id` varchar(255) NOT NULL,\n `create_time` datetime NOT NULL,\n PRIMARY KEY (`owner_id`,`block_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable = "CREATE TABLE IF NOT EXISTS `group` (\n `group_id` varchar(255) NOT NULL,\n `name` varchar(255) DEFAULT NULL,\n `introduction` varchar(255) DEFAULT NULL,\n `notification` varchar(255) DEFAULT NULL,\n `face_url` varchar(255) DEFAULT NULL,\n `create_time` datetime DEFAULT NULL,\n `ex` varchar(255) DEFAULT NULL,\n PRIMARY KEY (`group_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable = "CREATE TABLE IF NOT EXISTS `group_member` (\n `group_id` varchar(255) NOT NULL,\n `uid` varchar(255) NOT NULL,\n `nickname` varchar(255) DEFAULT NULL,\n `user_group_face_url` varchar(255) DEFAULT NULL,\n `administrator_level` int(11) NOT NULL,\n `join_time` datetime NOT NULL,\n PRIMARY KEY (`group_id`,`uid`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable = "CREATE TABLE IF NOT EXISTS `group_request` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `group_id` varchar(255) NOT NULL,\n `from_user_id` varchar(255) NOT NULL,\n `to_user_id` varchar(255) NOT NULL,\n `flag` int(10) NOT NULL DEFAULT '0',\n `req_msg` varchar(255) DEFAULT '',\n `handled_msg` varchar(255) DEFAULT '',\n `create_time` datetime NOT NULL,\n `from_user_nickname` varchar(255) DEFAULT '',\n `to_user_nickname` varchar(255) DEFAULT NULL,\n `from_user_face_url` varchar(255) DEFAULT '',\n `to_user_face_url` varchar(255) DEFAULT '',\n `handled_user` varchar(255) DEFAULT '',\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlTable = "CREATE TABLE IF NOT EXISTS `chat_log` (\n `msg_id` varchar(128) NOT NULL,\n `send_id` varchar(255) NOT NULL,\n `session_type` int(11) NOT NULL,\n `recv_id` varchar(255) NOT NULL,\n `content_type` int(11) NOT NULL,\n `msg_from` int(11) NOT NULL,\n `content` varchar(1000) NOT NULL,\n `remark` varchar(100) DEFAULT NULL,\n `sender_platform_id` int(11) NOT NULL,\n `send_time` datetime NOT NULL,\n PRIMARY KEY (`msg_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
|
||||||
|
err = db.Exec(sqlTable).Error
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (m *mysqlDB) DefaultGormDB() (*gorm.DB, error) {
|
func (m *mysqlDB) DefaultGormDB() (*gorm.DB, error) {
|
||||||
return m.GormDB(config.Config.Mysql.DBAddress[0], config.Config.Mysql.DBDatabaseName)
|
return m.GormDB(config.Config.Mysql.DBAddress[0], config.Config.Mysql.DBDatabaseName)
|
||||||
}
|
}
|
||||||
|
@ -139,6 +139,23 @@ func GetOwnerManagerByGroupId(groupId string) ([]GroupMember, error) {
|
|||||||
return groupMemberList, nil
|
return groupMemberList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsExistGroupMember(groupId, uid string) bool {
|
||||||
|
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
var number int32
|
||||||
|
err = dbConn.Raw("select count(*) from `group_member` where group_id = ? and uid = ?", groupId, uid).Count(&number).Error
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if number != 1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func RemoveGroupMember(groupId string, memberId string) error {
|
func RemoveGroupMember(groupId string, memberId string) error {
|
||||||
return DeleteGroupMemberByGroupIdAndUserId(groupId, memberId)
|
return DeleteGroupMemberByGroupIdAndUserId(groupId, memberId)
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,8 @@ func GetGroupApplicationList(uid string) (*group.GetGroupApplicationListResp, er
|
|||||||
return &group.GetGroupApplicationListResp{}, nil
|
return &group.GetGroupApplicationListResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
sql := "select group_id, from_user_id, to_user_id, flag, req_msg, handled_msg, create_time, from_user_nickname, from_user_face_url, handled_user from `group_request` where group_id in ( "
|
sql := "select id, group_id, from_user_id, to_user_id, flag, req_msg, handled_msg, create_time, " +
|
||||||
|
"from_user_nickname, to_user_nickname, from_user_face_url, to_user_face_url, handled_user from `group_request` where group_id in ( "
|
||||||
for i := 0; i < len(gIDs); i++ {
|
for i := 0; i < len(gIDs); i++ {
|
||||||
if i == len(gIDs)-1 {
|
if i == len(gIDs)-1 {
|
||||||
sql = sql + "\"" + gIDs[i] + "\"" + " )"
|
sql = sql + "\"" + gIDs[i] + "\"" + " )"
|
||||||
@ -113,8 +114,9 @@ func GetGroupApplicationList(uid string) (*group.GetGroupApplicationListResp, er
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
rows.Scan(&groupRequest.GroupID, &groupRequest.FromUserID, &groupRequest.ToUserID, &groupRequest.Flag, &groupRequest.ReqMsg,
|
rows.Scan(&groupRequest.ID, &groupRequest.GroupID, &groupRequest.FromUserID, &groupRequest.ToUserID, &groupRequest.Flag, &groupRequest.ReqMsg,
|
||||||
&groupRequest.HandledMsg, &groupRequest.CreateTime, &groupRequest.FromUserNickname, &groupRequest.FromUserFaceUrl, &groupRequest.HandledUser)
|
&groupRequest.HandledMsg, &groupRequest.CreateTime, &groupRequest.FromUserNickname, &groupRequest.ToUserNickname,
|
||||||
|
&groupRequest.FromUserFaceUrl, &groupRequest.ToUserFaceUrl, &groupRequest.HandledUser)
|
||||||
groupRequests = append(groupRequests, groupRequest)
|
groupRequests = append(groupRequests, groupRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,14 +125,19 @@ func GetGroupApplicationList(uid string) (*group.GetGroupApplicationListResp, er
|
|||||||
reply.Data.Count = int32(len(groupRequests))
|
reply.Data.Count = int32(len(groupRequests))
|
||||||
for i := 0; i < int(reply.Data.Count); i++ {
|
for i := 0; i < int(reply.Data.Count); i++ {
|
||||||
addUser := group.GetGroupApplicationList_Data_User{
|
addUser := group.GetGroupApplicationList_Data_User{
|
||||||
|
ID: groupRequests[i].ID,
|
||||||
GroupID: groupRequests[i].GroupID,
|
GroupID: groupRequests[i].GroupID,
|
||||||
FromUserID: groupRequests[i].FromUserID,
|
FromUserID: groupRequests[i].FromUserID,
|
||||||
FromUserNickName: groupRequests[i].FromUserNickname,
|
FromUserNickname: groupRequests[i].FromUserNickname,
|
||||||
FromUserFaceUrl: groupRequests[i].FromUserFaceUrl,
|
FromUserFaceUrl: groupRequests[i].FromUserFaceUrl,
|
||||||
ToUserID: groupRequests[i].ToUserID,
|
ToUserID: groupRequests[i].ToUserID,
|
||||||
AddTime: groupRequests[i].CreateTime.Unix(),
|
AddTime: groupRequests[i].CreateTime.Unix(),
|
||||||
RequestMsg: groupRequests[i].ReqMsg,
|
RequestMsg: groupRequests[i].ReqMsg,
|
||||||
HandledMsg: groupRequests[i].HandledMsg,
|
HandledMsg: groupRequests[i].HandledMsg,
|
||||||
|
Flag: groupRequests[i].Flag,
|
||||||
|
ToUserNickname: groupRequests[i].ToUserNickname,
|
||||||
|
ToUserFaceUrl: groupRequests[i].ToUserFaceUrl,
|
||||||
|
HandledUser: groupRequests[i].HandledUser,
|
||||||
Type: 0,
|
Type: 0,
|
||||||
HandleStatus: 0,
|
HandleStatus: 0,
|
||||||
HandleResult: 0,
|
HandleResult: 0,
|
||||||
|
@ -11,14 +11,14 @@ func InsertIntoGroupRequest(groupId, fromUserId, toUserId, reqMsg, fromUserNickN
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
toInsertInfo := GroupRequest{GroupID: groupId, FromUserID: fromUserId, ToUserID: toUserId, ReqMsg: reqMsg, FromUserNickname: fromUserNickName, FromUserFaceUrl: fromUserFaceUrl, CreateTime: time.Now()}
|
toInsertInfo := GroupRequest{GroupID: groupId, FromUserID: fromUserId, ToUserID: toUserId, ReqMsg: reqMsg, FromUserNickname: fromUserNickName, FromUserFaceUrl: fromUserFaceUrl, CreateTime: time.Now()}
|
||||||
err = dbConn.Table("group_request").Create(toInsertInfo).Error
|
err = dbConn.Table("group_request").Create(&toInsertInfo).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func FindGroupRequestUserInfoByUidAndGroupID(groupId, uid string) (*GroupRequest, error) {
|
func FindGroupRequestUserInfoByGroupIDAndUid(groupId, uid string) (*GroupRequest, error) {
|
||||||
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
|
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -54,6 +54,7 @@ type GroupMember struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type GroupRequest struct {
|
type GroupRequest struct {
|
||||||
|
ID string `gorm:"column:id"`
|
||||||
GroupID string `gorm:"column:group_id"`
|
GroupID string `gorm:"column:group_id"`
|
||||||
FromUserID string `gorm:"column:from_user_id"`
|
FromUserID string `gorm:"column:from_user_id"`
|
||||||
ToUserID string `gorm:"column:to_user_id"`
|
ToUserID string `gorm:"column:to_user_id"`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user