mirror of
https://github.com/cuigh/swirl
synced 2025-01-01 00:32:09 +00:00
ca0789ac4e
Since original pkg is unmaintained
166 lines
3.4 KiB
Go
166 lines
3.4 KiB
Go
package mongo
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/cuigh/swirl/model"
|
|
"github.com/globalsign/mgo"
|
|
"github.com/globalsign/mgo/bson"
|
|
)
|
|
|
|
func (d *Dao) UserCount() (count int, err error) {
|
|
d.do(func(db *database) {
|
|
count, err = db.C("user").Count()
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) UserCreate(user *model.User) (err error) {
|
|
d.do(func(db *database) {
|
|
err = db.C("user").Insert(user)
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) UserUpdate(user *model.User) (err error) {
|
|
d.do(func(db *database) {
|
|
update := bson.M{
|
|
"$set": bson.M{
|
|
"name": user.Name,
|
|
"email": user.Email,
|
|
"admin": user.Admin,
|
|
"type": user.Type,
|
|
"roles": user.Roles,
|
|
"updated_at": user.UpdatedAt,
|
|
},
|
|
}
|
|
err = db.C("user").UpdateId(user.ID, update)
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) UserBlock(id string, blocked bool) (err error) {
|
|
d.do(func(db *database) {
|
|
var status model.UserStatus
|
|
if blocked {
|
|
status = model.UserStatusBlocked
|
|
} else {
|
|
status = model.UserStatusActive
|
|
}
|
|
update := bson.M{
|
|
"$set": bson.M{
|
|
"status": status,
|
|
"updated_at": time.Now(),
|
|
},
|
|
}
|
|
err = db.C("user").UpdateId(id, update)
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) UserDelete(id string) (err error) {
|
|
d.do(func(db *database) {
|
|
err = db.C("user").RemoveId(id)
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) UserList(args *model.UserListArgs) (users []*model.User, count int, err error) {
|
|
d.do(func(db *database) {
|
|
query := bson.M{}
|
|
if args.Query != "" {
|
|
query["$or"] = []bson.M{
|
|
{"login_name": args.Query},
|
|
{"name": args.Query},
|
|
{"email": args.Query},
|
|
}
|
|
}
|
|
switch args.Filter {
|
|
case "admins":
|
|
query["admin"] = true
|
|
case "active":
|
|
query["status"] = 1
|
|
case "blocked":
|
|
query["status"] = 0
|
|
}
|
|
|
|
q := db.C("user").Find(query)
|
|
count, err = q.Count()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
users = []*model.User{}
|
|
err = q.Skip(args.PageSize * (args.PageIndex - 1)).Limit(args.PageSize).All(&users)
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) UserGetByID(id string) (user *model.User, err error) {
|
|
d.do(func(db *database) {
|
|
user = &model.User{}
|
|
err = db.C("user").FindId(id).One(user)
|
|
if err == mgo.ErrNotFound {
|
|
user, err = nil, nil
|
|
}
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) UserGetByName(loginName string) (user *model.User, err error) {
|
|
d.do(func(db *database) {
|
|
user = &model.User{}
|
|
err = db.C("user").Find(bson.M{"login_name": loginName}).One(user)
|
|
if err == mgo.ErrNotFound {
|
|
user, err = nil, nil
|
|
}
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) ProfileUpdateInfo(user *model.User) (err error) {
|
|
d.do(func(db *database) {
|
|
update := bson.M{
|
|
"$set": bson.M{
|
|
"name": user.Name,
|
|
"email": user.Email,
|
|
"updated_at": time.Now(),
|
|
},
|
|
}
|
|
err = db.C("user").UpdateId(user.ID, update)
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) ProfileUpdatePassword(id, pwd, salt string) (err error) {
|
|
d.do(func(db *database) {
|
|
update := bson.M{
|
|
"$set": bson.M{
|
|
"password": pwd,
|
|
"salt": salt,
|
|
"updated_at": time.Now(),
|
|
},
|
|
}
|
|
err = db.C("user").UpdateId(id, update)
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) SessionGet(token string) (session *model.Session, err error) {
|
|
d.do(func(db *database) {
|
|
session = &model.Session{}
|
|
err = db.C("session").Find(bson.M{"token": token}).One(session)
|
|
if err == mgo.ErrNotFound {
|
|
session, err = nil, nil
|
|
}
|
|
})
|
|
return
|
|
}
|
|
|
|
func (d *Dao) SessionUpdate(session *model.Session) (err error) {
|
|
d.do(func(db *database) {
|
|
_, err = db.C("session").UpsertId(session.UserID, session)
|
|
})
|
|
return
|
|
}
|