diff --git a/src/backend/sql/triggers/01301_order_item_audit_insert.sql b/src/backend/sql/triggers/01301_order_item_audit_insert.sql new file mode 100644 index 0000000..794f28d --- /dev/null +++ b/src/backend/sql/triggers/01301_order_item_audit_insert.sql @@ -0,0 +1,34 @@ +-- ----------------------------------------------------- +-- Trigger for AFTER INSERT on OrderItem table +-- ----------------------------------------------------- +CREATE TRIGGER `trg_OrderItem_Audit_Insert` + AFTER INSERT ON `OrderItem` + FOR EACH ROW +BEGIN + INSERT INTO `AuditLog` ( + `TableName`, + `RowPKValue`, + `OperationType`, + `ChangedByUserID`, + `OldValues_JSON`, + `NewValues_JSON` + ) + VALUES ( + 'OrderItem', + CAST(NEW.OrderItemID AS CHAR), -- 主键值 + 'INSERT', + @actor_id, -- 从会话变量获取操作者ID + NULL, -- INSERT 操作没有旧值 + JSON_OBJECT( + 'OrderItemID', NEW.OrderItemID, + 'OrderID', NEW.OrderID, + 'ProductID', NEW.ProductID, + 'StoreID', NEW.StoreID, + 'Quantity', NEW.Quantity, + 'PriceAtPurchase', NEW.PriceAtPurchase, + 'ProductNameAtPurchase', NEW.ProductNameAtPurchase, + 'ProductImageURLAtPurchase', NEW.ProductImageURLAtPurchase, + 'Subtotal', NEW.Subtotal + ) + ); +END; diff --git a/src/backend/sql/triggers/01302_order_item_audit_update.sql b/src/backend/sql/triggers/01302_order_item_audit_update.sql new file mode 100644 index 0000000..2f30ebd --- /dev/null +++ b/src/backend/sql/triggers/01302_order_item_audit_update.sql @@ -0,0 +1,55 @@ +-- ----------------------------------------------------- +-- Trigger for AFTER UPDATE on OrderItem table +-- ----------------------------------------------------- +CREATE TRIGGER `trg_OrderItem_Audit_Update` + AFTER UPDATE ON `OrderItem` + FOR EACH ROW +BEGIN + -- 只有当受监控的业务字段实际发生变化时才记录日志 + IF OLD.OrderID <=> NEW.OrderID OR + OLD.ProductID <=> NEW.ProductID OR + OLD.StoreID <=> NEW.StoreID OR + OLD.Quantity <=> NEW.Quantity OR + OLD.PriceAtPurchase <=> NEW.PriceAtPurchase OR + OLD.ProductNameAtPurchase <=> NEW.ProductNameAtPurchase OR + OLD.ProductImageURLAtPurchase <=> NEW.ProductImageURLAtPurchase OR + OLD.Subtotal <=> NEW.Subtotal + THEN + INSERT INTO `AuditLog` ( + `TableName`, + `RowPKValue`, + `OperationType`, + `ChangedByUserID`, + `OldValues_JSON`, + `NewValues_JSON` + ) + VALUES ( + 'OrderItem', + CAST(NEW.OrderItemID AS CHAR), -- 主键值 + 'UPDATE', + @actor_id, + JSON_OBJECT( + 'OrderItemID', OLD.OrderItemID, + 'OrderID', OLD.OrderID, + 'ProductID', OLD.ProductID, + 'StoreID', OLD.StoreID, + 'Quantity', OLD.Quantity, + 'PriceAtPurchase', OLD.PriceAtPurchase, + 'ProductNameAtPurchase', OLD.ProductNameAtPurchase, + 'ProductImageURLAtPurchase', OLD.ProductImageURLAtPurchase, + 'Subtotal', OLD.Subtotal + ), + JSON_OBJECT( + 'OrderItemID', NEW.OrderItemID, + 'OrderID', NEW.OrderID, + 'ProductID', NEW.ProductID, + 'StoreID', NEW.StoreID, + 'Quantity', NEW.Quantity, + 'PriceAtPurchase', NEW.PriceAtPurchase, + 'ProductNameAtPurchase', NEW.ProductNameAtPurchase, + 'ProductImageURLAtPurchase', NEW.ProductImageURLAtPurchase, + 'Subtotal', NEW.Subtotal + ) + ); + END IF; +END; diff --git a/src/backend/sql/triggers/01303_order_item_audit_delete.sql b/src/backend/sql/triggers/01303_order_item_audit_delete.sql new file mode 100644 index 0000000..3de0441 --- /dev/null +++ b/src/backend/sql/triggers/01303_order_item_audit_delete.sql @@ -0,0 +1,34 @@ +-- ----------------------------------------------------- +-- Trigger for AFTER DELETE on OrderItem table +-- ----------------------------------------------------- +CREATE TRIGGER `trg_OrderItem_Audit_Delete` + AFTER DELETE ON `OrderItem` + FOR EACH ROW +BEGIN + INSERT INTO `AuditLog` ( + `TableName`, + `RowPKValue`, + `OperationType`, + `ChangedByUserID`, + `OldValues_JSON`, + `NewValues_JSON` + ) + VALUES ( + 'OrderItem', + CAST(OLD.OrderItemID AS CHAR), + 'DELETE', + @actor_id, + JSON_OBJECT( + 'OrderItemID', OLD.OrderItemID, + 'OrderID', OLD.OrderID, + 'ProductID', OLD.ProductID, + 'StoreID', OLD.StoreID, + 'Quantity', OLD.Quantity, + 'PriceAtPurchase', OLD.PriceAtPurchase, + 'ProductNameAtPurchase', OLD.ProductNameAtPurchase, + 'ProductImageURLAtPurchase', OLD.ProductImageURLAtPurchase, + 'Subtotal', OLD.Subtotal + ), + NULL -- DELETE 操作没有新值 + ); +END;