Files
open-im-server/pkg/common/db/controller/user.go
T

107 lines
3.8 KiB
Go
Raw Normal View History

2023-01-28 13:19:36 +08:00
package controller
2023-01-17 11:51:19 +08:00
import (
"context"
2023-03-16 10:46:06 +08:00
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
"github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
"github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
2023-01-17 11:51:19 +08:00
)
2023-02-22 12:17:59 +08:00
type UserDatabase interface {
2023-02-07 20:28:34 +08:00
//获取指定用户的信息 如有userID未找到 也返回错误
2023-02-21 12:59:44 +08:00
FindWithError(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error)
2023-02-09 10:58:30 +08:00
//获取指定用户的信息 如有userID未找到 不返回错误
2023-02-21 12:59:44 +08:00
Find(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error)
2023-02-07 20:28:34 +08:00
//插入多条 外部保证userID 不重复 且在db中不存在
2023-02-21 12:59:44 +08:00
Create(ctx context.Context, users []*relation.UserModel) (err error)
2023-02-07 20:28:34 +08:00
//更新(非零值) 外部保证userID存在
2023-03-16 12:07:21 +08:00
Update(ctx context.Context, user *relation.UserModel) (err error)
2023-02-07 20:28:34 +08:00
//更新(零值) 外部保证userID存在
2023-01-29 16:30:33 +08:00
UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error)
2023-02-09 10:58:30 +08:00
//如果没找到,不返回错误
2023-02-21 12:59:44 +08:00
Page(ctx context.Context, pageNumber, showNumber int32) (users []*relation.UserModel, count int64, err error)
2023-02-09 10:58:30 +08:00
//只要有一个存在就为true
2023-01-31 20:33:33 +08:00
IsExist(ctx context.Context, userIDs []string) (exist bool, err error)
2023-02-15 15:52:32 +08:00
//获取所有用户ID
GetAllUserID(ctx context.Context) ([]string, error)
2023-02-21 16:48:10 +08:00
//函数内部先查询db中是否存在,存在则什么都不做;不存在则插入
InitOnce(ctx context.Context, users []*relation.UserModel) (err error)
2023-01-17 11:51:19 +08:00
}
2023-02-22 12:17:59 +08:00
type userDatabase struct {
2023-02-21 12:59:44 +08:00
userDB relation.UserModelInterface
2023-01-29 14:47:21 +08:00
}
2023-02-22 12:17:59 +08:00
func NewUserDatabase(userDB relation.UserModelInterface) UserDatabase {
return &userDatabase{userDB: userDB}
2023-01-29 14:47:21 +08:00
}
2023-02-22 12:17:59 +08:00
func (u *userDatabase) InitOnce(ctx context.Context, users []*relation.UserModel) (err error) {
2023-02-21 16:48:10 +08:00
userIDs := utils.Slice(users, func(e *relation.UserModel) string {
return e.UserID
})
result, err := u.userDB.Find(ctx, userIDs)
if err != nil {
return err
}
2023-02-22 12:17:59 +08:00
miss := utils.SliceAnySub(users, result, func(e *relation.UserModel) string { return e.UserID })
if len(miss) > 0 {
_ = u.userDB.Create(ctx, miss)
2023-02-22 12:17:59 +08:00
}
return nil
2023-02-21 16:48:10 +08:00
}
2023-02-07 20:28:34 +08:00
// 获取指定用户的信息 如有userID未找到 也返回错误
2023-02-22 12:17:59 +08:00
func (u *userDatabase) FindWithError(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error) {
2023-02-21 10:29:09 +08:00
users, err = u.userDB.Find(ctx, userIDs)
2023-02-02 16:39:29 +08:00
if err != nil {
return
}
if len(users) != len(userIDs) {
2023-03-16 17:00:10 +08:00
err = errs.ErrRecordNotFound.Wrap("userID not found")
2023-02-02 16:39:29 +08:00
}
return
2023-01-29 14:47:21 +08:00
}
2023-02-09 12:52:47 +08:00
// 获取指定用户的信息 如有userID未找到 不返回错误
2023-02-22 12:17:59 +08:00
func (u *userDatabase) Find(ctx context.Context, userIDs []string) (users []*relation.UserModel, err error) {
2023-02-21 10:29:09 +08:00
users, err = u.userDB.Find(ctx, userIDs)
2023-02-09 12:52:47 +08:00
return
}
2023-02-07 20:28:34 +08:00
// 插入多条 外部保证userID 不重复 且在db中不存在
2023-02-22 12:17:59 +08:00
func (u *userDatabase) Create(ctx context.Context, users []*relation.UserModel) (err error) {
2023-02-21 10:29:09 +08:00
return u.userDB.Create(ctx, users)
2023-01-29 14:47:21 +08:00
}
2023-02-02 16:39:29 +08:00
2023-02-07 20:28:34 +08:00
// 更新(非零值) 外部保证userID存在
2023-03-16 12:07:21 +08:00
func (u *userDatabase) Update(ctx context.Context, user *relation.UserModel) (err error) {
return u.userDB.Update(ctx, user)
2023-01-17 11:51:19 +08:00
}
2023-02-07 20:28:34 +08:00
// 更新(零值) 外部保证userID存在
2023-02-22 12:17:59 +08:00
func (u *userDatabase) UpdateByMap(ctx context.Context, userID string, args map[string]interface{}) (err error) {
2023-02-21 10:29:09 +08:00
return u.userDB.UpdateByMap(ctx, userID, args)
2023-01-29 17:46:11 +08:00
}
2023-02-02 16:39:29 +08:00
// 获取,如果没找到,不返回错误
2023-02-22 12:17:59 +08:00
func (u *userDatabase) Page(ctx context.Context, pageNumber, showNumber int32) (users []*relation.UserModel, count int64, err error) {
2023-02-21 13:14:19 +08:00
return u.userDB.Page(ctx, pageNumber, showNumber)
2023-01-29 17:46:11 +08:00
}
2023-02-02 16:39:29 +08:00
// userIDs是否存在 只要有一个存在就为true
2023-02-22 12:17:59 +08:00
func (u *userDatabase) IsExist(ctx context.Context, userIDs []string) (exist bool, err error) {
2023-02-21 10:29:09 +08:00
users, err := u.userDB.Find(ctx, userIDs)
2023-02-02 16:39:29 +08:00
if err != nil {
2023-02-07 20:28:34 +08:00
return false, err
2023-02-02 16:39:29 +08:00
}
if len(users) > 0 {
return true, nil
}
return false, nil
}
2023-02-15 15:52:32 +08:00
2023-02-22 12:17:59 +08:00
func (u *userDatabase) GetAllUserID(ctx context.Context) (userIDs []string, err error) {
2023-03-10 11:42:06 +08:00
return u.userDB.GetAllUserID(ctx)
2023-02-15 15:52:32 +08:00
}