Skip to content

Commit 34418fc

Browse files
committed
Upsert for rating
1 parent 276a2da commit 34418fc

File tree

1 file changed

+52
-24
lines changed

1 file changed

+52
-24
lines changed

src/migrations/procedures/ratings/create_rating.sql

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,66 @@ DELIMITER $$
55
CREATE PROCEDURE ratings.create_rating ( IN in_customer_id BINARY(16) , IN in_product_id MEDIUMINT, IN in_title VARCHAR(100), IN in_rating TINYINT, IN in_summary TEXT )
66
BEGIN
77

8-
DECLARE var_order_total_price DECIMAL(13,2);
8+
DECLARE var_exists BOOL;
9+
DECLARE var_rating_id BIGINT;
910

1011
DECLARE EXIT HANDLER FOR SQLEXCEPTION
1112
BEGIN
1213
ROLLBACK;
1314
END;
1415

1516
START TRANSACTION;
17+
18+
SET @var_feedback_id = 0;
19+
20+
SELECT EXISTS(
21+
SELECT id
22+
FROM ratings.feedback
23+
WHERE customer_id = in_customer_id
24+
AND product_id = in_product_id
25+
) INTO var_exists;
26+
27+
IF var_exists THEN
28+
29+
SELECT id INTO var_rating_id
30+
FROM ratings.feedback
31+
WHERE customer_id = in_customer_id
32+
AND product_id = in_product_id;
33+
34+
-- Update a feedback
35+
UPDATE ratings.feedback
36+
SET title = in_title,
37+
rating = in_rating,
38+
summary = in_summary
39+
WHERE id = var_rating_id
40+
AND customer_id = in_customer_id
41+
AND product_id = in_product_id;
42+
43+
SET @var_feedback_id = var_rating_id;
44+
45+
ELSE
46+
47+
-- Creating a feedback
48+
INSERT INTO ratings.feedback (
49+
customer_id,
50+
product_id,
51+
title,
52+
rating,
53+
summary,
54+
helpful
55+
) VALUES (
56+
in_customer_id,
57+
in_product_id,
58+
in_title,
59+
in_rating,
60+
in_summary,
61+
0
62+
);
1663

17-
-- Creating a feedback
18-
INSERT INTO ratings.feedback (
19-
customer_id,
20-
product_id,
21-
title,
22-
rating,
23-
summary,
24-
helpful
25-
) VALUES (
26-
in_customer_id,
27-
in_product_id,
28-
in_title,
29-
in_rating,
30-
in_summary,
31-
0
32-
)
33-
ON DUPLICATE KEY UPDATE
34-
title = in_title,
35-
rating = in_rating,
36-
summary = in_summary;
37-
38-
-- Setting feedback id
39-
SET @var_feedback_id = LAST_INSERT_ID();
64+
-- Setting feedback id
65+
SET @var_feedback_id = LAST_INSERT_ID();
66+
67+
END IF;
4068

4169
COMMIT;
4270

0 commit comments

Comments
 (0)