Przeglądaj źródła

添加用户电子邮件地址的创建或更新逻辑

在事务中,为用户的主邮箱和公开邮箱添加了FirstOrCreate逻辑,以确保这些邮箱记录存在且未激活。如果在处理公开邮箱时发生错误,则返回该错误。
SongZihuan 2 miesięcy temu
rodzic
commit
1e48e2c366
1 zmienionych plików z 21 dodań i 0 usunięć
  1. 21 0
      internal/database/users.go

+ 21 - 0
internal/database/users.go

@@ -1429,6 +1429,15 @@ func (s *UsersStore) MarkEmailPrimary(ctx context.Context, userID int64, email s
 	}
 
 	return s.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
+		err = tx.FirstOrCreate(&EmailAddress{
+			UserID:      user.ID,
+			Email:       user.Email,
+			IsActivated: false,
+		}, &EmailAddress{
+			UserID: user.ID,
+			Email:  user.Email,
+		}).Error
+
 		return tx.Model(&User{}).
 			Where("id = ?", user.ID).
 			Updates(map[string]any{
@@ -1461,6 +1470,18 @@ func (s *UsersStore) MarkEmailPublic(ctx context.Context, userID int64, email st
 	}
 
 	return s.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
+		err = tx.FirstOrCreate(&EmailAddress{
+			UserID:      user.ID,
+			Email:       user.PublicEmail,
+			IsActivated: false,
+		}, &EmailAddress{
+			UserID: user.ID,
+			Email:  user.PublicEmail,
+		}).Error
+		if err != nil {
+			return err
+		}
+
 		return tx.Model(&User{}).
 			Where("id = ?", user.ID).
 			Updates(map[string]any{