CREATE TABLE IF NOT EXISTS `users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(255) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, `role_id` INT NOT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `roles` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL UNIQUE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `permissions` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL UNIQUE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `role_permissions` ( `role_id` INT NOT NULL, `permission_id` INT NOT NULL, PRIMARY KEY (`role_id`, `permission_id`), FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE CASCADE, FOREIGN KEY (`permission_id`) REFERENCES `permissions`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT IGNORE INTO `roles` (`name`) VALUES ('admin'), ('manager'), ('sales'), ('clerk'); INSERT IGNORE INTO `permissions` (`name`) VALUES ('create_application'), ('edit_application'), ('approve_application'), ('view_applications'), ('delete_application'), ('manage_users'), ('manage_roles'), ('upload_files'), ('delete_files'); INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`) SELECT (SELECT id FROM roles WHERE name = 'admin'), id FROM permissions; INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`) SELECT (SELECT id FROM roles WHERE name = 'manager'), p.id FROM permissions p WHERE p.name IN ('create_application', 'edit_application', 'approve_application', 'view_applications', 'delete_application', 'upload_files', 'delete_files'); INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`) SELECT (SELECT id FROM roles WHERE name = 'sales'), p.id FROM permissions p WHERE p.name IN ('create_application', 'edit_application', 'view_applications', 'upload_files', 'delete_files'); INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`) SELECT (SELECT id FROM roles WHERE name = 'clerk'), p.id FROM permissions p WHERE p.name = 'view_applications'; INSERT IGNORE INTO `users` (`username`, `password`, `role_id`) VALUES ('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', (SELECT id FROM roles WHERE name = 'admin')); -- password is 'password'