mirror of
https://github.com/Jetsparrow/jetherald.git
synced 2026-01-20 23:56:08 +03:00
335 lines
13 KiB
SQL
335 lines
13 KiB
SQL
-- MySQL dump 10.13 Distrib 8.0.26, for Linux (x86_64)
|
|
--
|
|
-- Host: localhost Database: herald
|
|
-- ------------------------------------------------------
|
|
-- Server version 8.0.26
|
|
|
|
/*!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 utf8mb4 */;
|
|
/*!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 */;
|
|
|
|
--
|
|
-- Table structure for table `heart`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `heart`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `heart` (
|
|
`HeartId` bigint unsigned NOT NULL AUTO_INCREMENT,
|
|
`TopicId` int unsigned NOT NULL,
|
|
`Heart` varchar(255) NOT NULL,
|
|
`Name` varchar(255) GENERATED ALWAYS AS (`Heart`) VIRTUAL,
|
|
`Status` varchar(16) NOT NULL DEFAULT 'beating',
|
|
`LastBeatTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`ExpiryTs` timestamp NOT NULL,
|
|
`CreateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`UpdateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`HeartId`),
|
|
UNIQUE KEY `idx_TopicId_Heart_UNIQUE` (`TopicId`,`Heart`),
|
|
CONSTRAINT `fk_heart_TopicId` FOREIGN KEY (`TopicId`) REFERENCES `topic` (`TopicId`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
|
|
--
|
|
-- Table structure for table `heartevent`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `heartevent`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `heartevent` (
|
|
`HeartEventId` bigint unsigned NOT NULL AUTO_INCREMENT,
|
|
`TopicId` int unsigned NOT NULL,
|
|
`Heart` varchar(255) NOT NULL,
|
|
`Status` varchar(16) NOT NULL DEFAULT 'created',
|
|
`Event` varchar(16) NOT NULL COMMENT 'ENUM(''created'',''started'',''stopped'',''deleted'')',
|
|
`CreateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`HeartEventId`),
|
|
KEY `idx_heartevent_TopicId` (`TopicId`,`HeartEventId`),
|
|
KEY `idx_heartevent_Status` (`Status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
|
|
--
|
|
-- Table structure for table `plan`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `plan`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `plan` (
|
|
`PlanId` int unsigned NOT NULL AUTO_INCREMENT,
|
|
`Name` varchar(45) NOT NULL,
|
|
`MaxTopics` int unsigned NOT NULL,
|
|
`TimeoutMultiplier` double NOT NULL,
|
|
PRIMARY KEY (`PlanId`),
|
|
UNIQUE KEY `Name_UNIQUE` (`Name`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=4098 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
--
|
|
-- Dumping data for table `plan`
|
|
--
|
|
|
|
LOCK TABLES `plan` WRITE;
|
|
/*!40000 ALTER TABLE `plan` DISABLE KEYS */;
|
|
INSERT INTO `plan` VALUES
|
|
(4096,'none',0,1),
|
|
(4097,'unlimited',1000000,0);
|
|
/*!40000 ALTER TABLE `plan` ENABLE KEYS */;
|
|
UNLOCK TABLES;
|
|
|
|
--
|
|
-- Table structure for table `role`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `role`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `role` (
|
|
`RoleId` int unsigned NOT NULL AUTO_INCREMENT,
|
|
`Name` varchar(45) NOT NULL,
|
|
`Allow` text NOT NULL,
|
|
PRIMARY KEY (`RoleId`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=4099 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
--
|
|
-- Dumping data for table `role`
|
|
--
|
|
|
|
LOCK TABLES `role` WRITE;
|
|
/*!40000 ALTER TABLE `role` DISABLE KEYS */;
|
|
INSERT INTO `role` VALUES
|
|
(4096,'anonymous','login;register;'),
|
|
(4097,'admin','**;'),
|
|
(4098,'client','dashboard;profile;topic;');
|
|
/*!40000 ALTER TABLE `role` ENABLE KEYS */;
|
|
UNLOCK TABLES;
|
|
|
|
--
|
|
-- Table structure for table `topic`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `topic`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `topic` (
|
|
`TopicId` int unsigned NOT NULL AUTO_INCREMENT,
|
|
`CreatorId` int unsigned NOT NULL,
|
|
`Name` varchar(45) NOT NULL,
|
|
`Description` varchar(45) NOT NULL,
|
|
`ReadToken` char(32) NOT NULL,
|
|
`WriteToken` char(32) NOT NULL,
|
|
`CreateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`UpdateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`TopicId`),
|
|
UNIQUE KEY `TopicName_UNIQUE` (`Name`),
|
|
UNIQUE KEY `ReadToken_UNIQUE` (`ReadToken`),
|
|
KEY `fk_topic_CreatorId_idx` (`CreatorId`),
|
|
CONSTRAINT `fk_topic_CreatorId` FOREIGN KEY (`CreatorId`) REFERENCES `user` (`UserId`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
--
|
|
-- Table structure for table `topic_sub`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `topic_sub`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `topic_sub` (
|
|
`TopicId` int unsigned NOT NULL,
|
|
`Sub` varchar(45) NOT NULL,
|
|
`CreateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`TopicId`,`Sub`),
|
|
CONSTRAINT `fk_topic_sub_TopicId` FOREIGN KEY (`TopicId`) REFERENCES `topic` (`TopicId`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
--
|
|
-- Table structure for table `user`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `user`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `user` (
|
|
`UserId` int unsigned NOT NULL AUTO_INCREMENT,
|
|
`PlanId` int unsigned NOT NULL,
|
|
`RoleId` int unsigned NOT NULL,
|
|
`Login` varchar(45) NOT NULL,
|
|
`Name` varchar(255) NOT NULL,
|
|
`PasswordHash` varbinary(255) NOT NULL,
|
|
`PasswordSalt` varbinary(255) NOT NULL,
|
|
`HashType` tinyint NOT NULL DEFAULT '1',
|
|
`CreateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`UpdateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`UserId`),
|
|
KEY `idx_user_PlanId` (`PlanId`),
|
|
KEY `fk_user_RoleId_idx` (`RoleId`),
|
|
CONSTRAINT `fk_user_PlanId` FOREIGN KEY (`PlanId`) REFERENCES `plan` (`PlanId`),
|
|
CONSTRAINT `fk_user_RoleId` FOREIGN KEY (`RoleId`) REFERENCES `role` (`RoleId`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=4098 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
--
|
|
-- Dumping data for table `user`
|
|
--
|
|
|
|
LOCK TABLES `user` WRITE;
|
|
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
|
|
INSERT INTO `user` VALUES
|
|
(4096,4096,4096,'Anonymous','Anonymous',0xBADC0D35,0xBADC0D35,0,NOW(),NOW()),
|
|
(4097,4097,4097,'admin','Administrator',0xEF9128C1CB962024D58B50ECFA8376CC6919529BA6533AB03CE8D223BDE97BE14EF1534D85C3378AA09BECABF865ED746F2780D1A2080F7CA03486ADEE7D57C1,0xF8628C3DD353C12C5996D3E9838B8F034A2E7E32581C6771B3B5D3FBDA93CF70CBD779449ACC4A4246726BBA3F4E53035EC8FBE4B24A93E65B9E4EA0A0C38166,1,NOW(),NOW());
|
|
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
|
|
UNLOCK TABLES;
|
|
|
|
--
|
|
-- Table structure for table `userinvite`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `userinvite`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `userinvite` (
|
|
`UserInviteId` int NOT NULL AUTO_INCREMENT,
|
|
`PlanId` int unsigned NOT NULL,
|
|
`RoleId` int unsigned NOT NULL DEFAULT '4096',
|
|
`InviteCode` varchar(255) NOT NULL,
|
|
`RedeemedBy` int unsigned DEFAULT NULL,
|
|
`CreateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`UpdateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`UserInviteId`),
|
|
UNIQUE KEY `InviteCode_UNIQUE` (`InviteCode`),
|
|
KEY `fk_PlanId_idx` (`PlanId`),
|
|
KEY `fk_userinvite_RoleId_idx` (`RoleId`),
|
|
CONSTRAINT `fk_userinvite_PlanId` FOREIGN KEY (`PlanId`) REFERENCES `plan` (`PlanId`),
|
|
CONSTRAINT `fk_userinvite_RoleId` FOREIGN KEY (`RoleId`) REFERENCES `role` (`RoleId`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
--
|
|
-- Table structure for table `usersession`
|
|
--
|
|
|
|
DROP TABLE IF EXISTS `usersession`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!50503 SET character_set_client = utf8mb4 */;
|
|
CREATE TABLE `usersession` (
|
|
`SessionId` varchar(255) NOT NULL,
|
|
`SessionData` blob NOT NULL,
|
|
`ExpiryTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
`CreateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`UpdateTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`SessionId`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
--
|
|
-- Dumping events for database 'herald'
|
|
--
|
|
|
|
--
|
|
-- Dumping routines for database 'herald'
|
|
--
|
|
/*!50003 DROP PROCEDURE IF EXISTS `process_hearts` */;
|
|
/*!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 = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
|
|
DELIMITER ;;
|
|
CREATE DEFINER=`herald`@`%` PROCEDURE `process_hearts`()
|
|
BEGIN
|
|
START TRANSACTION;
|
|
SET @ts = NOW();
|
|
|
|
INSERT INTO heartevent
|
|
(TopicId, Heart, Event)
|
|
SELECT
|
|
TopicID, Heart, 'stopped'
|
|
FROM heart
|
|
WHERE ExpiryTs < @ts AND Status = 'beating';
|
|
|
|
UPDATE heart set Status = 'stopped' WHERE ExpiryTs < @ts AND Status = 'beating' AND HeartId > 0;
|
|
|
|
-- updated hearts, now grab one event for report
|
|
|
|
SET @id = (SELECT HeartEventId FROM heartevent WHERE `Status` = 'created' AND `Event` = 'stopped' ORDER BY HeartEventId DESC LIMIT 1);
|
|
UPDATE heartevent SET `Status` = 'processing' WHERE HeartEventId = @id;
|
|
SELECT ha.*, t.`Description`
|
|
FROM heartevent ha
|
|
JOIN topic t USING (TopicId)
|
|
WHERE HeartEventId = @id;
|
|
COMMIT;
|
|
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 `report_heartbeat` */;
|
|
/*!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 = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;
|
|
DELIMITER ;;
|
|
CREATE DEFINER=`herald`@`%` PROCEDURE `report_heartbeat`(_topicId INT UNSIGNED, _heart VARCHAR(255), _timeoutSeconds INTEGER UNSIGNED)
|
|
BEGIN
|
|
DECLARE beating INTEGER DEFAULT 0;
|
|
START TRANSACTION;
|
|
SET beating = EXISTS(SELECT * FROM heart WHERE TopicId = _topicId AND Heart = _heart AND `Status` = 'beating');
|
|
INSERT INTO heart
|
|
(TopicId, Heart, `Status`, ExpiryTs)
|
|
VALUES
|
|
(_topicId, _heart, 'beating', CURRENT_TIMESTAMP() + INTERVAL _timeoutSeconds SECOND)
|
|
ON DUPLICATE KEY UPDATE
|
|
`Status` = 'beating',
|
|
LastBeatTs = CURRENT_TIMESTAMP(),
|
|
ExpiryTs = CURRENT_TIMESTAMP() + INTERVAL _timeoutSeconds SECOND;
|
|
|
|
IF NOT beating THEN
|
|
INSERT INTO heartevent
|
|
(TopicId, Heart, Event)
|
|
SELECT
|
|
_topicId, _heart, 'started';
|
|
END IF;
|
|
|
|
SELECT beating;
|
|
COMMIT;
|
|
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-18 18:53:29
|