(ctx context.Context, user *models.User)
| 28 | } |
| 29 | |
| 30 | func (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 | |
| 69 | func (s *UserService) GetUserByID(ctx context.Context, userID bson.ObjectID) (*models.User, error) { |
| 70 | result := s.userCollection.FindOne(ctx, bson.M{"_id": userID}) |
no test coverage detected