Database updates

This commit is contained in:
ivan-pelly
2026-02-21 08:01:29 -08:00
parent fa0903e7be
commit c9ed34ddbb
49 changed files with 699 additions and 331 deletions
+8
View File
@@ -0,0 +1,8 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Goal_Delete`(IN p_id_goal CHAR(36))
BEGIN
DELETE FROM goal
WHERE id_goal = p_id_goal;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
+17
View File
@@ -0,0 +1,17 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Goal_GetAll`()
BEGIN
SELECT
id_goal,
id_goal_parent,
id_student,
id_user_created,
title,
description,
category,
created_at,
updated_at
FROM goal
ORDER BY id_goal;
END;;
DELIMITER ;
+18
View File
@@ -0,0 +1,18 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Goal_GetById`(IN p_id_goal CHAR(36))
BEGIN
SELECT
id_goal,
id_goal_parent,
id_student,
id_user_created,
title,
description,
category,
created_at,
updated_at
FROM goal
WHERE id_goal = p_id_goal
LIMIT 1;
END;;
DELIMITER ;
+50
View File
@@ -0,0 +1,50 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Goal_Insert`(
IN p_id_goal CHAR(36),
IN p_id_goal_parent CHAR(36),
IN p_id_student CHAR(36),
IN p_id_user_created CHAR(36),
IN p_title VARCHAR(255),
IN p_description TEXT,
IN p_category VARCHAR(100)
)
BEGIN
INSERT INTO goal
(
id_goal,
id_goal_parent,
id_student,
id_user_created,
title,
description,
category,
created_at,
updated_at
)
VALUES
(
p_id_goal,
p_id_goal_parent,
p_id_student,
p_id_user_created,
p_title,
p_description,
p_category,
UTC_TIMESTAMP(),
UTC_TIMESTAMP()
);
SELECT
id_goal,
id_goal_parent,
id_student,
id_user_created,
title,
description,
category,
created_at,
updated_at
FROM goal
WHERE id_goal = p_id_goal
LIMIT 1;
END;;
DELIMITER ;
+24
View File
@@ -0,0 +1,24 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Goal_Update`(
IN p_id_goal CHAR(36),
IN p_id_goal_parent CHAR(36),
IN p_id_student CHAR(36),
IN p_id_user_created CHAR(36),
IN p_title VARCHAR(255),
IN p_description TEXT,
IN p_category VARCHAR(100)
)
BEGIN
UPDATE goal
SET
id_goal_parent = COALESCE(p_id_goal_parent, id_goal_parent),
id_student = COALESCE(p_id_student, id_student),
id_user_created = COALESCE(p_id_user_created, id_user_created),
title = COALESCE(p_title, title),
description = COALESCE(p_description, description),
category = COALESCE(p_category, category),
updated_at = UTC_TIMESTAMP()
WHERE id_goal = p_id_goal;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
@@ -0,0 +1,8 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Program_Delete`(IN p_id_program CHAR(36))
BEGIN
DELETE FROM program
WHERE id_program = p_id_program;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
@@ -0,0 +1,13 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Program_GetAll`()
BEGIN
SELECT
id_program,
id_school_district,
name,
description,
created_at
FROM program
ORDER BY id_program;
END;;
DELIMITER ;
@@ -0,0 +1,14 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Program_GetById`(IN p_id_program CHAR(36))
BEGIN
SELECT
id_program,
id_school_district,
name,
description,
created_at
FROM program
WHERE id_program = p_id_program
LIMIT 1;
END;;
DELIMITER ;
@@ -0,0 +1,35 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Program_Insert`(
IN p_id_program CHAR(36),
IN p_id_school_district CHAR(36),
IN p_name VARCHAR(255),
IN p_description TEXT
)
BEGIN
INSERT INTO program
(
id_program,
id_school_district,
name,
description,
created_at
)
VALUES
(
p_id_program,
p_id_school_district,
p_name,
p_description,
UTC_TIMESTAMP()
);
SELECT
id_program,
id_school_district,
name,
description,
created_at
FROM program
WHERE id_program = p_id_program
LIMIT 1;
END;;
DELIMITER ;
@@ -0,0 +1,17 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Program_Update`(
IN p_id_program CHAR(36),
IN p_id_school_district CHAR(36),
IN p_name VARCHAR(255),
IN p_description TEXT
)
BEGIN
UPDATE program
SET
id_school_district = COALESCE(p_id_school_district, id_school_district),
name = COALESCE(p_name, name),
description = COALESCE(p_description, description)
WHERE id_program = p_id_program;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
@@ -0,0 +1,8 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_ProgressEvent_Delete`(IN p_id_progress_event CHAR(36))
BEGIN
DELETE FROM progress_event
WHERE id_progress_event = p_id_progress_event;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
@@ -0,0 +1,16 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_ProgressEvent_GetAll`()
BEGIN
SELECT
id_progress_event,
id_student,
id_goal,
id_user_created,
content,
is_sensitive,
created_at,
updated_at
FROM progress_event
ORDER BY id_progress_event;
END;;
DELIMITER ;
@@ -0,0 +1,17 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_ProgressEvent_GetById`(IN p_id_progress_event CHAR(36))
BEGIN
SELECT
id_progress_event,
id_student,
id_goal,
id_user_created,
content,
is_sensitive,
created_at,
updated_at
FROM progress_event
WHERE id_progress_event = p_id_progress_event
LIMIT 1;
END;;
DELIMITER ;
@@ -0,0 +1,46 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_ProgressEvent_Insert`(
IN p_id_progress_event CHAR(36),
IN p_id_student 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)
)
BEGIN
INSERT INTO progress_event
(
id_progress_event,
id_student,
id_goal,
id_user_created,
content,
is_sensitive,
created_at,
updated_at
)
VALUES
(
p_id_progress_event,
p_id_student,
p_id_goal,
p_id_user_created,
p_content,
p_is_sensitive,
UTC_TIMESTAMP(),
UTC_TIMESTAMP()
);
SELECT
id_progress_event,
id_student,
id_goal,
id_user_created,
content,
is_sensitive,
created_at,
updated_at
FROM progress_event
WHERE id_progress_event = p_id_progress_event
LIMIT 1;
END;;
DELIMITER ;
@@ -0,0 +1,22 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_ProgressEvent_Update`(
IN p_id_progress_event CHAR(36),
IN p_id_student 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)
)
BEGIN
UPDATE progress_event
SET
id_student = COALESCE(p_id_student, id_student),
id_goal = COALESCE(p_id_goal, id_goal),
id_user_created = COALESCE(p_id_user_created, id_user_created),
content = COALESCE(p_content, content),
is_sensitive = COALESCE(p_is_sensitive, is_sensitive),
updated_at = UTC_TIMESTAMP()
WHERE id_progress_event = p_id_progress_event;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
@@ -0,0 +1,34 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_RefreshToken_Create`(
IN p_id_refresh_token CHAR(36),
IN p_id_user CHAR(36),
IN p_token_hash VARCHAR(512),
IN p_token_salt VARCHAR(512),
IN p_expires_in_seconds INT,
IN p_device_info VARCHAR(255),
IN p_user_agent VARCHAR(512)
)
BEGIN
INSERT INTO refresh_token
(
id_refresh_token,
id_user,
token_hash,
token_salt,
expires_at,
device_info,
user_agent
)
VALUES
(
p_id_refresh_token,
p_id_user,
p_token_hash,
p_token_salt,
DATE_ADD(UTC_TIMESTAMP(), INTERVAL p_expires_in_seconds SECOND),
p_device_info,
p_user_agent
);
SELECT p_id_refresh_token AS id_refresh_token;
END;;
DELIMITER ;
@@ -0,0 +1,21 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_RefreshToken_GetById`(IN p_id_refresh_token CHAR(36))
BEGIN
SELECT
id_refresh_token,
id_user,
token_hash,
token_salt,
expires_at,
last_used_at,
revoked_at,
device_info,
user_agent,
replaced_by_token_id,
created_at,
updated_at
FROM refresh_token
WHERE id_refresh_token = p_id_refresh_token
LIMIT 1;
END;;
DELIMITER ;
@@ -0,0 +1,45 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_RefreshToken_Replace`(
IN p_old_token_id CHAR(36),
IN p_id_refresh_token CHAR(36),
IN p_id_user CHAR(36),
IN p_token_hash VARCHAR(512),
IN p_token_salt VARCHAR(512),
IN p_expires_in_seconds INT,
IN p_device_info VARCHAR(255),
IN p_user_agent VARCHAR(512)
)
BEGIN
-- Revoke the old token
UPDATE refresh_token
SET revoked_at = UTC_TIMESTAMP()
WHERE id_refresh_token = p_old_token_id
AND revoked_at IS NULL;
-- Create the new token
INSERT INTO refresh_token
(
id_refresh_token,
id_user,
token_hash,
token_salt,
expires_at,
device_info,
user_agent
)
VALUES
(
p_id_refresh_token,
p_id_user,
p_token_hash,
p_token_salt,
DATE_ADD(UTC_TIMESTAMP(), INTERVAL p_expires_in_seconds SECOND),
p_device_info,
p_user_agent
);
-- Link old token to new one
UPDATE refresh_token
SET replaced_by_token_id = p_id_refresh_token
WHERE id_refresh_token = p_old_token_id;
SELECT p_id_refresh_token AS id_refresh_token;
END;;
DELIMITER ;
@@ -0,0 +1,10 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_RefreshToken_Revoke`(IN p_id_refresh_token CHAR(36))
BEGIN
UPDATE refresh_token
SET revoked_at = UTC_TIMESTAMP()
WHERE id_refresh_token = p_id_refresh_token
AND revoked_at IS NULL;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
@@ -0,0 +1,8 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_SchoolDistrict_Delete`(IN p_id_school_district CHAR(36))
BEGIN
DELETE FROM school_district
WHERE id_school_district = p_id_school_district;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
@@ -0,0 +1,12 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_SchoolDistrict_GetAll`()
BEGIN
SELECT
id_school_district,
name,
contact_email,
created_at
FROM school_district
ORDER BY id_school_district;
END;;
DELIMITER ;
@@ -0,0 +1,13 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_SchoolDistrict_GetById`(IN p_id_school_district CHAR(36))
BEGIN
SELECT
id_school_district,
name,
contact_email,
created_at
FROM school_district
WHERE id_school_district = p_id_school_district
LIMIT 1;
END;;
DELIMITER ;
@@ -0,0 +1,31 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_SchoolDistrict_Insert`(
IN p_id_school_district CHAR(36),
IN p_name VARCHAR(255),
IN p_contact_email VARCHAR(255)
)
BEGIN
INSERT INTO school_district
(
id_school_district,
name,
contact_email,
created_at
)
VALUES
(
p_id_school_district,
p_name,
p_contact_email,
UTC_TIMESTAMP()
);
SELECT
id_school_district,
name,
contact_email,
created_at
FROM school_district
WHERE id_school_district = p_id_school_district
LIMIT 1;
END;;
DELIMITER ;
@@ -0,0 +1,15 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_SchoolDistrict_Update`(
IN p_id_school_district CHAR(36),
IN p_name VARCHAR(255),
IN p_contact_email VARCHAR(255)
)
BEGIN
UPDATE school_district
SET
name = COALESCE(p_name, name),
contact_email = COALESCE(p_contact_email, contact_email)
WHERE id_school_district = p_id_school_district;
SELECT ROW_COUNT() AS rows_affected;
END;;
DELIMITER ;
+59
View File
@@ -0,0 +1,59 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_SeedData_1`()
BEGIN
-- =============================================================================
-- Seed Data Script - create minimal set of working data
-- =============================================================================
-- =============================================================================
-- 1. SCHOOL DISTRICT
-- =============================================================================
INSERT INTO school_district (id_school_district, name, contact_email, created_at)
VALUES ('a1b2c3d4-0001-4000-a000-000000000001', 'Parent District', 'contact@dummydistrict.edu', UTC_TIMESTAMP());
-- =============================================================================
-- 2. PROGRAM (child of the district above)
-- =============================================================================
INSERT INTO program (id_program, id_school_district, name, description, created_at)
VALUES ('b2c3d4e5-0001-4000-a000-000000000001', 'a1b2c3d4-0001-4000-a000-000000000001', 'Test Program', 'A sample program for testing', UTC_TIMESTAMP());
-- =============================================================================
-- 3. ROLES
-- =============================================================================
INSERT INTO role (id_role, name, internal_name, description, created_at) VALUES
('c3d4e5f6-0001-4000-a000-000000000001', 'Super Admin', 'super_admin', 'Full system access', UTC_TIMESTAMP()),
('c3d4e5f6-0002-4000-a000-000000000001', 'District Admin', 'district_admin', 'District-level administration', UTC_TIMESTAMP()),
('c3d4e5f6-0003-4000-a000-000000000001', 'Program Admin', 'program_admin', 'Program-level administration', UTC_TIMESTAMP()),
('c3d4e5f6-0004-4000-a000-000000000001', 'Teacher', 'teacher', 'Teacher role', UTC_TIMESTAMP()),
('c3d4e5f6-0005-4000-a000-000000000001', 'Paraeducator', 'paraeducator', 'Paraeducator role', UTC_TIMESTAMP()),
('c3d4e5f6-0006-4000-a000-000000000001', 'Student', 'student', 'Student role', UTC_TIMESTAMP());
-- =============================================================================
-- 4. USERS ? 2 Teachers + 1 Paraeducator
-- =============================================================================
-- Teacher 1
INSERT INTO user (id_user, id_role, email, name, password_hash, password_salt, created_at)
VALUES ('d4e5f6a7-0001-4000-a000-000000000001', 'c3d4e5f6-0004-4000-a000-000000000001',
'teacher1@example.com', 'Teacher One', NULL, NULL, UTC_TIMESTAMP());
-- Teacher 2
INSERT INTO user (id_user, id_role, email, name, password_hash, password_salt, created_at)
VALUES ('d4e5f6a7-0002-4000-a000-000000000001', 'c3d4e5f6-0004-4000-a000-000000000001',
'teacher2@example.com', 'Teacher Two', NULL, NULL, UTC_TIMESTAMP());
-- Paraeducator 1
INSERT INTO user (id_user, id_role, email, name, password_hash, password_salt, created_at)
VALUES ('d4e5f6a7-0003-4000-a000-000000000001', 'c3d4e5f6-0005-4000-a000-000000000001',
'para1@example.com', 'Para One', NULL, NULL, UTC_TIMESTAMP());
-- =============================================================================
-- 5. USER_PROGRAM ? link all 3 users to the program
-- =============================================================================
INSERT INTO user_program (id_user_program, id_user, id_program, is_primary, status, joined_at) VALUES
('e5f6a7b8-0001-4000-a000-000000000001', 'd4e5f6a7-0001-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 1, 'active', UTC_TIMESTAMP()),
('e5f6a7b8-0002-4000-a000-000000000001', 'd4e5f6a7-0002-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 1, 'active', UTC_TIMESTAMP()),
('e5f6a7b8-0003-4000-a000-000000000001', 'd4e5f6a7-0003-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 1, 'active', UTC_TIMESTAMP());
-- =============================================================================
-- 6. STUDENTS ? 5 students under the program
-- =============================================================================
INSERT INTO student (id_student, id_program, identifier, program_year, enrollment_date, expected_grad, created_at) VALUES
('f6a7b8c9-0001-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'STU-001', 1, '2025-09-01', '2029-06-15', UTC_TIMESTAMP()),
('f6a7b8c9-0002-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'STU-002', 1, '2025-09-01', '2029-06-15', UTC_TIMESTAMP()),
('f6a7b8c9-0003-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'STU-003', 2, '2024-09-01', '2028-06-15', UTC_TIMESTAMP()),
('f6a7b8c9-0004-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'STU-004', 2, '2024-09-01', '2028-06-15', UTC_TIMESTAMP()),
('f6a7b8c9-0005-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'STU-005', 3, '2023-09-01', '2027-06-15', UTC_TIMESTAMP());
END;;
DELIMITER ;
+3 -7
View File
@@ -1,12 +1,8 @@
DROP PROCEDURE IF EXISTS sp_Student_Delete;
DELIMITER $$
CREATE PROCEDURE sp_Student_Delete(IN p_id_student INT)
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Student_Delete`(IN p_id_student CHAR(36))
BEGIN
DELETE FROM student
WHERE id_student = p_id_student;
SELECT ROW_COUNT() AS rows_affected;
END$$
END;;
DELIMITER ;
+3 -6
View File
@@ -1,7 +1,5 @@
DROP PROCEDURE IF EXISTS sp_Student_GetAll;
DELIMITER $$
CREATE PROCEDURE sp_Student_GetAll()
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Student_GetAll`()
BEGIN
SELECT
id_student,
@@ -13,6 +11,5 @@ BEGIN
created_at
FROM student
ORDER BY id_student;
END$$
END;;
DELIMITER ;
+3 -6
View File
@@ -1,7 +1,5 @@
DROP PROCEDURE IF EXISTS sp_Student_GetById;
DELIMITER $$
CREATE PROCEDURE sp_Student_GetById(IN p_id_student INT)
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Student_GetById`(IN p_id_student CHAR(36))
BEGIN
SELECT
id_student,
@@ -14,6 +12,5 @@ BEGIN
FROM student
WHERE id_student = p_id_student
LIMIT 1;
END$$
END;;
DELIMITER ;
+5 -9
View File
@@ -1,9 +1,7 @@
DROP PROCEDURE IF EXISTS sp_Student_Insert;
DELIMITER $$
CREATE PROCEDURE sp_Student_Insert(
IN p_id_student INT,
IN p_id_program INT,
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Student_Insert`(
IN p_id_student CHAR(36),
IN p_id_program CHAR(36),
IN p_identifier VARCHAR(50),
IN p_program_year INT,
IN p_enrollment_date DATE,
@@ -30,7 +28,6 @@ BEGIN
p_expected_grad,
UTC_TIMESTAMP()
);
SELECT
id_student,
id_program,
@@ -42,6 +39,5 @@ BEGIN
FROM student
WHERE id_student = p_id_student
LIMIT 1;
END$$
END;;
DELIMITER ;
+5 -9
View File
@@ -1,9 +1,7 @@
DROP PROCEDURE IF EXISTS sp_Student_Update;
DELIMITER $$
CREATE PROCEDURE sp_Student_Update(
IN p_id_student INT,
IN p_id_program INT,
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_Student_Update`(
IN p_id_student CHAR(36),
IN p_id_program CHAR(36),
IN p_identifier VARCHAR(50),
IN p_program_year INT,
IN p_enrollment_date DATE,
@@ -18,8 +16,6 @@ BEGIN
enrollment_date = COALESCE(p_enrollment_date, enrollment_date),
expected_grad = COALESCE(p_expected_grad, expected_grad)
WHERE id_student = p_id_student;
SELECT ROW_COUNT() AS rows_affected;
END$$
END;;
DELIMITER ;
@@ -0,0 +1,21 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_User_GetByEmail`(IN p_email VARCHAR(255))
BEGIN
SELECT
u.id_user,
u.id_role,
u.email,
u.name,
u.password_hash,
u.password_salt,
u.failed_login_attempts,
u.locked_until,
u.created_at,
r.internal_name AS role_internal_name,
r.name AS role_display_name
FROM `user` u
LEFT JOIN role r ON u.id_role = r.id_role
WHERE u.email = p_email
LIMIT 1;
END;;
DELIMITER ;
+21
View File
@@ -0,0 +1,21 @@
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_User_GetById`(IN p_id_user INT)
BEGIN
SELECT
u.id_user,
u.id_role,
u.email,
u.name,
u.password_hash,
u.password_salt,
u.failed_login_attempts,
u.locked_until,
u.created_at,
r.internal_name AS role_internal_name,
r.name AS role_display_name
FROM `user` u
LEFT JOIN role r ON u.id_role = r.id_role
WHERE u.id_user = p_id_user
LIMIT 1;
END;;
DELIMITER ;