-- --------------------------------------------------------
-- Хост:                         127.0.0.1
-- Версия сервера:               10.4.32-MariaDB - mariadb.org binary distribution
-- Операционная система:         Win64
-- HeidiSQL Версия:              12.15.0.7171
-- --------------------------------------------------------



-- Дамп структуры базы данных db_login_project
CREATE DATABASE IF NOT EXISTS `db_login_project` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */;
USE `db_login_project`;

-- Дамп структуры для функция db_login_project.fn_check_session
DELIMITER //
CREATE FUNCTION `fn_check_session`(p_session_token VARCHAR(64)) RETURNS varchar(50) CHARSET utf8mb4 COLLATE utf8mb4_general_ci
    READS SQL DATA
    DETERMINISTIC
BEGIN
    DECLARE v_username VARCHAR(50);
    DECLARE v_last_activity TIMESTAMP;
    DECLARE v_timeout_minutes INT DEFAULT 30;
    IF v_username IS NULL THEN RETURN NULL; END IF;
    IF TIMESTAMPDIFF(MINUTE, v_last_activity, CURRENT_TIMESTAMP) > v_timeout_minutes THEN RETURN NULL; END IF;
    RETURN v_username;
END//
DELIMITER ;

-- Дамп данных таблицы db_login_project.sessions: ~0 rows (приблизительно)

-- Дамп структуры для процедура db_login_project.sp_delete_user
DELIMITER //
CREATE PROCEDURE `sp_delete_user`(
    IN p_username VARCHAR(50),
    OUT result_msg VARCHAR(100)
)
BEGIN
    DECLARE v_user_id INT;
    IF v_user_id IS NULL THEN
        SET result_msg = 'ERROR_USER_NOT_FOUND';
        SET result_msg = 'SUCCESS';
    END IF;
END//
DELIMITER ;

-- Дамп структуры для процедура db_login_project.sp_login
DELIMITER //
CREATE PROCEDURE `sp_login`(
    IN p_username VARCHAR(50),
    IN p_password VARCHAR(255),
    OUT session_token VARCHAR(64),
    OUT result_msg VARCHAR(100)
)
BEGIN
    DECLARE v_user_id INT;
    DECLARE v_password_hash VARCHAR(64);
    DECLARE v_token VARCHAR(64);
    IF v_user_id IS NULL THEN
        SET result_msg = 'ERROR_INVALID_CREDENTIALS';
        SET session_token = NULL;
    ELSEIF v_password_hash != SHA2(p_password, 256) THEN
        SET result_msg = 'ERROR_INVALID_CREDENTIALS';
        SET session_token = NULL;
        SET v_token = SHA2(CONCAT(v_user_id, UNIX_TIMESTAMP(), RAND()), 256);
        SET session_token = v_token;
        SET result_msg = 'SUCCESS';
    END IF;
END//
DELIMITER ;

-- Дамп структуры для процедура db_login_project.sp_logout
DELIMITER //
CREATE PROCEDURE `sp_logout`(
    IN p_session_token VARCHAR(64),
    OUT result_msg VARCHAR(100)
)
BEGIN
    DECLARE rows_affected INT;
    SET rows_affected = ROW_COUNT();
    IF rows_affected > 0 THEN
        SET result_msg = 'SUCCESS';
    ELSE
        SET result_msg = 'ERROR_SESSION_NOT_FOUND';
    END IF;
END//
DELIMITER ;

-- Дамп структуры для процедура db_login_project.sp_register_user
DELIMITER //
CREATE PROCEDURE `sp_register_user`(
    IN p_username VARCHAR(50),
    IN p_password VARCHAR(255),
    OUT result_msg VARCHAR(100)
)
BEGIN
    DECLARE user_exists INT DEFAULT 0;
    IF user_exists > 0 THEN
        SET result_msg = 'ERROR_USER_EXISTS';
        SET result_msg = 'SUCCESS';
    END IF;
END//
DELIMITER ;

-- Дамп структуры для процедура db_login_project.sp_update_activity
DELIMITER //
CREATE PROCEDURE `sp_update_activity`(
    IN p_session_token VARCHAR(64),
    OUT result_msg VARCHAR(100)
)
BEGIN
    DECLARE v_last_activity TIMESTAMP;
    DECLARE v_timeout_minutes INT DEFAULT 30;
    IF v_last_activity IS NULL THEN
        SET result_msg = 'ERROR_SESSION_NOT_FOUND';
        SET result_msg = 'ERROR_SESSION_EXPIRED';
        SET result_msg = 'SUCCESS';
    END IF;
END//
DELIMITER ;

-- Дамп структуры для процедура db_login_project.sp_update_user
DELIMITER //
CREATE PROCEDURE `sp_update_user`(
    IN p_old_username VARCHAR(50),
    IN p_new_username VARCHAR(50),
    IN p_new_password VARCHAR(255),
    OUT result_msg VARCHAR(100)
)
BEGIN
    DECLARE v_user_id INT;
    DECLARE username_exists INT DEFAULT 0;
    IF v_user_id IS NULL THEN
        SET result_msg = 'ERROR_USER_NOT_FOUND';
            IF username_exists > 0 THEN
                SET result_msg = 'ERROR_USERNAME_TAKEN';
                SET result_msg = 'SUCCESS';
            END IF;
            SET result_msg = 'SUCCESS';
        END IF;
    END IF;
END//
DELIMITER ;

-- Дамп данных таблицы db_login_project.users: ~0 rows (приблизительно)

