Browse Source

Better user delete action

Vova Tkach 6 years ago
parent
commit
633baab430
1 changed files with 41 additions and 5 deletions
  1. 41 5
      modules/module_users.go

+ 41 - 5
modules/module_users.go

@@ -367,11 +367,47 @@ func (this *Modules) RegisterAction_UsersDelete() *Action {
 			return
 		}
 
-		// Delete user
-		_, err := wrap.DB.Exec(
-			`DELETE FROM users WHERE id = ? and id <> 1;`,
-			utils.StrToInt(pf_id),
-		)
+		// Start transaction with table lock
+		_, err := wrap.DB.Exec("LOCK TABLES blog_cats WRITE, blog_posts WRITE, pages WRITE, users WRITE;")
+		if err != nil {
+			wrap.MsgError(err.Error())
+			return
+		}
+		tx, err := wrap.DB.Begin()
+		if err != nil {
+			wrap.MsgError(err.Error())
+			return
+		}
+
+		// Update and delete target user
+		if _, err = tx.Exec("UPDATE blog_cats SET user = 1 WHERE user = ?;", pf_id); err != nil {
+			tx.Rollback()
+			wrap.MsgError(err.Error())
+			return
+		}
+		if _, err = tx.Exec("UPDATE blog_posts SET user = 1 WHERE user = ?;", pf_id); err != nil {
+			tx.Rollback()
+			wrap.MsgError(err.Error())
+			return
+		}
+		if _, err = tx.Exec("UPDATE pages SET user = 1 WHERE user = ?;", pf_id); err != nil {
+			tx.Rollback()
+			wrap.MsgError(err.Error())
+			return
+		}
+		if _, err = tx.Exec("DELETE FROM users WHERE id = ? and id > 1;", pf_id); err != nil {
+			tx.Rollback()
+			wrap.MsgError(err.Error())
+			return
+		}
+
+		// Commit all changes and unlock table
+		err = tx.Commit()
+		if err != nil {
+			wrap.MsgError(err.Error())
+			return
+		}
+		_, err = wrap.DB.Exec("UNLOCK TABLES;")
 		if err != nil {
 			wrap.MsgError(err.Error())
 			return