Browse Source

Delete attached images on product remove

Vova Tkach 5 years ago
parent
commit
197f222fc8
1 changed files with 37 additions and 1 deletions
  1. 37 1
      modules/module_shop_act_delete.go

+ 37 - 1
modules/module_shop_act_delete.go

@@ -1,6 +1,8 @@
 package modules
 package modules
 
 
 import (
 import (
+	"os"
+
 	"golang-fave/engine/wrapper"
 	"golang-fave/engine/wrapper"
 	"golang-fave/utils"
 	"golang-fave/utils"
 )
 )
@@ -29,8 +31,42 @@ func (this *Modules) RegisterAction_ShopDelete() *Action {
 			if _, err := tx.Exec("SELECT product_id FROM shop_filter_product_values WHERE product_id = ? FOR UPDATE;", pf_id); err != nil {
 			if _, err := tx.Exec("SELECT product_id FROM shop_filter_product_values WHERE product_id = ? FOR UPDATE;", pf_id); err != nil {
 				return err
 				return err
 			}
 			}
+			if _, err := tx.Exec("SELECT product_id FROM shop_product_images WHERE product_id = ? FOR UPDATE;", pf_id); err != nil {
+				return err
+			}
+
+			// Delete product attached images
+			rows, err := wrap.DB.Query(
+				`SELECT
+					product_id,
+					filename
+				FROM
+					shop_product_images
+				WHERE
+					product_id = ?
+				;`,
+				pf_id,
+			)
+			if err == nil {
+				defer rows.Close()
+				values := make([]string, 2)
+				scan := make([]interface{}, len(values))
+				for i := range values {
+					scan[i] = &values[i]
+				}
+				for rows.Next() {
+					err = rows.Scan(scan...)
+					if err == nil {
+						target_file_full := wrap.DHtdocs + string(os.PathSeparator) + "products" + string(os.PathSeparator) + "images" + string(os.PathSeparator) + string(values[0]) + string(os.PathSeparator) + string(values[1])
+						os.Remove(target_file_full)
+					}
+				}
+			}
+			if _, err := tx.Exec("DELETE FROM shop_product_images WHERE product_id = ?;", pf_id); err != nil {
+				return err
+			}
 
 
-			// Delete target post with category connection data
+			// Delete target product with category connection data
 			if _, err := tx.Exec("DELETE FROM shop_filter_product_values WHERE product_id = ?;", pf_id); err != nil {
 			if _, err := tx.Exec("DELETE FROM shop_filter_product_values WHERE product_id = ?;", pf_id); err != nil {
 				return err
 				return err
 			}
 			}