CREATE DATABASE IF NOT EXISTS `candidb_main` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; USE `candidb_main`; -- MySQL dump 10.13 Distrib 8.0.38, for Win64 (x86_64) -- -- Host: localhost Database: candidb_main -- ------------------------------------------------------ -- Server version 8.0.39 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!50503 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Dumping events for database 'candidb_main' -- -- -- Dumping routines for database 'candidb_main' -- /*!50003 DROP FUNCTION IF EXISTS `can_create_job` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` FUNCTION `can_create_job`(user_uuid VARCHAR(36)) RETURNS tinyint(1) READS SQL DATA DETERMINISTIC BEGIN DECLARE current_jobs INT DEFAULT 0; DECLARE max_jobs INT DEFAULT 100; -- Hard limit of 100 jobs -- Get current job count SELECT COALESCE(jobs_created, 0) INTO current_jobs FROM user_usage WHERE user_id = user_uuid; -- Return TRUE if under limit RETURN current_jobs < max_jobs; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP FUNCTION IF EXISTS `get_all_users` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` FUNCTION `get_all_users`() RETURNS json READS SQL DATA DETERMINISTIC BEGIN DECLARE result JSON; SELECT JSON_ARRAYAGG( JSON_OBJECT( 'id', id, 'email', email, 'first_name', first_name, 'last_name', last_name, 'role', role, 'company_name', company_name, 'is_active', is_active, 'last_login_at', last_login_at, 'email_verified_at', email_verified_at, 'created_at', created_at ) ) INTO result FROM users WHERE deleted_at IS NULL ORDER BY created_at DESC; RETURN result; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP FUNCTION IF EXISTS `get_token_usage_summary` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` FUNCTION `get_token_usage_summary`(user_uuid VARCHAR(36)) RETURNS json READS SQL DATA DETERMINISTIC BEGIN DECLARE total_purchased INT DEFAULT 0; DECLARE total_used INT DEFAULT 0; DECLARE total_available INT DEFAULT 0; DECLARE result JSON; -- Get total purchased tokens SELECT COALESCE(SUM(quantity), 0) INTO total_purchased FROM interview_tokens WHERE user_id = user_uuid; -- Get total used tokens SELECT COALESCE(SUM(tokens_used), 0) INTO total_used FROM interview_tokens WHERE user_id = user_uuid; -- Get total available tokens SELECT COALESCE(SUM(tokens_remaining), 0) INTO total_available FROM interview_tokens WHERE user_id = user_uuid AND status = 'active' AND (expires_at IS NULL OR expires_at > NOW()); -- Build JSON result SET result = JSON_OBJECT( 'total_purchased', total_purchased, 'total_used', total_used, 'total_available', total_available, 'utilization_percentage', CASE WHEN total_purchased > 0 THEN ROUND((total_used / total_purchased) * 100, 2) ELSE 0 END ); RETURN result; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP FUNCTION IF EXISTS `get_user_statistics` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` FUNCTION `get_user_statistics`(user_uuid VARCHAR(36)) RETURNS json READS SQL DATA DETERMINISTIC BEGIN DECLARE result JSON; DECLARE user_usage_data JSON; DECLARE token_summary JSON; -- Get usage data SELECT JSON_OBJECT( 'jobs_created', COALESCE(jobs_created, 0), 'interviews_completed', COALESCE(interviews_completed, 0), 'tokens_purchased', COALESCE(tokens_purchased, 0), 'tokens_used', COALESCE(tokens_used, 0) ) INTO user_usage_data FROM user_usage WHERE user_id = user_uuid; -- Get token summary SELECT get_token_usage_summary(user_uuid) INTO token_summary; -- Build result SET result = JSON_OBJECT( 'usage', user_usage_data, 'tokens', token_summary ); RETURN result; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP FUNCTION IF EXISTS `has_available_tokens` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` FUNCTION `has_available_tokens`(user_uuid VARCHAR(36)) RETURNS tinyint(1) READS SQL DATA DETERMINISTIC BEGIN DECLARE available_tokens INT DEFAULT 0; -- Get available tokens (active and not expired) SELECT COALESCE(SUM(tokens_remaining), 0) INTO available_tokens FROM interview_tokens WHERE user_id = user_uuid AND status = 'active' AND (expires_at IS NULL OR expires_at > NOW()); -- Return TRUE if has available tokens RETURN available_tokens > 0; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP FUNCTION IF EXISTS `is_admin` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` FUNCTION `is_admin`(user_uuid VARCHAR(36)) RETURNS tinyint(1) READS SQL DATA DETERMINISTIC BEGIN DECLARE user_role VARCHAR(20) DEFAULT NULL; SELECT role INTO user_role FROM users WHERE id = user_uuid AND is_active = TRUE; RETURN user_role = 'admin'; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP PROCEDURE IF EXISTS `add_tokens_to_user` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `add_tokens_to_user`( IN p_user_id VARCHAR(36), IN p_quantity INT, IN p_price_per_token DECIMAL(10,2), IN p_admin_id VARCHAR(36), OUT p_success BOOLEAN, OUT p_message VARCHAR(255) ) BEGIN DECLARE v_total_price DECIMAL(10,2); DECLARE v_token_id VARCHAR(36); DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SET p_success = FALSE; SET p_message = 'An error occurred while adding tokens'; END; -- Check if admin IF NOT is_admin(p_admin_id) THEN SET p_success = FALSE; SET p_message = 'Access denied: Admin privileges required'; ELSE -- Check if user exists IF NOT EXISTS (SELECT 1 FROM users WHERE id = p_user_id AND deleted_at IS NULL) THEN SET p_success = FALSE; SET p_message = 'User not found'; ELSE -- Calculate total price SET v_total_price = p_quantity * p_price_per_token; -- Create token record SET v_token_id = UUID(); INSERT INTO interview_tokens ( id, user_id, token_type, quantity, price_per_token, total_price, status, purchased_at ) VALUES ( v_token_id, p_user_id, CASE WHEN p_quantity = 1 THEN 'single' ELSE 'bulk' END, p_quantity, p_price_per_token, v_total_price, 'active', NOW() ); -- Create payment record (admin-granted) INSERT INTO payment_records ( user_id, interview_token_id, token_package_id, amount, status, payment_method, payment_reference ) VALUES ( p_user_id, v_token_id, NULL, v_total_price, 'paid', 'admin_granted', CONCAT('ADMIN_', p_admin_id, '_', NOW()) ); SET p_success = TRUE; SET p_message = CONCAT('Successfully added ', p_quantity, ' tokens to user'); END IF; END IF; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP PROCEDURE IF EXISTS `change_user_password` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `change_user_password`( IN p_user_id VARCHAR(36), IN p_new_password_hash VARCHAR(255), IN p_admin_id VARCHAR(36), OUT p_success BOOLEAN, OUT p_message VARCHAR(255) ) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SET p_success = FALSE; SET p_message = 'An error occurred while changing password'; END; -- Check if admin IF NOT is_admin(p_admin_id) THEN SET p_success = FALSE; SET p_message = 'Access denied: Admin privileges required'; ELSE -- Check if user exists IF NOT EXISTS (SELECT 1 FROM users WHERE id = p_user_id AND deleted_at IS NULL) THEN SET p_success = FALSE; SET p_message = 'User not found'; ELSE -- Update password UPDATE users SET password_hash = p_new_password_hash, updated_at = NOW() WHERE id = p_user_id; SET p_success = TRUE; SET p_message = 'Password changed successfully'; END IF; END IF; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP PROCEDURE IF EXISTS `create_user` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `create_user`( IN p_email VARCHAR(255), IN p_password_hash VARCHAR(255), IN p_first_name VARCHAR(100), IN p_last_name VARCHAR(100), IN p_role ENUM('admin', 'recruiter'), IN p_company_name VARCHAR(255), IN p_admin_id VARCHAR(36), OUT p_user_id VARCHAR(36), OUT p_success BOOLEAN, OUT p_message VARCHAR(255) ) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SET p_success = FALSE; SET p_message = 'An error occurred while creating user'; END; -- Check if admin IF NOT is_admin(p_admin_id) THEN SET p_success = FALSE; SET p_message = 'Access denied: Admin privileges required'; ELSE -- Check if email already exists IF EXISTS (SELECT 1 FROM users WHERE email = p_email AND deleted_at IS NULL) THEN SET p_success = FALSE; SET p_message = 'Email already exists'; ELSE -- Create user SET p_user_id = UUID(); INSERT INTO users ( id, email, password_hash, first_name, last_name, role, company_name, is_active, email_verified_at ) VALUES ( p_user_id, p_email, p_password_hash, p_first_name, p_last_name, p_role, p_company_name, TRUE, NOW() ); -- Initialize usage tracking INSERT INTO user_usage (user_id) VALUES (p_user_id); SET p_success = TRUE; SET p_message = 'User created successfully'; END IF; END IF; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP PROCEDURE IF EXISTS `deactivate_user` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `deactivate_user`( IN p_user_id VARCHAR(36), IN p_admin_id VARCHAR(36), OUT p_success BOOLEAN, OUT p_message VARCHAR(255) ) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SET p_success = FALSE; SET p_message = 'An error occurred while deactivating user'; END; -- Check if admin IF NOT is_admin(p_admin_id) THEN SET p_success = FALSE; SET p_message = 'Access denied: Admin privileges required'; ELSE -- Check if user exists IF NOT EXISTS (SELECT 1 FROM users WHERE id = p_user_id AND deleted_at IS NULL) THEN SET p_success = FALSE; SET p_message = 'User not found'; ELSE -- Deactivate user UPDATE users SET is_active = FALSE, updated_at = NOW() WHERE id = p_user_id; SET p_success = TRUE; SET p_message = 'User deactivated successfully'; END IF; END IF; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP PROCEDURE IF EXISTS `get_system_statistics` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `get_system_statistics`( IN p_admin_id VARCHAR(36), OUT p_success BOOLEAN, OUT p_message VARCHAR(255), OUT p_statistics JSON ) BEGIN DECLARE v_total_users INT DEFAULT 0; DECLARE v_active_users INT DEFAULT 0; DECLARE v_total_jobs INT DEFAULT 0; DECLARE v_total_interviews INT DEFAULT 0; DECLARE v_total_tokens_purchased INT DEFAULT 0; DECLARE v_total_tokens_used INT DEFAULT 0; DECLARE v_total_revenue DECIMAL(10,2) DEFAULT 0; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SET p_success = FALSE; SET p_message = 'An error occurred while getting statistics'; END; -- Check if admin IF NOT is_admin(p_admin_id) THEN SET p_success = FALSE; SET p_message = 'Access denied: Admin privileges required'; ELSE -- Get statistics SELECT COUNT(*) INTO v_total_users FROM users WHERE deleted_at IS NULL; SELECT COUNT(*) INTO v_active_users FROM users WHERE is_active = TRUE AND deleted_at IS NULL; SELECT COALESCE(SUM(jobs_created), 0) INTO v_total_jobs FROM user_usage; SELECT COALESCE(SUM(interviews_completed), 0) INTO v_total_interviews FROM user_usage; SELECT COALESCE(SUM(tokens_purchased), 0) INTO v_total_tokens_purchased FROM user_usage; SELECT COALESCE(SUM(tokens_used), 0) INTO v_total_tokens_used FROM user_usage; SELECT COALESCE(SUM(amount), 0) INTO v_total_revenue FROM payment_records WHERE status = 'paid'; -- Build statistics JSON SET p_statistics = JSON_OBJECT( 'total_users', v_total_users, 'active_users', v_active_users, 'total_jobs', v_total_jobs, 'total_interviews', v_total_interviews, 'total_tokens_purchased', v_total_tokens_purchased, 'total_tokens_used', v_total_tokens_used, 'total_revenue', v_total_revenue, 'generated_at', NOW() ); SET p_success = TRUE; SET p_message = 'Statistics retrieved successfully'; END IF; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP PROCEDURE IF EXISTS `update_user` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; /*!50003 SET character_set_client = utf8mb4 */ ; /*!50003 SET character_set_results = utf8mb4 */ ; /*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `update_user`( IN p_user_id VARCHAR(36), IN p_email VARCHAR(255), IN p_first_name VARCHAR(100), IN p_last_name VARCHAR(100), IN p_role ENUM('admin', 'recruiter'), IN p_company_name VARCHAR(255), IN p_is_active BOOLEAN, IN p_admin_id VARCHAR(36), OUT p_success BOOLEAN, OUT p_message VARCHAR(255) ) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SET p_success = FALSE; SET p_message = 'An error occurred while updating user'; END; -- Check if admin IF NOT is_admin(p_admin_id) THEN SET p_success = FALSE; SET p_message = 'Access denied: Admin privileges required'; ELSE -- Check if user exists IF NOT EXISTS (SELECT 1 FROM users WHERE id = p_user_id AND deleted_at IS NULL) THEN SET p_success = FALSE; SET p_message = 'User not found'; ELSE -- Update user UPDATE users SET email = p_email, first_name = p_first_name, last_name = p_last_name, role = p_role, company_name = p_company_name, is_active = p_is_active, updated_at = NOW() WHERE id = p_user_id; SET p_success = TRUE; SET p_message = 'User updated successfully'; END IF; END IF; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2025-09-16 20:22:32