391 lines
9.5 KiB
Go
391 lines
9.5 KiB
Go
package dao
|
|
|
|
import (
|
|
"fmt"
|
|
"intent-system/pkg/dal/models"
|
|
"intent-system/pkg/proto"
|
|
"intent-system/pkg/utils"
|
|
|
|
"github.com/civet148/log"
|
|
"github.com/civet148/sqlca/v2"
|
|
)
|
|
|
|
const (
|
|
UserState_Enabled = 1
|
|
UserState_Disabled = 2
|
|
)
|
|
|
|
type UserDAO struct {
|
|
db *sqlca.Engine
|
|
}
|
|
|
|
func NewUserDAO(db *sqlca.Engine) *UserDAO {
|
|
|
|
return &UserDAO{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func (dao *UserDAO) Insert(do *models.UserDO) (id int64, err error) {
|
|
if id, err = dao.db.Model(&do).Table(models.TableNameUser).Insert(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) Upsert(do *models.UserDO, columns ...string) (lastId int64, err error) {
|
|
if len(columns) == 0 {
|
|
return 0, fmt.Errorf("no columns to update")
|
|
}
|
|
if lastId, err = dao.db.Model(do).Table(models.TableNameUser).Select(columns...).Upsert(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) UpdateByName(do *models.UserDO, columns ...string) (err error) {
|
|
if _, err = dao.db.Model(do).
|
|
Table(models.TableNameUser).
|
|
Select(columns...).
|
|
Exclude(models.USER_COLUMN_USER_NAME, models.USER_COLUMN_IS_ADMIN, models.USER_COLUMN_EMAIL).
|
|
Eq(models.USER_COLUMN_USER_NAME, do.UserName).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) DeleteUser(do *models.UserDO) (err error) {
|
|
var strUserName = do.UserName
|
|
do.UserName = utils.MakeTimestampSuffix(do.UserName)
|
|
do.Email = utils.MakeTimestampSuffix(do.Email)
|
|
_, err = dao.db.Model(do).
|
|
Table(models.TableNameUser).
|
|
Select(
|
|
models.USER_COLUMN_USER_NAME,
|
|
models.USER_COLUMN_EMAIL,
|
|
models.USER_COLUMN_DELETED,
|
|
models.USER_COLUMN_EDIT_USER,
|
|
).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Eq(models.USER_COLUMN_USER_NAME, strUserName).
|
|
Update()
|
|
return
|
|
}
|
|
func (dao *UserDAO) DeleteUsers(dos []*models.UserDO) (err error) {
|
|
for _, do := range dos {
|
|
err = dao.DeleteUser(do)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) CheckActiveUserByUserName(strUserName string) (ok bool, err error) {
|
|
var count int64
|
|
var do *models.UserDO
|
|
if count, err = dao.db.Model(&do).
|
|
Table(models.TableNameUser).
|
|
Select(models.USER_COLUMN_ID).
|
|
Eq(models.USER_COLUMN_USER_NAME, strUserName).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
if count != 0 {
|
|
return true, nil
|
|
}
|
|
return false, nil
|
|
}
|
|
|
|
func (dao *UserDAO) CheckActiveUserByEmail(strEmail string) (ok bool, err error) {
|
|
var count int64
|
|
var do *models.UserDO
|
|
if count, err = dao.db.Model(&do).
|
|
Table(models.TableNameUser).
|
|
Select(models.USER_COLUMN_ID).
|
|
Eq(models.USER_COLUMN_EMAIL, strEmail).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
if count != 0 {
|
|
return true, nil
|
|
}
|
|
return false, nil
|
|
}
|
|
|
|
func (dao *UserDAO) CheckActiveUserByPhone(strPhone string) (ok bool, err error) {
|
|
var count int64
|
|
var do *models.UserDO
|
|
if count, err = dao.db.Model(&do).
|
|
Table(models.TableNameUser).
|
|
Select(models.USER_COLUMN_ID).
|
|
Eq(models.USER_COLUMN_PHONE_NUMBER, strPhone).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
if count != 0 {
|
|
return true, nil
|
|
}
|
|
return false, nil
|
|
}
|
|
|
|
func (dao *UserDAO) SelectUsers(pageNo, pageSize int) (dos []*models.UserDO, total int64, err error) {
|
|
dos = make([]*models.UserDO, 0)
|
|
if _, total, err = dao.db.Model(&dos).
|
|
Table(models.TableNameUser).
|
|
Select(
|
|
models.USER_COLUMN_ID,
|
|
models.USER_COLUMN_USER_NAME,
|
|
models.USER_COLUMN_USER_ALIAS,
|
|
models.USER_COLUMN_PHONE_NUMBER,
|
|
models.USER_COLUMN_IS_ADMIN,
|
|
models.USER_COLUMN_EMAIL,
|
|
models.USER_COLUMN_ADDRESS,
|
|
models.USER_COLUMN_REMARK,
|
|
models.USER_COLUMN_STATE,
|
|
models.USER_COLUMN_LOGIN_IP,
|
|
models.USER_COLUMN_LOGIN_TIME,
|
|
models.USER_COLUMN_CREATED_TIME,
|
|
models.USER_COLUMN_UPDATED_TIME,
|
|
).
|
|
Page(pageNo, pageSize).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Desc(models.USER_COLUMN_CREATED_TIME).
|
|
QueryEx(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// user name
|
|
func (dao *UserDAO) SelectUserByName(strName string) (do *models.UserDO, err error) {
|
|
if _, err = dao.db.Model(&do).
|
|
Table(models.TableNameUser).
|
|
Select(
|
|
models.USER_COLUMN_ID,
|
|
models.USER_COLUMN_USER_NAME,
|
|
models.USER_COLUMN_PASSWORD,
|
|
models.USER_COLUMN_SALT,
|
|
models.USER_COLUMN_USER_ALIAS,
|
|
models.USER_COLUMN_PHONE_NUMBER,
|
|
models.USER_COLUMN_IS_ADMIN,
|
|
models.USER_COLUMN_EMAIL,
|
|
models.USER_COLUMN_ADDRESS,
|
|
models.USER_COLUMN_REMARK,
|
|
models.USER_COLUMN_STATE,
|
|
models.USER_COLUMN_LOGIN_IP,
|
|
models.USER_COLUMN_LOGIN_TIME,
|
|
models.USER_COLUMN_CREATED_TIME,
|
|
models.USER_COLUMN_UPDATED_TIME,
|
|
).
|
|
Eq(models.USER_COLUMN_USER_NAME, strName).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) SelectUsersByNames(strNames []string) (dos []*models.UserDO, err error) {
|
|
if _, err = dao.db.Model(&dos).
|
|
Table(models.TableNameUser).
|
|
Select(
|
|
models.USER_COLUMN_ID,
|
|
models.USER_COLUMN_USER_NAME,
|
|
models.USER_COLUMN_PASSWORD,
|
|
models.USER_COLUMN_SALT,
|
|
models.USER_COLUMN_USER_ALIAS,
|
|
models.USER_COLUMN_PHONE_NUMBER,
|
|
models.USER_COLUMN_IS_ADMIN,
|
|
models.USER_COLUMN_EMAIL,
|
|
models.USER_COLUMN_ADDRESS,
|
|
models.USER_COLUMN_REMARK,
|
|
models.USER_COLUMN_STATE,
|
|
models.USER_COLUMN_LOGIN_IP,
|
|
models.USER_COLUMN_LOGIN_TIME,
|
|
models.USER_COLUMN_CREATED_TIME,
|
|
models.USER_COLUMN_UPDATED_TIME,
|
|
).
|
|
In(models.USER_COLUMN_USER_NAME, strNames).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// user email
|
|
func (dao *UserDAO) SelectUserByEmail(strEmail string) (do *models.UserDO, err error) {
|
|
if _, err = dao.db.Model(&do).
|
|
Table(models.TableNameUser).
|
|
Select(
|
|
models.USER_COLUMN_ID,
|
|
models.USER_COLUMN_USER_NAME,
|
|
models.USER_COLUMN_PASSWORD,
|
|
models.USER_COLUMN_SALT,
|
|
models.USER_COLUMN_USER_ALIAS,
|
|
models.USER_COLUMN_PHONE_NUMBER,
|
|
models.USER_COLUMN_IS_ADMIN,
|
|
models.USER_COLUMN_EMAIL,
|
|
models.USER_COLUMN_ADDRESS,
|
|
models.USER_COLUMN_REMARK,
|
|
models.USER_COLUMN_STATE,
|
|
models.USER_COLUMN_LOGIN_IP,
|
|
models.USER_COLUMN_LOGIN_TIME,
|
|
models.USER_COLUMN_CREATED_TIME,
|
|
models.USER_COLUMN_UPDATED_TIME,
|
|
).
|
|
Eq(models.USER_COLUMN_EMAIL, strEmail).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) SelectUserByPhone(strPhone string) (do *models.UserDO, err error) {
|
|
if _, err = dao.db.Model(&do).
|
|
Table(models.TableNameUser).
|
|
Select(
|
|
models.USER_COLUMN_ID,
|
|
models.USER_COLUMN_USER_NAME,
|
|
models.USER_COLUMN_PASSWORD,
|
|
models.USER_COLUMN_SALT,
|
|
models.USER_COLUMN_USER_ALIAS,
|
|
models.USER_COLUMN_PHONE_NUMBER,
|
|
models.USER_COLUMN_IS_ADMIN,
|
|
models.USER_COLUMN_EMAIL,
|
|
models.USER_COLUMN_ADDRESS,
|
|
models.USER_COLUMN_REMARK,
|
|
models.USER_COLUMN_STATE,
|
|
models.USER_COLUMN_LOGIN_IP,
|
|
models.USER_COLUMN_LOGIN_TIME,
|
|
models.USER_COLUMN_CREATED_TIME,
|
|
models.USER_COLUMN_UPDATED_TIME,
|
|
).
|
|
Eq(models.USER_COLUMN_PHONE_NUMBER, strPhone).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) SelectActiveUserPasswordAndSalt(strUserName string) (do *models.UserDO, err error) {
|
|
if _, err = dao.db.Model(&do).
|
|
Table(models.TableNameUser).
|
|
Select(
|
|
models.USER_COLUMN_PASSWORD,
|
|
models.USER_COLUMN_SALT,
|
|
).
|
|
Eq(models.USER_COLUMN_USER_NAME, strUserName).
|
|
Eq(models.USER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) SelectUserName(req *proto.PlatformUserQueryReq) (dos []*models.UserDO, total int64, err error) {
|
|
dos = make([]*models.UserDO, 0)
|
|
c := dao.db.Model(&dos).
|
|
Table(models.TableNameUser).
|
|
Select(
|
|
models.USER_COLUMN_ID,
|
|
models.USER_COLUMN_USER_NAME,
|
|
).
|
|
Where("%s=0", models.USER_COLUMN_DELETED)
|
|
if req.Name != "" {
|
|
c.And("%s like '%%%s%%'", models.USER_COLUMN_USER_NAME, req.Name)
|
|
}
|
|
if _, total, err = c.
|
|
QueryEx(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// user name
|
|
func (dao *UserDAO) SelectUserByDid(strDid string) (do *models.UserDO, err error) {
|
|
//SELECT b.* FROM user_acl a, `user` b WHERE a.user_did='0xbeFDC8e41103D1F720B6F4D9aB046cE693521C4a' AND a.user_id=b.id AND b.deleted=0
|
|
if _, err = dao.db.Model(&do).
|
|
Select("b.*").
|
|
Table("user_acl a, `user` b").
|
|
Where("a.user_did='%s'", strDid).
|
|
And("a.user_id=b.id").
|
|
And("b.deleted=0").
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *UserDAO) UpdateUserState(strUserName string, state int) error {
|
|
if _, err := dao.db.Model(&state).
|
|
Table(models.TableNameUser).
|
|
Select(models.USER_COLUMN_STATE).
|
|
Where("%s='%s'", models.USER_COLUMN_USER_NAME, strUserName).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (dao *UserDAO) UpdateUserStateById(id int32, state int) error {
|
|
if _, err := dao.db.Model(&state).
|
|
Table(models.TableNameUser).
|
|
Select(models.USER_COLUMN_STATE).
|
|
Where("%s=%d", models.USER_COLUMN_ID, id).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (dao *UserDAO) IsUserBanned(userId int32) (bool, error) {
|
|
var state int32
|
|
if _, err := dao.db.Model(&state).
|
|
Table(models.TableNameUser).
|
|
Select(models.USER_COLUMN_STATE).
|
|
Eq(models.USER_COLUMN_ID, userId).
|
|
Query(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return false, err
|
|
}
|
|
if state == UserState_Disabled {
|
|
return true, nil
|
|
}
|
|
return false, nil
|
|
}
|