mirror of
https://github.com/opelly27/WinStudentGoalTracker.git
synced 2026-05-20 05:17:41 +00:00
63 lines
2.1 KiB
SQL
63 lines
2.1 KiB
SQL
DELIMITER ;;
|
|
CREATE DEFINER=`root`@`%` PROCEDURE `sp_ProgressEvent_Save`(
|
|
IN p_id_progress_event CHAR(36),
|
|
IN p_id_goal CHAR(36),
|
|
IN p_id_user_created CHAR(36),
|
|
IN p_content TEXT,
|
|
IN p_is_sensitive TINYINT(1),
|
|
IN p_is_new TINYINT(1),
|
|
IN p_benchmark_ids TEXT
|
|
)
|
|
BEGIN
|
|
-- Insert or update the progress event
|
|
IF p_is_new = 1 THEN
|
|
INSERT INTO progress_event
|
|
(
|
|
id_progress_event,
|
|
id_goal,
|
|
id_user_created,
|
|
content,
|
|
is_sensitive,
|
|
created_at,
|
|
updated_at
|
|
)
|
|
VALUES
|
|
(
|
|
p_id_progress_event,
|
|
p_id_goal,
|
|
p_id_user_created,
|
|
p_content,
|
|
p_is_sensitive,
|
|
UTC_TIMESTAMP(),
|
|
UTC_TIMESTAMP()
|
|
);
|
|
ELSE
|
|
UPDATE progress_event
|
|
SET
|
|
content = COALESCE(p_content, content),
|
|
updated_at = UTC_TIMESTAMP()
|
|
WHERE id_progress_event = p_id_progress_event;
|
|
END IF;
|
|
-- Sync benchmark associations: remove those not in the list
|
|
DELETE FROM progress_event_benchmark
|
|
WHERE id_progress_event = p_id_progress_event
|
|
AND (p_benchmark_ids IS NULL
|
|
OR LENGTH(TRIM(p_benchmark_ids)) = 0
|
|
OR FIND_IN_SET(id_benchmark, p_benchmark_ids) = 0);
|
|
-- Add associations that are in the list but not yet in the table
|
|
IF p_benchmark_ids IS NOT NULL AND LENGTH(TRIM(p_benchmark_ids)) > 0 THEN
|
|
INSERT INTO progress_event_benchmark (id_progress_event_benchmark, id_progress_event, id_benchmark, created_at)
|
|
SELECT UUID(), p_id_progress_event, b.id_benchmark, UTC_TIMESTAMP()
|
|
FROM benchmark b
|
|
WHERE FIND_IN_SET(b.id_benchmark, p_benchmark_ids) > 0
|
|
AND b.id_benchmark NOT IN (
|
|
SELECT peb.id_benchmark
|
|
FROM progress_event_benchmark peb
|
|
WHERE peb.id_progress_event = p_id_progress_event
|
|
);
|
|
END IF;
|
|
-- Return the progress event ID for the caller
|
|
SELECT p_id_progress_event AS progressEventId;
|
|
END;;
|
|
DELIMITER ;
|