223 lines
4.5 KiB
Go
223 lines
4.5 KiB
Go
package models
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/toolkits/pkg/logger"
|
|
"github.com/toolkits/pkg/str"
|
|
)
|
|
|
|
type UserGroup struct {
|
|
Id int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
Note string `json:"note"`
|
|
CreateAt int64 `json:"create_at"`
|
|
CreateBy string `json:"create_by"`
|
|
UpdateAt int64 `json:"update_at"`
|
|
UpdateBy string `json:"update_by"`
|
|
}
|
|
|
|
func (ug *UserGroup) TableName() string {
|
|
return "user_group"
|
|
}
|
|
|
|
func (ug *UserGroup) Validate() error {
|
|
if str.Dangerous(ug.Name) {
|
|
return _e("Group name has invalid characters")
|
|
}
|
|
|
|
if str.Dangerous(ug.Note) {
|
|
return _e("Group note has invalid characters")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (ug *UserGroup) Add() error {
|
|
if err := ug.Validate(); err != nil {
|
|
return err
|
|
}
|
|
|
|
num, err := UserGroupCount("name=?", ug.Name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if num > 0 {
|
|
return _e("UserGroup %s already exists", ug.Name)
|
|
}
|
|
|
|
now := time.Now().Unix()
|
|
ug.CreateAt = now
|
|
ug.UpdateAt = now
|
|
return DBInsertOne(ug)
|
|
}
|
|
|
|
func (ug *UserGroup) Update(cols ...string) error {
|
|
if err := ug.Validate(); err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err := DB.Where("id=?", ug.Id).Cols(cols...).Update(ug)
|
|
if err != nil {
|
|
logger.Errorf("mysql.error: update user_group(id=%d) fail: %v", ug.Id, err)
|
|
return internalServerError
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func UserGroupTotal(query string) (num int64, err error) {
|
|
if query != "" {
|
|
q := "%" + query + "%"
|
|
num, err = DB.Where("name like ? or note like ?", q, q).Count(new(UserGroup))
|
|
} else {
|
|
num, err = DB.Count(new(UserGroup))
|
|
}
|
|
|
|
if err != nil {
|
|
logger.Errorf("mysql.error: count user_group fail: %v", err)
|
|
return 0, internalServerError
|
|
}
|
|
|
|
return num, nil
|
|
}
|
|
|
|
func UserGroupCount(where string, args ...interface{}) (num int64, err error) {
|
|
num, err = DB.Where(where, args...).Count(new(UserGroup))
|
|
if err != nil {
|
|
logger.Errorf("mysql.error: count user_group fail: %v", err)
|
|
return num, internalServerError
|
|
}
|
|
return num, nil
|
|
}
|
|
|
|
func UserGroupGets(query string, limit, offset int) ([]UserGroup, error) {
|
|
session := DB.Limit(limit, offset).OrderBy("name")
|
|
if query != "" {
|
|
q := "%" + query + "%"
|
|
session = session.Where("name like ? or note like ?", q, q)
|
|
}
|
|
|
|
var objs []UserGroup
|
|
err := session.Find(&objs)
|
|
if err != nil {
|
|
logger.Errorf("mysql.error: query user_group fail: %v", err)
|
|
return objs, internalServerError
|
|
}
|
|
|
|
if len(objs) == 0 {
|
|
return []UserGroup{}, nil
|
|
}
|
|
|
|
return objs, nil
|
|
}
|
|
|
|
func UserGroupGetsByIdsStr(ids []string) ([]UserGroup, error) {
|
|
if len(ids) == 0 {
|
|
return []UserGroup{}, nil
|
|
}
|
|
|
|
var objs []UserGroup
|
|
|
|
err := DB.Where("id in (" + strings.Join(ids, ",") + ")").Find(&objs)
|
|
if err != nil {
|
|
logger.Errorf("mysql.error: UserGroupGetsByIds fail: %v", err)
|
|
return nil, internalServerError
|
|
}
|
|
|
|
if len(objs) == 0 {
|
|
return []UserGroup{}, nil
|
|
}
|
|
|
|
return objs, nil
|
|
}
|
|
|
|
func UserGroupGet(where string, args ...interface{}) (*UserGroup, error) {
|
|
var obj UserGroup
|
|
has, err := DB.Where(where, args...).Get(&obj)
|
|
if err != nil {
|
|
logger.Errorf("mysql.error: query user_group(%s)%+v fail: %s", where, args, err)
|
|
return nil, internalServerError
|
|
}
|
|
|
|
if !has {
|
|
return nil, nil
|
|
}
|
|
|
|
return &obj, nil
|
|
}
|
|
|
|
func (ug *UserGroup) MemberIds() ([]int64, error) {
|
|
var ids []int64
|
|
err := DB.Table(new(UserGroupMember)).Select("user_id").Where("group_id=?", ug.Id).Find(&ids)
|
|
if err != nil {
|
|
logger.Errorf("mysql.error: query user_group_member fail: %v", err)
|
|
return ids, internalServerError
|
|
}
|
|
|
|
if len(ids) == 0 {
|
|
return []int64{}, nil
|
|
}
|
|
|
|
return ids, nil
|
|
}
|
|
|
|
func (ug *UserGroup) AddMembers(userIds []int64) error {
|
|
count := len(userIds)
|
|
for i := 0; i < count; i++ {
|
|
user, err := UserGetById(userIds[i])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if user == nil {
|
|
continue
|
|
}
|
|
err = UserGroupMemberAdd(ug.Id, user.Id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (ug *UserGroup) DelMembers(userIds []int64) error {
|
|
return UserGroupMemberDel(ug.Id, userIds)
|
|
}
|
|
|
|
func (ug *UserGroup) Del() error {
|
|
session := DB.NewSession()
|
|
defer session.Close()
|
|
|
|
if err := session.Begin(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := session.Exec("DELETE FROM user_group_member WHERE group_id=?", ug.Id); err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := session.Exec("DELETE FROM user_group WHERE id=?", ug.Id); err != nil {
|
|
return err
|
|
}
|
|
|
|
return session.Commit()
|
|
}
|
|
|
|
func UserGroupGetAll() ([]UserGroup, error) {
|
|
var userGroups []UserGroup
|
|
|
|
err := DB.Find(&userGroups)
|
|
if err != nil {
|
|
logger.Errorf("mysql.error: select user_group fail: %v", err)
|
|
return userGroups, internalServerError
|
|
}
|
|
|
|
if len(userGroups) == 0 {
|
|
return []UserGroup{}, nil
|
|
}
|
|
|
|
return userGroups, nil
|
|
}
|