-- --------------------------------------------------------
-- Host:                         153.92.1.116
-- Server version:               8.0.43-0ubuntu0.22.04.2 - (Ubuntu)
-- Server OS:                    Linux
-- HeidiSQL Version:             12.14.0.7165
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!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 database structure for sr_310_ricards
CREATE DATABASE IF NOT EXISTS `sr_310_ricards` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `sr_310_ricards`;

-- Dumping structure for function sr_310_ricards.izdzest_lietotaju
DELIMITER //
CREATE FUNCTION `izdzest_lietotaju`(
	`p_username` VARCHAR(50)
) RETURNS tinyint(1)
    DETERMINISTIC
    SQL SECURITY INVOKER
    COMMENT 'izdzest lietotaju'
BEGIN
DELETE FROM lietotaji WHERE username = p_username;
    RETURN TRUE;
END//
DELIMITER ;

-- Dumping structure for function sr_310_ricards.izlogot_lietotaju
DELIMITER //
CREATE FUNCTION `izlogot_lietotaju`(
	`p_username` VARCHAR(50)
) RETURNS tinyint(1)
    DETERMINISTIC
    SQL SECURITY INVOKER
    COMMENT 'izlogo lietotaju'
BEGIN
 UPDATE sesijas s
    JOIN lietotaji u ON u.id = s.sesijas_id
    SET s.is_logged_in = FALSE
    WHERE u.username = p_username;
    RETURN TRUE;
END//
DELIMITER ;

-- Dumping structure for function sr_310_ricards.izveidot_lietotaju
DELIMITER //
CREATE FUNCTION `izveidot_lietotaju`(
	`p_username` VARCHAR(50),
	`p_password` VARCHAR(255)
) RETURNS tinyint(1)
    DETERMINISTIC
    SQL SECURITY INVOKER
    COMMENT 'izveido lietotaju'
BEGIN
 INSERT INTO lietotaji(username, password_hash)
    VALUES (p_username, SHA2(p_password, 256));

    INSERT INTO sesijas(sesijas_id, last_activity, is_logged_in)
    VALUES (LAST_INSERT_ID(), NOW(), FALSE);

    RETURN TRUE;
END//
DELIMITER ;

-- Dumping structure for table sr_310_ricards.lietotaji
CREATE TABLE IF NOT EXISTS `lietotaji` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `password_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT (now()),
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Data exporting was unselected.

-- Dumping structure for function sr_310_ricards.lietotajs_aktivs
DELIMITER //
CREATE FUNCTION `lietotajs_aktivs`(
	`p_username` VARCHAR(50)
) RETURNS tinyint(1)
    DETERMINISTIC
    SQL SECURITY INVOKER
    COMMENT 'parbauda vai lietotajs ir aktivs'
BEGIN
 DECLARE last_time DATETIME;
    DECLARE uid INT;

    SELECT u.id, s.last_activity
    INTO uid, last_time
    FROM lietotaji u
    JOIN sesijas s ON u.id = s.sesijas_id
    WHERE u.username = p_username
      AND s.is_logged_in = TRUE;

    IF uid IS NULL THEN
        RETURN FALSE;
    END IF;

    IF TIMESTAMPDIFF(MINUTE, last_time, NOW()) > 5 THEN
        UPDATE sesijas SET is_logged_in = FALSE WHERE sesijas_id = uid;
        RETURN FALSE;
    END IF;

    RETURN TRUE;
END//
DELIMITER ;

-- Dumping structure for function sr_310_ricards.modificet_lietotaju
DELIMITER //
CREATE FUNCTION `modificet_lietotaju`(
	`p_username` VARCHAR(50),
	`p_password` VARCHAR(255)
) RETURNS tinyint(1)
    DETERMINISTIC
    SQL SECURITY INVOKER
    COMMENT 'modificet lietotaju'
BEGIN
UPDATE lietotaji
    SET password_hash = SHA2(p_password, 256)
    WHERE username = p_username;
    RETURN TRUE;
END//
DELIMITER ;

-- Dumping structure for function sr_310_ricards.parbaude_lietotaja_dati
DELIMITER //
CREATE FUNCTION `parbaude_lietotaja_dati`(
	`p_username` VARCHAR(50),
	`p_password` VARCHAR(255)
) RETURNS tinyint(1)
    DETERMINISTIC
    SQL SECURITY INVOKER
    COMMENT 'parbauda lietotaja vardu un paroli'
BEGIN
 DECLARE uid INT;

    SELECT id INTO uid
    FROM lietotaji
    WHERE username = p_username
      AND password_hash = SHA2(p_password, 256);

    IF uid IS NOT NULL THEN
        UPDATE sesijas
        SET is_logged_in = TRUE,
            last_activity = NOW()
        WHERE sesijas_id = uid;
        RETURN TRUE;
    END IF;

    RETURN FALSE;
END//
DELIMITER ;

-- Dumping structure for table sr_310_ricards.sesijas
CREATE TABLE IF NOT EXISTS `sesijas` (
  `sesijas_id` int NOT NULL,
  `last_activity` datetime NOT NULL,
  `is_logged_in` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`sesijas_id`),
  CONSTRAINT `sesijas_ibfk_1` FOREIGN KEY (`sesijas_id`) REFERENCES `lietotaji` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Data exporting was unselected.

/*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;
