Database updates

This commit is contained in:
ivan-pelly
2026-02-21 14:46:48 -08:00
parent fb1eea6d08
commit b2114fbcd2
6 changed files with 40 additions and 72 deletions
@@ -10,12 +10,10 @@ CREATE DEFINER=`root`@`%` PROCEDURE `sp_RefreshToken_Replace`(
IN p_user_agent VARCHAR(512) IN p_user_agent VARCHAR(512)
) )
BEGIN BEGIN
-- Revoke the old token
UPDATE refresh_token UPDATE refresh_token
SET revoked_at = UTC_TIMESTAMP() SET revoked_at = UTC_TIMESTAMP()
WHERE id_refresh_token = p_old_token_id WHERE id_refresh_token = p_old_token_id
AND revoked_at IS NULL; AND revoked_at IS NULL;
-- Create the new token
INSERT INTO refresh_token INSERT INTO refresh_token
( (
id_refresh_token, id_refresh_token,
@@ -36,7 +34,6 @@ BEGIN
p_device_info, p_device_info,
p_user_agent p_user_agent
); );
-- Link old token to new one
UPDATE refresh_token UPDATE refresh_token
SET replaced_by_token_id = p_id_refresh_token SET replaced_by_token_id = p_id_refresh_token
WHERE id_refresh_token = p_old_token_id; WHERE id_refresh_token = p_old_token_id;
+14 -35
View File
@@ -1,22 +1,13 @@
DELIMITER ;; DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `sp_SeedData_1`() CREATE DEFINER=`root`@`%` PROCEDURE `sp_SeedData_1`()
BEGIN BEGIN
-- =============================================================================
-- Seed Data Script - create minimal set of working data
-- =============================================================================
-- =============================================================================
-- 1. SCHOOL DISTRICT -- 1. SCHOOL DISTRICT
-- =============================================================================
INSERT INTO school_district (id_school_district, name, contact_email, created_at) 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()); VALUES ('a1b2c3d4-0001-4000-a000-000000000001', 'Parent District', 'contact@dummydistrict.edu', UTC_TIMESTAMP());
-- ============================================================================= -- 2. PROGRAM
-- 2. PROGRAM (child of the district above)
-- =============================================================================
INSERT INTO program (id_program, id_school_district, name, description, created_at) 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()); VALUES ('b2c3d4e5-0001-4000-a000-000000000001', 'a1b2c3d4-0001-4000-a000-000000000001', 'Test Program', 'A sample program for testing', UTC_TIMESTAMP());
-- =============================================================================
-- 3. ROLES -- 3. ROLES
-- =============================================================================
INSERT INTO role (id_role, name, internal_name, description, created_at) VALUES 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-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-0002-4000-a000-000000000001', 'District Admin', 'district_admin', 'District-level administration', UTC_TIMESTAMP()),
@@ -24,31 +15,19 @@ BEGIN
('c3d4e5f6-0004-4000-a000-000000000001', 'Teacher', 'teacher', 'Teacher role', 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-0005-4000-a000-000000000001', 'Paraeducator', 'paraeducator', 'Paraeducator role', UTC_TIMESTAMP()),
('c3d4e5f6-0006-4000-a000-000000000001', 'Student', 'student', 'Student role', UTC_TIMESTAMP()); ('c3d4e5f6-0006-4000-a000-000000000001', 'Student', 'student', 'Student role', UTC_TIMESTAMP());
-- ============================================================================= -- 4. USERS (no id_role)
-- 4. USERS ? 2 Teachers + 1 Paraeducator INSERT INTO user (id_user, email, name, password_hash, password_salt, created_at)
-- ============================================================================= VALUES ('d4e5f6a7-0001-4000-a000-000000000001', 'teacher1@example.com', 'Teacher One', NULL, NULL, UTC_TIMESTAMP());
-- Teacher 1 INSERT INTO user (id_user, email, name, password_hash, password_salt, created_at)
INSERT INTO user (id_user, id_role, email, name, password_hash, password_salt, created_at) VALUES ('d4e5f6a7-0002-4000-a000-000000000001', 'teacher2@example.com', 'Teacher Two', NULL, NULL, UTC_TIMESTAMP());
VALUES ('d4e5f6a7-0001-4000-a000-000000000001', 'c3d4e5f6-0004-4000-a000-000000000001', INSERT INTO user (id_user, email, name, password_hash, password_salt, created_at)
'teacher1@example.com', 'Teacher One', NULL, NULL, UTC_TIMESTAMP()); VALUES ('d4e5f6a7-0003-4000-a000-000000000001', 'para1@example.com', 'Para One', NULL, NULL, UTC_TIMESTAMP());
-- Teacher 2 -- 5. USER_PROGRAM (now includes id_role)
INSERT INTO user (id_user, id_role, email, name, password_hash, password_salt, created_at) INSERT INTO user_program (id_user_program, id_user, id_program, id_role, is_primary, status, joined_at) VALUES
VALUES ('d4e5f6a7-0002-4000-a000-000000000001', 'c3d4e5f6-0004-4000-a000-000000000001', ('e5f6a7b8-0001-4000-a000-000000000001', 'd4e5f6a7-0001-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'c3d4e5f6-0004-4000-a000-000000000001', 1, 'active', UTC_TIMESTAMP()),
'teacher2@example.com', 'Teacher Two', NULL, NULL, UTC_TIMESTAMP()); ('e5f6a7b8-0002-4000-a000-000000000001', 'd4e5f6a7-0002-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'c3d4e5f6-0004-4000-a000-000000000001', 1, 'active', UTC_TIMESTAMP()),
-- Paraeducator 1 ('e5f6a7b8-0003-4000-a000-000000000001', 'd4e5f6a7-0003-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'c3d4e5f6-0005-4000-a000-000000000001', 1, 'active', UTC_TIMESTAMP());
INSERT INTO user (id_user, id_role, email, name, password_hash, password_salt, created_at) -- 6. STUDENTS
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 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-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-0002-4000-a000-000000000001', 'b2c3d4e5-0001-4000-a000-000000000001', 'STU-002', 1, '2025-09-01', '2029-06-15', UTC_TIMESTAMP()),
+1 -5
View File
@@ -3,18 +3,14 @@ CREATE DEFINER=`root`@`%` PROCEDURE `sp_User_GetByEmail`(IN p_email VARCHAR(255)
BEGIN BEGIN
SELECT SELECT
u.id_user, u.id_user,
u.id_role,
u.email, u.email,
u.name, u.name,
u.password_hash, u.password_hash,
u.password_salt, u.password_salt,
u.failed_login_attempts, u.failed_login_attempts,
u.locked_until, u.locked_until,
u.created_at, u.created_at
r.internal_name AS role_internal_name,
r.name AS role_display_name
FROM `user` u FROM `user` u
LEFT JOIN role r ON u.id_role = r.id_role
WHERE u.email = p_email WHERE u.email = p_email
LIMIT 1; LIMIT 1;
END;; END;;
+1 -5
View File
@@ -3,18 +3,14 @@ CREATE DEFINER=`root`@`%` PROCEDURE `sp_User_GetById`(IN p_id_user CHAR(36))
BEGIN BEGIN
SELECT SELECT
u.id_user, u.id_user,
u.id_role,
u.email, u.email,
u.name, u.name,
u.password_hash, u.password_hash,
u.password_salt, u.password_salt,
u.failed_login_attempts, u.failed_login_attempts,
u.locked_until, u.locked_until,
u.created_at, u.created_at
r.internal_name AS role_internal_name,
r.name AS role_display_name
FROM `user` u FROM `user` u
LEFT JOIN role r ON u.id_role = r.id_role
WHERE u.id_user = p_id_user WHERE u.id_user = p_id_user
LIMIT 1; LIMIT 1;
END;; END;;
+1 -4
View File
@@ -1,6 +1,5 @@
CREATE TABLE `user` ( CREATE TABLE `user` (
`id_user` char(36) NOT NULL, `id_user` char(36) NOT NULL,
`id_role` char(36) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL,
`password_hash` varchar(255) DEFAULT NULL, `password_hash` varchar(255) DEFAULT NULL,
@@ -9,7 +8,5 @@ CREATE TABLE `user` (
`failed_login_attempts` int DEFAULT '0', `failed_login_attempts` int DEFAULT '0',
`locked_until` timestamp NULL DEFAULT NULL, `locked_until` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id_user`), PRIMARY KEY (`id_user`)
KEY `user_ibfk_1` (`id_role`),
CONSTRAINT `user_ibfk_1` FOREIGN KEY (`id_role`) REFERENCES `role` (`id_role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+4 -1
View File
@@ -2,12 +2,15 @@ CREATE TABLE `user_program` (
`id_user_program` char(36) NOT NULL, `id_user_program` char(36) NOT NULL,
`id_user` char(36) DEFAULT NULL, `id_user` char(36) DEFAULT NULL,
`id_program` char(36) DEFAULT NULL, `id_program` char(36) DEFAULT NULL,
`id_role` char(36) DEFAULT NULL,
`is_primary` tinyint(1) DEFAULT '0', `is_primary` tinyint(1) DEFAULT '0',
`status` varchar(20) DEFAULT 'active', `status` varchar(20) DEFAULT 'active',
`joined_at` timestamp NULL DEFAULT NULL, `joined_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id_user_program`), PRIMARY KEY (`id_user_program`),
UNIQUE KEY `uq_user_program` (`id_user`,`id_program`), UNIQUE KEY `uq_user_program` (`id_user`,`id_program`),
KEY `idx_id_program` (`id_program`), KEY `idx_id_program` (`id_program`),
KEY `idx_user_program_role` (`id_role`),
CONSTRAINT `user_program_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `user` (`id_user`), CONSTRAINT `user_program_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `user` (`id_user`),
CONSTRAINT `user_program_ibfk_2` FOREIGN KEY (`id_program`) REFERENCES `program` (`id_program`) CONSTRAINT `user_program_ibfk_2` FOREIGN KEY (`id_program`) REFERENCES `program` (`id_program`),
CONSTRAINT `user_program_ibfk_3` FOREIGN KEY (`id_role`) REFERENCES `role` (`id_role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;