Просмотр исходного кода

delete user from user_thirds, too

Tao Chen 1 год назад
Родитель
Сommit
3041fb82d9
2 измененных файлов с 23 добавлено и 1 удалено
  1. 6 0
      service/oauth.go
  2. 17 1
      service/user.go

+ 6 - 0
service/oauth.go

@@ -441,6 +441,12 @@ func (os *OauthService) UnBindThird(thirdType string, userid uint) error {
441 441
 	return global.DB.Where("user_id = ? and third_type = ?", userid, thirdType).Delete(&model.UserThird{}).Error
442 442
 }
443 443
 
444
+// DeleteUserByUserId: When user is deleted, delete all third party bindings
445
+func (os *OauthService) DeleteUserByUserId(userid uint) error {
446
+	return global.DB.Where("user_id = ?", userid).Delete(&model.UserThird{}).Error
447
+}
448
+
449
+
444 450
 // InfoById 根据id取用户信息
445 451
 func (os *OauthService) InfoById(id uint) *model.Oauth {
446 452
 	u := &model.Oauth{}

+ 17 - 1
service/user.go

@@ -148,8 +148,24 @@ func (us *UserService) Create(u *model.User) error {
148 148
 func (us *UserService) Logout(u *model.User, token string) error {
149 149
 	return global.DB.Where("user_id = ? and token = ?", u.Id, token).Delete(&model.UserToken{}).Error
150 150
 }
151
+
152
+// Delete 删除用户和oauth信息
151 153
 func (us *UserService) Delete(u *model.User) error {
152
-	return global.DB.Delete(u).Error
154
+    // 使用锁进行保护,确保用户删除和 OAuth 删除的原子性
155
+    global.Lock.Lock("DeleteUserByUserId")
156
+    defer global.Lock.UnLock("DeleteUserByUserId")
157
+
158
+    // 删除用户
159
+    if err := global.DB.Delete(u).Error; err != nil {
160
+        return err
161
+    }
162
+
163
+    // 删除关联的 OAuth 信息
164
+    if err := AllService.OauthService.DeleteUserByUserId(u.Id); err != nil {
165
+        return err
166
+    }
167
+
168
+    return nil
153 169
 }
154 170
 
155 171
 // Update 更新