MCPcopy Create free account
hub / github.com/PaperDebugger/paperdebugger / UpsertUserByEmail

Method UpsertUserByEmail

internal/services/user.go:30–67  ·  view source on GitHub ↗
(ctx context.Context, user *models.User)

Source from the content-addressed store, hash-verified

28}
29
30func (s *UserService) UpsertUserByEmail(ctx context.Context, user *models.User) (*models.User, error) {
31 if user == nil || user.Email == "" {
32 return nil, shared.ErrInvalidUser()
33 }
34
35 existingUser, err := s.GetUserByEmail(ctx, user.Email)
36 if err != nil && err != mongo.ErrNoDocuments {
37 return nil, err
38 }
39
40 if err == mongo.ErrNoDocuments {
41 user.ID = bson.NewObjectID()
42 user.CreatedAt = bson.NewDateTimeFromTime(time.Now())
43 user.UpdatedAt = bson.NewDateTimeFromTime(time.Now())
44
45 // Initialize with default settings for new users
46 user.Settings = s.GetDefaultSettings()
47
48 _, err := s.userCollection.InsertOne(ctx, user)
49 if err != nil {
50 return nil, err
51 }
52 return user, nil
53 } else {
54 user.ID = existingUser.ID
55 user.CreatedAt = existingUser.CreatedAt
56 user.UpdatedAt = bson.NewDateTimeFromTime(time.Now())
57 user.Settings = existingUser.Settings
58
59 filter := bson.M{"email": user.Email}
60 update := bson.M{"$set": user}
61 _, err := s.userCollection.UpdateOne(ctx, filter, update)
62 if err != nil {
63 return nil, err
64 }
65 return user, nil
66 }
67}
68
69func (s *UserService) GetUserByID(ctx context.Context, userID bson.ObjectID) (*models.User, error) {
70 result := s.userCollection.FindOne(ctx, bson.M{"_id": userID})

Callers 2

LoginByGoogleMethod · 0.80
LoginByOverleafMethod · 0.80

Calls 2

GetUserByEmailMethod · 0.95
GetDefaultSettingsMethod · 0.95

Tested by

no test coverage detected