woodpecker/datastore/bolt/user.go
2015-04-16 22:16:32 -07:00

91 lines
2.1 KiB
Go

package bolt
import (
"time"
"github.com/boltdb/bolt"
"github.com/drone/drone/common"
)
// User returns a user by user login.
func (db *DB) User(login string) (*common.User, error) {
user := &common.User{}
key := []byte(login)
err := db.View(func(t *bolt.Tx) error {
return get(t, bucketUser, key, user)
})
return user, err
}
// UserCount returns a count of all registered users.
func (db *DB) UserCount() (int, error) {
var out int
var err = db.View(func(t *bolt.Tx) error {
out = t.Bucket(bucketUser).Stats().KeyN
return nil
})
return out, err
}
// UserList returns a list of all registered users.
func (db *DB) UserList() ([]*common.User, error) {
users := []*common.User{}
err := db.View(func(t *bolt.Tx) error {
return t.Bucket(bucketUser).ForEach(func(key, raw []byte) error {
user := &common.User{}
err := decode(raw, user)
if err != nil {
return err
}
users = append(users, user)
return nil
})
})
return users, err
}
// SetUser inserts or updates a user.
func (db *DB) SetUser(user *common.User) error {
key := []byte(user.Login)
user.Updated = time.Now().UTC().Unix()
return db.Update(func(t *bolt.Tx) error {
return update(t, bucketUser, key, user)
})
}
// SetUserNotExists inserts a new user into the datastore.
// If the user login already exists ErrConflict is returned.
func (db *DB) SetUserNotExists(user *common.User) error {
key := []byte(user.Login)
user.Created = time.Now().UTC().Unix()
user.Updated = time.Now().UTC().Unix()
return db.Update(func(t *bolt.Tx) error {
return insert(t, bucketUser, key, user)
})
}
// DelUser deletes the user.
func (db *DB) DelUser(user *common.User) error {
key := []byte(user.Login)
// TODO(bradrydzewski) delete user subscriptions
// TODO(bradrydzewski) delete user tokens
return db.Update(func(t *bolt.Tx) error {
err := delete(t, bucketUserTokens, key)
if err != nil {
return err
}
err = delete(t, bucketUserRepos, key)
if err != nil {
return err
}
// deletePrefix(t, bucketTokens, prefix)
// or
// deleteKeys(t, bucketTokens, keys)
return delete(t, bucketUser, key)
})
}