You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.1 KiB
52 lines
1.1 KiB
package mongodb
|
|
|
|
import (
|
|
"context"
|
|
"git.aiterp.net/rpdata/api/models"
|
|
"git.aiterp.net/rpdata/api/repositories"
|
|
"github.com/globalsign/mgo"
|
|
"github.com/globalsign/mgo/bson"
|
|
)
|
|
|
|
type userRepository struct {
|
|
users *mgo.Collection
|
|
}
|
|
|
|
func newUserRepository(db *mgo.Database) (repositories.UserRepository, error) {
|
|
collection := db.C("core.users")
|
|
|
|
return &userRepository{users: collection}, nil
|
|
}
|
|
|
|
func (r *userRepository) Find(ctx context.Context, id string) (*models.User, error) {
|
|
user := new(models.User)
|
|
err := r.users.FindId(id).One(user)
|
|
if err != nil {
|
|
if err == mgo.ErrNotFound {
|
|
return nil, repositories.ErrNotFound
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
return user, nil
|
|
}
|
|
|
|
func (r *userRepository) List(ctx context.Context) ([]*models.User, error) {
|
|
users := make([]*models.User, 0, 8)
|
|
err := r.users.Find(bson.M{}).All(&users)
|
|
if err != nil && err != mgo.ErrNotFound {
|
|
return nil, err
|
|
}
|
|
|
|
return users, nil
|
|
}
|
|
|
|
func (r *userRepository) Insert(ctx context.Context, user models.User) (*models.User, error) {
|
|
err := r.users.Insert(user)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &user, nil
|
|
}
|