generated from isalikov/goservice
/
user_update.go
39 lines (32 loc) · 1.03 KB
/
user_update.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
package database
import (
"context"
proto "github.com/papireio/go-users-service/pkg/api/grpc"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"time"
)
func UpdateUser(client *mongo.Client, req *proto.UpdateUserRequest) (*User, error) {
if req.Uuid == "" {
return nil, status.Error(codes.InvalidArgument, "Incorrect request argument")
}
u := &User{}
filter := bson.D{{"uuid", req.Uuid}}
payload := bson.M{"$set": bson.M{"name": req.Name}}
upsert := false
after := options.After
opt := &options.FindOneAndUpdateOptions{
ReturnDocument: &after,
Upsert: &upsert,
}
collection := client.Database("papireio").Collection("users")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := collection.FindOneAndUpdate(ctx, filter, payload, opt).Decode(&u); err != nil {
return nil, status.Error(codes.NotFound, "User not found")
}
return u, nil
}