/
users.go
56 lines (42 loc) · 1.42 KB
/
users.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package repository
import (
"context"
"errors"
"github.com/murilo-bracero/raspstore/auth-service/internal/database"
"github.com/murilo-bracero/raspstore/auth-service/internal/model"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)
const usersCollectionName = "users"
type UsersRepository interface {
Update(usr *model.User) error
FindByUsername(username string) (usr *model.User, err error)
}
type usersRespository struct {
ctx context.Context
coll *mongo.Collection
}
func NewUsersRepository(ctx context.Context, conn database.MongoConnection) UsersRepository {
return &usersRespository{coll: conn.Collection(usersCollectionName), ctx: ctx}
}
func (r *usersRespository) FindByUsername(username string) (usr *model.User, err error) {
res := r.coll.FindOne(r.ctx, bson.M{"username": username})
err = res.Decode(&usr)
return usr, err
}
func (r *usersRespository) Update(usr *model.User) error {
filter := bson.D{{Key: "user_id", Value: usr.UserId}}
update := bson.D{{Key: "$set",
Value: bson.D{
{Key: "is_mfa_enabled", Value: usr.IsMfaEnabled},
{Key: "is_mfa_verified", Value: usr.IsMfaVerified},
{Key: "secret", Value: usr.Secret},
{Key: "refresh_token", Value: usr.RefreshToken},
},
}}
res, err := r.coll.UpdateOne(r.ctx, filter, update)
if err == nil && (res.MatchedCount == 0 || res.ModifiedCount == 0) {
return errors.New("credential could not be updated")
}
return err
}