2020-07-22 22:17:53 +08:00
package models
import (
2020-12-04 16:01:01 +08:00
"github.com/TeaOSLab/EdgeAPI/internal/errors"
2020-07-22 22:17:53 +08:00
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
2020-12-04 16:01:01 +08:00
"github.com/iwind/TeaGo/types"
stringutil "github.com/iwind/TeaGo/utils/string"
2020-07-22 22:17:53 +08:00
)
const (
UserStateEnabled = 1 // 已启用
UserStateDisabled = 0 // 已禁用
)
type UserDAO dbs . DAO
func NewUserDAO ( ) * UserDAO {
return dbs . NewDAO ( & UserDAO {
DAOObject : dbs . DAOObject {
DB : Tea . Env ,
Table : "edgeUsers" ,
Model : new ( User ) ,
PkName : "id" ,
} ,
} ) . ( * UserDAO )
}
2020-10-13 20:05:13 +08:00
var SharedUserDAO * UserDAO
func init ( ) {
dbs . OnReady ( func ( ) {
SharedUserDAO = NewUserDAO ( )
} )
}
2020-07-22 22:17:53 +08:00
// 启用条目
2020-12-04 16:01:01 +08:00
func ( this * UserDAO ) EnableUser ( id int64 ) ( rowsAffected int64 , err error ) {
2020-07-22 22:17:53 +08:00
return this . Query ( ) .
Pk ( id ) .
Set ( "state" , UserStateEnabled ) .
Update ( )
}
// 禁用条目
2020-12-04 16:01:01 +08:00
func ( this * UserDAO ) DisableUser ( id int64 ) ( rowsAffected int64 , err error ) {
2020-07-22 22:17:53 +08:00
return this . Query ( ) .
Pk ( id ) .
Set ( "state" , UserStateDisabled ) .
Update ( )
}
// 查找启用中的条目
2020-12-04 16:01:01 +08:00
func ( this * UserDAO ) FindEnabledUser ( id int64 ) ( * User , error ) {
2020-07-22 22:17:53 +08:00
result , err := this . Query ( ) .
Pk ( id ) .
Attr ( "state" , UserStateEnabled ) .
Find ( )
if result == nil {
return nil , err
}
return result . ( * User ) , err
}
2020-11-10 20:30:55 +08:00
2020-12-07 11:46:02 +08:00
// 查找用户基本信息
func ( this * UserDAO ) FindEnabledBasicUser ( id int64 ) ( * User , error ) {
result , err := this . Query ( ) .
Pk ( id ) .
Attr ( "state" , UserStateEnabled ) .
Result ( "id" , "fullname" , "username" ) .
Find ( )
if result == nil {
return nil , err
}
return result . ( * User ) , err
}
2020-11-10 20:30:55 +08:00
// 获取管理员名称
func ( this * UserDAO ) FindUserFullname ( userId int64 ) ( string , error ) {
return this . Query ( ) .
Pk ( userId ) .
Result ( "fullname" ) .
FindStringCol ( "" )
}
2020-12-04 16:01:01 +08:00
// 创建用户
func ( this * UserDAO ) CreateUser ( username string , password string , fullname string , mobile string , tel string , email string , remark string , source string ) ( int64 , error ) {
op := NewUserOperator ( )
op . Username = username
op . Password = stringutil . Md5 ( password )
op . Fullname = fullname
op . Mobile = mobile
op . Tel = tel
op . Email = email
op . Remark = remark
op . Source = source
op . IsOn = true
op . State = UserStateEnabled
2020-12-09 20:44:05 +08:00
err := this . Save ( op )
2020-12-04 16:01:01 +08:00
if err != nil {
return 0 , err
}
return types . Int64 ( op . Id ) , nil
}
// 修改用户
func ( this * UserDAO ) UpdateUser ( userId int64 , username string , password string , fullname string , mobile string , tel string , email string , remark string , isOn bool ) error {
if userId <= 0 {
return errors . New ( "invalid userId" )
}
op := NewUserOperator ( )
op . Id = userId
op . Username = username
if len ( password ) > 0 {
op . Password = stringutil . Md5 ( password )
}
op . Fullname = fullname
op . Mobile = mobile
op . Tel = tel
op . Email = email
op . Remark = remark
op . IsOn = isOn
2020-12-09 20:44:05 +08:00
err := this . Save ( op )
2020-12-04 16:01:01 +08:00
return err
}
// 计算用户数量
func ( this * UserDAO ) CountAllEnabledUsers ( keyword string ) ( int64 , error ) {
query := this . Query ( )
query . State ( UserStateEnabled )
if len ( keyword ) > 0 {
query . Where ( "(username LIKE :keyword OR fullname LIKE :keyword OR mobile LIKE :keyword OR email LIKE :keyword OR tel LIKE :keyword OR remark LIKE :keyword)" ) .
Param ( "keyword" , "%" + keyword + "%" )
}
return query . Count ( )
}
// 列出单页用户
func ( this * UserDAO ) ListEnabledUsers ( keyword string ) ( result [ ] * User , err error ) {
query := this . Query ( )
query . State ( UserStateEnabled )
if len ( keyword ) > 0 {
query . Where ( "(username LIKE :keyword OR fullname LIKE :keyword OR mobile LIKE :keyword OR email LIKE :keyword OR tel LIKE :keyword OR remark LIKE :keyword)" ) .
Param ( "keyword" , "%" + keyword + "%" )
}
_ , err = query .
DescPk ( ) .
Slice ( & result ) .
FindAll ( )
return
}
// 检查用户名是否存在
func ( this * UserDAO ) ExistUser ( userId int64 , username string ) ( bool , error ) {
return this . Query ( ) .
State ( UserStateEnabled ) .
Attr ( "username" , username ) .
Neq ( "id" , userId ) .
Exist ( )
}