mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-05-15 08:29:08 +08:00
group db
This commit is contained in:
parent
77edbe1edd
commit
3423b224fd
@ -1,6 +1,7 @@
|
|||||||
package controller
|
package controller
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db/cache"
|
"Open_IM/pkg/common/db/cache"
|
||||||
"Open_IM/pkg/common/db/relation"
|
"Open_IM/pkg/common/db/relation"
|
||||||
relation2 "Open_IM/pkg/common/db/table/relation"
|
relation2 "Open_IM/pkg/common/db/table/relation"
|
||||||
@ -9,6 +10,8 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"github.com/dtm-labs/rockscache"
|
"github.com/dtm-labs/rockscache"
|
||||||
_ "github.com/dtm-labs/rockscache"
|
_ "github.com/dtm-labs/rockscache"
|
||||||
|
"github.com/go-redis/redis/v8"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -66,7 +69,7 @@ type GroupDataBaseInterface interface {
|
|||||||
TakeGroupOwner(ctx context.Context, groupID string) (*relation2.GroupMemberModel, error)
|
TakeGroupOwner(ctx context.Context, groupID string) (*relation2.GroupMemberModel, error)
|
||||||
FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relation2.GroupMemberModel, error)
|
FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relation2.GroupMemberModel, error)
|
||||||
PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (int32, []*relation2.GroupMemberModel, error)
|
PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (int32, []*relation2.GroupMemberModel, error)
|
||||||
SearchGroupMember(ctx context.Context, name string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (int32, []*relation2.GroupMemberModel, error)
|
SearchGroupMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (int32, []*relation2.GroupMemberModel, error)
|
||||||
HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relation2.GroupMemberModel) error
|
HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relation2.GroupMemberModel) error
|
||||||
DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error
|
DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error
|
||||||
MapGroupHash(ctx context.Context, groupIDs []string) (map[string]uint64, error)
|
MapGroupHash(ctx context.Context, groupIDs []string) (map[string]uint64, error)
|
||||||
@ -109,26 +112,6 @@ func newGroupDatabase(db *gorm.DB, rdb redis.UniversalClient, mgoClient *mongo.C
|
|||||||
return database
|
return database
|
||||||
}
|
}
|
||||||
|
|
||||||
//func (g *GroupDataBase) FindGroupsByID(ctx context.Context, groupIDs []string) (groups []*relation2.GroupModel, err error) {
|
|
||||||
// return g.cache.GetGroupsInfo(ctx, groupIDs)
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*relation2.GroupModel, groupMembers []*relation2.GroupMemberModel) error {
|
|
||||||
// return g.db.Transaction(func(tx *gorm.DB) error {
|
|
||||||
// if len(groups) > 0 {
|
|
||||||
// if err := g.groupDB.Create(ctx, groups, tx); err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if len(groupMembers) > 0 {
|
|
||||||
// if err := g.groupMemberDB.Create(ctx, groupMembers, tx); err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return nil
|
|
||||||
// })
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//func (g *GroupDataBase) DeleteGroupByIDs(ctx context.Context, groupIDs []string) error {
|
//func (g *GroupDataBase) DeleteGroupByIDs(ctx context.Context, groupIDs []string) error {
|
||||||
// return g.groupDB.DB.Transaction(func(tx *gorm.DB) error {
|
// return g.groupDB.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
// if err := g.groupDB.Delete(ctx, groupIDs, tx); err != nil {
|
// if err := g.groupDB.Delete(ctx, groupIDs, tx); err != nil {
|
||||||
@ -308,53 +291,48 @@ func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*relation2.Gro
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) TakeGroup(ctx context.Context, groupID string) (group *relation2.GroupModel, err error) {
|
func (g *GroupDataBase) TakeGroup(ctx context.Context, groupID string) (group *relation2.GroupModel, err error) {
|
||||||
//TODO implement me
|
return g.groupDB.Take(ctx, groupID)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) FindGroup(ctx context.Context, groupIDs []string) (groups []*relation2.GroupModel, err error) {
|
func (g *GroupDataBase) FindGroup(ctx context.Context, groupIDs []string) (groups []*relation2.GroupModel, err error) {
|
||||||
//TODO implement me
|
return g.groupDB.Find(ctx, groupIDs)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) SearchGroup(ctx context.Context, keyword string, pageNumber, showNumber int32) (int32, []*relation2.GroupModel, error) {
|
func (g *GroupDataBase) SearchGroup(ctx context.Context, keyword string, pageNumber, showNumber int32) (int32, []*relation2.GroupModel, error) {
|
||||||
//TODO implement me
|
return g.groupDB.Search(ctx, keyword, pageNumber, showNumber)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) UpdateGroup(ctx context.Context, groupID string, data map[string]any) error {
|
func (g *GroupDataBase) UpdateGroup(ctx context.Context, groupID string, data map[string]any) error {
|
||||||
//TODO implement me
|
return g.groupDB.UpdateMap(ctx, groupID, data)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) DismissGroup(ctx context.Context, groupID string) error {
|
func (g *GroupDataBase) DismissGroup(ctx context.Context, groupID string) error {
|
||||||
//TODO implement me
|
return g.db.Transaction(func(tx *gorm.DB) error {
|
||||||
panic("implement me")
|
if err := g.groupDB.UpdateStatus(ctx, groupID, constant.GroupStatusDismissed, tx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return g.groupMemberDB.DeleteGroup(ctx, []string{groupID}, tx)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relation2.GroupMemberModel, err error) {
|
func (g *GroupDataBase) TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relation2.GroupMemberModel, err error) {
|
||||||
//TODO implement me
|
return g.groupMemberDB.Take(ctx, groupID, userID)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) TakeGroupOwner(ctx context.Context, groupID string) (*relation2.GroupMemberModel, error) {
|
func (g *GroupDataBase) TakeGroupOwner(ctx context.Context, groupID string) (*relation2.GroupMemberModel, error) {
|
||||||
//TODO implement me
|
return g.groupMemberDB.TakeOwner(ctx, groupID)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relation2.GroupMemberModel, error) {
|
func (g *GroupDataBase) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relation2.GroupMemberModel, error) {
|
||||||
//TODO implement me
|
return g.groupMemberDB.Find(ctx, groupIDs, userIDs, roleLevels)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (int32, []*relation2.GroupMemberModel, error) {
|
func (g *GroupDataBase) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (int32, []*relation2.GroupMemberModel, error) {
|
||||||
//TODO implement me
|
return g.groupMemberDB.SearchMember(ctx, "", groupIDs, userIDs, roleLevels, pageNumber, showNumber)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) SearchGroupMember(ctx context.Context, name string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (int32, []*relation2.GroupMemberModel, error) {
|
func (g *GroupDataBase) SearchGroupMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (int32, []*relation2.GroupMemberModel, error) {
|
||||||
//TODO implement me
|
return g.groupMemberDB.SearchMember(ctx, keyword, groupIDs, userIDs, roleLevels, pageNumber, showNumber)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relation2.GroupMemberModel) error {
|
func (g *GroupDataBase) HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relation2.GroupMemberModel) error {
|
||||||
|
@ -50,17 +50,34 @@ func (g *GroupMemberGorm) Update(ctx context.Context, groupMembers []*relation.G
|
|||||||
return utils.Wrap(getDBConn(g.DB, tx).Updates(&groupMembers).Error, "")
|
return utils.Wrap(getDBConn(g.DB, tx).Updates(&groupMembers).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupMemberGorm) Find(ctx context.Context, groupMembers []*relation.GroupMemberModel, tx ...*gorm.DB) (groupList []*relation.GroupMemberModel, err error) {
|
func (g *GroupMemberGorm) Find(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, tx ...*gorm.DB) (groupList []*relation.GroupMemberModel, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMembers", groupMembers, "groupList", groupList)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs, "userIDs", userIDs, "groupList", groupList)
|
||||||
}()
|
}()
|
||||||
var where [][]interface{}
|
db := getDBConn(g.DB, tx)
|
||||||
for _, groupMember := range groupMembers {
|
if len(groupIDs) > 0 {
|
||||||
where = append(where, []interface{}{groupMember.GroupID, groupMember.UserID})
|
db = db.Where("group_id in (?)", groupIDs)
|
||||||
}
|
}
|
||||||
return groupList, utils.Wrap(getDBConn(g.DB, tx).Where("(group_id, user_id) in ?", where).Find(&groupList).Error, "")
|
if len(userIDs) > 0 {
|
||||||
|
db = db.Where("user_id in (?)", userIDs)
|
||||||
|
}
|
||||||
|
if len(roleLevels) > 0 {
|
||||||
|
db = db.Where("role_level in (?)", roleLevels)
|
||||||
|
}
|
||||||
|
return groupList, utils.Wrap(db.Find(&groupList).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//func (g *GroupMemberGorm) Find(ctx context.Context, groupMembers []*relation.GroupMemberModel, tx ...*gorm.DB) (groupList []*relation.GroupMemberModel, err error) {
|
||||||
|
// defer func() {
|
||||||
|
// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupMembers", groupMembers, "groupList", groupList)
|
||||||
|
// }()
|
||||||
|
// var where [][]interface{}
|
||||||
|
// for _, groupMember := range groupMembers {
|
||||||
|
// where = append(where, []interface{}{groupMember.GroupID, groupMember.UserID})
|
||||||
|
// }
|
||||||
|
// return groupList, utils.Wrap(getDBConn(g.DB, tx).Where("(group_id, user_id) in ?", where).Find(&groupList).Error, "")
|
||||||
|
//}
|
||||||
|
|
||||||
func (g *GroupMemberGorm) FindGroupUser(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, tx ...*gorm.DB) (groupList []*relation.GroupMemberModel, err error) {
|
func (g *GroupMemberGorm) FindGroupUser(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, tx ...*gorm.DB) (groupList []*relation.GroupMemberModel, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs, "userIDs", userIDs, "groupList", groupList)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs, "userIDs", userIDs, "groupList", groupList)
|
||||||
@ -94,16 +111,13 @@ func (g *GroupMemberGorm) TakeOwner(ctx context.Context, groupID string, tx ...*
|
|||||||
return groupMember, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ? and role_level = ?", groupID, constant.GroupOwner).Take(groupMember).Error, "")
|
return groupMember, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ? and role_level = ?", groupID, constant.GroupOwner).Take(groupMember).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupMemberGorm) PageByUser(ctx context.Context, userID string, pageNumber, showNumber int32, tx ...*gorm.DB) (total int32, groupList []*relation.GroupMemberModel, err error) {
|
func (g *GroupMemberGorm) SearchMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32, tx ...*gorm.DB) (total int32, groupList []*relation.GroupMemberModel, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "total", total, "groupList", groupList)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "keyword", keyword, "groupIDs", groupIDs, "userIDs", userIDs, "roleLevels", roleLevels, "pageNumber", pageNumber, "showNumber", showNumber, "total", total, "groupList", groupList)
|
||||||
}()
|
}()
|
||||||
return gormPage[relation.GroupMemberModel](getDBConn(g.DB, tx).Where("user_id = ?", userID), pageNumber, showNumber)
|
db := getDBConn(g.DB, tx)
|
||||||
}
|
gormIn(&db, "group_id", groupIDs)
|
||||||
|
gormIn(&db, "user_id", userIDs)
|
||||||
func (g *GroupMemberGorm) SearchMember(ctx context.Context, groupID string, name string, pageNumber, showNumber int32, tx ...*gorm.DB) (total int32, groupList []*relation.GroupMemberModel, err error) {
|
gormIn(&db, "role_level", roleLevels)
|
||||||
defer func() {
|
return gormSearch[relation.GroupMemberModel](db, []string{"nickname"}, keyword, pageNumber, showNumber)
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "name", name, "pageNumber", pageNumber, "showNumber", showNumber, "total", total, "groupList", groupList)
|
|
||||||
}()
|
|
||||||
return gormSearch[relation.GroupMemberModel](getDBConn(g.DB, tx).Where("group_id = ?", groupID), "nickname", name, pageNumber, showNumber)
|
|
||||||
}
|
}
|
||||||
|
@ -66,9 +66,9 @@ func (g *GroupGorm) Take(ctx context.Context, groupID string, tx ...*gorm.DB) (g
|
|||||||
return group, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ?", groupID).Take(group).Error, "")
|
return group, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ?", groupID).Take(group).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupGorm) Search(ctx context.Context, name string, pageNumber, showNumber int32, tx ...*gorm.DB) (total int32, groups []*relation.GroupModel, err error) {
|
func (g *GroupGorm) Search(ctx context.Context, keyword string, pageNumber, showNumber int32, tx ...*gorm.DB) (total int32, groups []*relation.GroupModel, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "name", name, "pageNumber", pageNumber, "showNumber", showNumber, "total", total, "groups", groups)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "keyword", keyword, "pageNumber", pageNumber, "showNumber", showNumber, "total", total, "groups", groups)
|
||||||
}()
|
}()
|
||||||
return gormSearch[relation.GroupModel](getDBConn(g.DB, tx), "name", name, pageNumber, showNumber)
|
return gormSearch[relation.GroupModel](getDBConn(g.DB, tx), []string{"name"}, keyword, pageNumber, showNumber)
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,25 @@ func gormPage[E any](db *gorm.DB, pageNumber, showNumber int32) (int32, []*E, er
|
|||||||
return int32(count), es, nil
|
return int32(count), es, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func gormSearch[E any](db *gorm.DB, field string, value string, pageNumber, showNumber int32) (int32, []*E, error) {
|
func gormSearch[E any](db *gorm.DB, fields []string, value string, pageNumber, showNumber int32) (int32, []*E, error) {
|
||||||
if field != "" && value != "" {
|
if len(fields) > 0 && value != "" {
|
||||||
db = db.Where(field+" like ?", "%"+value+"%")
|
value = "%" + value + "%"
|
||||||
|
if len(fields) == 1 {
|
||||||
|
db = db.Where(fields[0]+" like ?", value)
|
||||||
|
} else {
|
||||||
|
t := db
|
||||||
|
for _, field := range fields {
|
||||||
|
t = t.Or(field+" like ?", value)
|
||||||
|
}
|
||||||
|
db = db.Where(t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return gormPage[E](db, pageNumber, showNumber)
|
return gormPage[E](db, pageNumber, showNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func gormIn[E any](db **gorm.DB, field string, es []E) {
|
||||||
|
if len(es) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
*db = (*db).Where(field+" in (?)", es)
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user