customer/internal/repository/google.go
2023-05-16 07:01:55 +03:00

49 lines
1.6 KiB
Go

package repository
import (
"context"
"github.com/sirupsen/logrus"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
)
type GoogleRepository struct {
mongoDB *mongo.Collection
logger *logrus.Logger
}
func NewGoogleRepository(mongoDB *mongo.Collection, logger *logrus.Logger) *GoogleRepository {
return &GoogleRepository{
mongoDB: mongoDB,
logger: logger,
}
}
func (receiver *GoogleRepository) UpdateUser(ctx context.Context, user *models.GoogleUserInformation) (*models.GoogleUserInformation, error) {
var googleUserInformation models.GoogleUserInformation
updateOptions := options.FindOneAndUpdate().SetUpsert(true).SetReturnDocument(options.After)
filter := bson.D{{Key: "sub", Value: user.Subject}}
update := bson.D{{Key: "$set", Value: user}}
if err := receiver.mongoDB.FindOneAndUpdate(ctx, filter, update, updateOptions).Decode(&googleUserInformation); err != nil {
receiver.logger.Errorf("failed decode google user information: %v", err)
return nil, errors.ErrDecodeRecord
}
return &googleUserInformation, nil
}
func (receiver *GoogleRepository) FindUserBySubject(_ context.Context, _ string) (*models.GoogleUserInformation, error) {
return nil, errors.ErrMethodNotImplemented
}
func (receiver *GoogleRepository) InsertUser(_ context.Context, _ *models.GoogleUserInformation) (*models.GoogleUserInformation, error) {
return nil, errors.ErrMethodNotImplemented
}