diff --git a/bot/src/bot_data/scripts/1.0.0/1_ApiKey_down.sql b/bot/src/bot_data/scripts/1.0.0/1_ApiKey_down.sql new file mode 100644 index 00000000..79fa3b1b --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/1_ApiKey_down.sql @@ -0,0 +1,2 @@ +DROP TABLE `ApiKeys`; + diff --git a/bot/src/bot_data/scripts/1.0.0/1_ApiKey_up.sql b/bot/src/bot_data/scripts/1.0.0/1_ApiKey_up.sql new file mode 100644 index 00000000..fd9b504b --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/1_ApiKey_up.sql @@ -0,0 +1,15 @@ +CREATE TABLE IF NOT EXISTS `ApiKeys` +( + `Id` BIGINT NOT NULL AUTO_INCREMENT, + `Identifier` VARCHAR(255) NOT NULL, + `Key` VARCHAR(255) NOT NULL, + `CreatorId` BIGINT NULL, + `CreatedAt` DATETIME(6), + `LastModifiedAt` DATETIME(6), + PRIMARY KEY (`Id`), + FOREIGN KEY (`CreatorId`) REFERENCES `Users` (`UserId`), + CONSTRAINT UC_Identifier_Key UNIQUE (`Identifier`, `Key`), + CONSTRAINT UC_Key UNIQUE (`Key`) +); + + diff --git a/bot/src/bot_data/scripts/1.0.0/2_UserJoinedGameServer_down.sql b/bot/src/bot_data/scripts/1.0.0/2_UserJoinedGameServer_down.sql new file mode 100644 index 00000000..2b885152 --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/2_UserJoinedGameServer_down.sql @@ -0,0 +1,6 @@ +DROP TABLE `GameServers`; + +DROP TABLE `UserJoinedGameServer`; + +DROP TABLE `UserGameIdents`; + diff --git a/bot/src/bot_data/scripts/1.0.0/2_UserJoinedGameServer_up.sql b/bot/src/bot_data/scripts/1.0.0/2_UserJoinedGameServer_up.sql new file mode 100644 index 00000000..31f3f13d --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/2_UserJoinedGameServer_up.sql @@ -0,0 +1,46 @@ +CREATE TABLE IF NOT EXISTS `GameServers` +( + `Id` BIGINT NOT NULL AUTO_INCREMENT, + `Name` VARCHAR(255) NOT NULL, + `ServerId` BIGINT NOT NULL, + `ApiKeyId` BIGINT NOT NULL, + `CreatedAt` DATETIME(6), + `LastModifiedAt` DATETIME(6), + FOREIGN KEY (`ServerId`) REFERENCES Servers (`ServerId`), + FOREIGN KEY (`ApiKeyId`) REFERENCES ApiKeys (`Id`), + PRIMARY KEY (`Id`) +); + + + +CREATE TABLE IF NOT EXISTS `UserJoinedGameServer` +( + `Id` BIGINT NOT NULL AUTO_INCREMENT, + `UserId` BIGINT NOT NULL, + `GameServerId` BIGINT NOT NULL, + `JoinedOn` DATETIME(6) NOT NULL, + `LeavedOn` DATETIME(6), + `CreatedAt` DATETIME(6), + `LastModifiedAt` DATETIME(6), + FOREIGN KEY (`UserId`) REFERENCES Users (`UserId`), + FOREIGN KEY (`GameServerId`) REFERENCES GameServers (`Id`), + PRIMARY KEY (`Id`) +); + + + +CREATE TABLE IF NOT EXISTS `UserGameIdents` +( + `Id` BIGINT NOT NULL AUTO_INCREMENT, + `UserId` BIGINT NOT NULL, + `GameServerId` BIGINT NOT NULL, + `Ident` VARCHAR(255) NOT NULL, + `CreatedAt` DATETIME(6), + `LastModifiedAt` DATETIME(6), + FOREIGN KEY (`UserId`) REFERENCES Users (`UserId`), + FOREIGN KEY (`GameServerId`) REFERENCES GameServers (`Id`), + CONSTRAINT UC_UserGameIdent UNIQUE (`GameServerId`, `Ident`), + PRIMARY KEY (`Id`) +); + + diff --git a/bot/src/bot_data/scripts/1.0.0/3_RemoveStats_down.sql b/bot/src/bot_data/scripts/1.0.0/3_RemoveStats_down.sql new file mode 100644 index 00000000..ffae8aad --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/3_RemoveStats_down.sql @@ -0,0 +1,14 @@ +CREATE TABLE IF NOT EXISTS `Statistics` +( + `Id` BIGINT NOT NULL AUTO_INCREMENT, + `Name` VARCHAR(255) NOT NULL, + `Description` VARCHAR(255) NOT NULL, + `Code` LONGTEXT NOT NULL, + `ServerId` BIGINT, + `CreatedAt` DATETIME(6), + `LastModifiedAt` DATETIME(6), + PRIMARY KEY (`Id`), + FOREIGN KEY (`ServerId`) REFERENCES `Servers` (`ServerId`) +); + + diff --git a/bot/src/bot_data/scripts/1.0.0/3_RemoveStats_up.sql b/bot/src/bot_data/scripts/1.0.0/3_RemoveStats_up.sql new file mode 100644 index 00000000..19a95459 --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/3_RemoveStats_up.sql @@ -0,0 +1,3 @@ +DROP TABLE IF EXISTS `Statistics`; + + diff --git a/bot/src/bot_data/scripts/1.0.0/4_UserWarning_down.sql b/bot/src/bot_data/scripts/1.0.0/4_UserWarning_down.sql new file mode 100644 index 00000000..13d2cfbd --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/4_UserWarning_down.sql @@ -0,0 +1,2 @@ +DROP TABLE `UserWarnings`; + diff --git a/bot/src/bot_data/scripts/1.0.0/4_UserWarning_up.sql b/bot/src/bot_data/scripts/1.0.0/4_UserWarning_up.sql new file mode 100644 index 00000000..29269106 --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/4_UserWarning_up.sql @@ -0,0 +1,14 @@ +CREATE TABLE IF NOT EXISTS `UserWarnings` +( + `Id` BIGINT NOT NULL AUTO_INCREMENT, + `Description` VARCHAR(255) NOT NULL, + `UserId` BIGINT NOT NULL, + `Author` BIGINT NULL, + `CreatedAt` DATETIME(6), + `LastModifiedAt` DATETIME(6), + PRIMARY KEY (`Id`), + FOREIGN KEY (`UserId`) REFERENCES `Users` (`UserId`), + FOREIGN KEY (`Author`) REFERENCES `Users` (`UserId`) +); + + diff --git a/bot/src/bot_data/scripts/1.0.0/5_DBHistory_down.sql b/bot/src/bot_data/scripts/1.0.0/5_DBHistory_down.sql new file mode 100644 index 00000000..ff1cdc17 --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/5_DBHistory_down.sql @@ -0,0 +1,34 @@ +DROP TABLE `ApiKeysHistory`; + +DROP TABLE `AuthUsersHistory`; + +DROP TABLE `AuthUserUsersRelationsHistory`; + +DROP TABLE `AutoRoleRulesHistory`; + +DROP TABLE `AutoRolesHistory`; + +DROP TABLE `ClientsHistory`; + +DROP TABLE `GameServersHistory`; + +DROP TABLE `KnownUsersHistory`; + +DROP TABLE `LevelsHistory`; + +DROP TABLE `ServersHistory`; + +DROP TABLE `UserGameIdentsHistory`; + +DROP TABLE `UserJoinedGameServerHistory`; + +DROP TABLE `UserJoinedServersHistory`; + +DROP TABLE `UserJoinedVoiceChannelHistory`; + +DROP TABLE `UserMessageCountPerHourHistory`; + +DROP TABLE `UsersHistory`; + +DROP TABLE `UserWarningsHistory`; + diff --git a/bot/src/bot_data/scripts/1.0.0/5_DBHistory_up.sql b/bot/src/bot_data/scripts/1.0.0/5_DBHistory_up.sql new file mode 100644 index 00000000..c17b16bf --- /dev/null +++ b/bot/src/bot_data/scripts/1.0.0/5_DBHistory_up.sql @@ -0,0 +1,714 @@ +ALTER TABLE `ApiKeys` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `ApiKeys` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `ApiKeysHistory` +( + `Id` BIGINT(20) NOT NULL, + `Identifier` VARCHAR(255) NOT NULL, + `Key` VARCHAR(255) NOT NULL, + `CreatorId` BIGINT(20) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_ApiKeysUpdate`;; + +CREATE TRIGGER `TR_ApiKeysUpdate` + AFTER UPDATE + ON `ApiKeys` + FOR EACH ROW +BEGIN + INSERT INTO `ApiKeysHistory` (`Id`, `Identifier`, `Key`, `CreatorId`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.Identifier, OLD.Key, OLD.CreatorId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_ApiKeysDelete`;; + +CREATE TRIGGER `TR_ApiKeysDelete` + AFTER DELETE + ON `ApiKeys` + FOR EACH ROW +BEGIN + INSERT INTO `ApiKeysHistory` (`Id`, `Identifier`, `Key`, `CreatorId`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.Identifier, OLD.Key, OLD.CreatorId, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `AuthUsers` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `AuthUsers` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `AuthUsersHistory` +( + `Id` BIGINT(20) NOT NULL, + `FirstName` VARCHAR(255) DEFAULT NULL, + `LastName` VARCHAR(255) DEFAULT NULL, + `EMail` VARCHAR(255) DEFAULT NULL, + `Password` VARCHAR(255) DEFAULT NULL, + `PasswordSalt` VARCHAR(255) DEFAULT NULL, + `RefreshToken` VARCHAR(255) DEFAULT NULL, + `ConfirmationId` VARCHAR(255) DEFAULT NULL, + `ForgotPasswordId` VARCHAR(255) DEFAULT NULL, + `OAuthId` VARCHAR(255) DEFAULT NULL, + `RefreshTokenExpiryTime` DATETIME(6) NOT NULL, + `AuthRole` BIGINT(11) NOT NULL DEFAULT 0, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_AuthUsersUpdate`;; + +CREATE TRIGGER `TR_AuthUsersUpdate` + AFTER UPDATE + ON `AuthUsers` + FOR EACH ROW +BEGIN + INSERT INTO `AuthUsersHistory` (`Id`, `FirstName`, `LastName`, `EMail`, `Password`, `PasswordSalt`, + `RefreshToken`, `ConfirmationId`, `ForgotPasswordId`, `OAuthId`, + `RefreshTokenExpiryTime`, `AuthRole`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.FirstName, OLD.LastName, OLD.EMail, OLD.Password, OLD.PasswordSalt, OLD.RefreshToken, + OLD.ConfirmationId, OLD.ForgotPasswordId, OLD.OAuthId, OLD.RefreshTokenExpiryTime, OLD.AuthRole, + OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_AuthUsersDelete`;; + +CREATE TRIGGER `TR_AuthUsersDelete` + AFTER DELETE + ON `AuthUsers` + FOR EACH ROW +BEGIN + INSERT INTO `AuthUsersHistory` (`Id`, `FirstName`, `LastName`, `EMail`, `Password`, `PasswordSalt`, `RefreshToken`, + `ConfirmationId`, `ForgotPasswordId`, `OAuthId`, `RefreshTokenExpiryTime`, + `AuthRole`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.FirstName, OLD.LastName, OLD.EMail, OLD.Password, OLD.PasswordSalt, OLD.RefreshToken, + OLD.ConfirmationId, OLD.ForgotPasswordId, OLD.OAuthId, OLD.RefreshTokenExpiryTime, OLD.AuthRole, TRUE, + OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `AuthUserUsersRelations` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `AuthUserUsersRelations` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + + +CREATE TABLE IF NOT EXISTS `AuthUserUsersRelationsHistory` +( + `Id` BIGINT(20) NOT NULL, + `AuthUserId` BIGINT(20) DEFAULT NULL, + `UserId` BIGINT(20) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_AuthUserUsersRelationsUpdate`;; + +CREATE TRIGGER `TR_AuthUserUsersRelationsUpdate` + AFTER UPDATE + ON `AuthUserUsersRelations` + FOR EACH ROW +BEGIN + INSERT INTO `AuthUserUsersRelationsHistory` (`Id`, `AuthUserId`, `UserId`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.AuthUserId, OLD.UserId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_AuthUserUsersRelationsDelete`;; + +CREATE TRIGGER `TR_AuthUserUsersRelationsDelete` + AFTER DELETE + ON `AuthUserUsersRelations` + FOR EACH ROW +BEGIN + INSERT INTO `AuthUserUsersRelationsHistory` (`Id`, `AuthUserId`, `UserId`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.AuthUserId, OLD.UserId, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `AutoRoleRules` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `AutoRoleRules` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `AutoRoleRulesHistory` +( + `Id` BIGINT(20) NOT NULL, + `AutoRoleId` BIGINT(20) DEFAULT NULL, + `DiscordEmojiName` VARCHAR(64) DEFAULT NULL, + `DiscordRoleId` BIGINT(20) NOT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_AutoRoleRulesUpdate`;; + +CREATE TRIGGER `TR_AutoRoleRulesUpdate` + AFTER UPDATE + ON `AutoRoleRules` + FOR EACH ROW +BEGIN + INSERT INTO `AutoRoleRulesHistory` (`Id`, `AutoRoleId`, `DiscordEmojiName`, `DiscordRoleId`, `DateFrom`, `DateTo`) + VALUES (OLD.AutoRoleRuleId, OLD.AutoRoleId, OLD.DiscordEmojiName, OLD.DiscordRoleId, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_AutoRoleRulesDelete`;; + +CREATE TRIGGER `TR_AutoRoleRulesDelete` + AFTER DELETE + ON `AutoRoleRules` + FOR EACH ROW +BEGIN + INSERT INTO `AutoRoleRulesHistory` (`Id`, `AutoRoleId`, `DiscordEmojiName`, `DiscordRoleId`, `Deleted`, `DateFrom`, + `DateTo`) + VALUES (OLD.AutoRoleRuleId, OLD.AutoRoleId, OLD.DiscordEmojiName, OLD.DiscordRoleId, TRUE, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `AutoRoles` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `AutoRoles` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `AutoRolesHistory` +( + `Id` BIGINT(20) NOT NULL, + `ServerId` BIGINT(20) DEFAULT NULL, + `DiscordChannelId` BIGINT(20) NOT NULL, + `DiscordMessageId` BIGINT(20) NOT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_AutoRolesUpdate`;; + +CREATE TRIGGER `TR_AutoRolesUpdate` + AFTER UPDATE + ON `AutoRoles` + FOR EACH ROW +BEGIN + INSERT INTO `AutoRolesHistory` (`Id`, `ServerId`, `DiscordChannelId`, `DiscordMessageId`, `DateFrom`, `DateTo`) + VALUES (OLD.AutoRoleId, OLD.ServerId, OLD.DiscordChannelId, OLD.DiscordMessageId, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_AutoRolesDelete`;; + +CREATE TRIGGER `TR_AutoRolesDelete` + AFTER DELETE + ON `AutoRoles` + FOR EACH ROW +BEGIN + INSERT INTO `AutoRolesHistory` (`Id`, `ServerId`, `DiscordChannelId`, `DiscordMessageId`, `Deleted`, `DateFrom`, + `DateTo`) + VALUES (OLD.AutoRoleId, OLD.ServerId, OLD.DiscordChannelId, OLD.DiscordMessageId, TRUE, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `Clients` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `Clients` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `ClientsHistory` +( + `Id` BIGINT(20) NOT NULL, + `DiscordId` BIGINT(20) NOT NULL, + `SentMessageCount` BIGINT(20) NOT NULL DEFAULT 0, + `ReceivedMessageCount` BIGINT(20) NOT NULL DEFAULT 0, + `DeletedMessageCount` BIGINT(20) NOT NULL DEFAULT 0, + `ReceivedCommandsCount` BIGINT(20) NOT NULL DEFAULT 0, + `MovedUsersCount` BIGINT(20) NOT NULL DEFAULT 0, + `ServerId` BIGINT(20) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_ClientsUpdate`;; + +CREATE TRIGGER `TR_ClientsUpdate` + AFTER UPDATE + ON `Clients` + FOR EACH ROW +BEGIN + INSERT INTO `ClientsHistory` (`Id`, `DiscordId`, `SentMessageCount`, `ReceivedMessageCount`, `DeletedMessageCount`, + `ReceivedCommandsCount`, `MovedUsersCount`, `ServerId`, `DateFrom`, `DateTo`) + VALUES (OLD.ClientId, OLD.DiscordClientId, OLD.SentMessageCount, OLD.ReceivedMessageCount, OLD.DeletedMessageCount, + OLD.ReceivedCommandsCount, OLD.MovedUsersCount, OLD.ServerId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_ClientsDelete`;; + +CREATE TRIGGER `TR_ClientsDelete` + AFTER DELETE + ON `Clients` + FOR EACH ROW +BEGIN + INSERT INTO `ClientsHistory` (`Id`, `DiscordId`, `SentMessageCount`, `ReceivedMessageCount`, `DeletedMessageCount`, + `ReceivedCommandsCount`, `MovedUsersCount`, `ServerId`, `Deleted`, `DateFrom`, + `DateTo`) + VALUES (OLD.ClientId, OLD.DiscordClientId, OLD.SentMessageCount, OLD.ReceivedMessageCount, OLD.DeletedMessageCount, + OLD.ReceivedCommandsCount, OLD.MovedUsersCount, OLD.ServerId, TRUE, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `GameServers` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `GameServers` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `GameServersHistory` +( + `Id` BIGINT(20) NOT NULL, + `Name` VARCHAR(255) NOT NULL, + `ServerId` BIGINT(20) NOT NULL, + `ApiKeyId` BIGINT(20) NOT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_GameServersUpdate`;; + +CREATE TRIGGER `TR_GameServersUpdate` + AFTER UPDATE + ON `GameServers` + FOR EACH ROW +BEGIN + INSERT INTO `GameServersHistory` (`Id`, `Name`, `ServerId`, `ApiKeyId`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.Name, OLD.ServerId, OLD.ApiKeyId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_GameServersDelete`;; + +CREATE TRIGGER `TR_GameServersDelete` + AFTER DELETE + ON `GameServers` + FOR EACH ROW +BEGIN + INSERT INTO `GameServersHistory` (`Id`, `Name`, `ServerId`, `ApiKeyId`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.Name, OLD.ServerId, OLD.ApiKeyId, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `KnownUsers` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `KnownUsers` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `KnownUsersHistory` +( + `Id` BIGINT(20) NOT NULL, + `DiscordId` BIGINT(20) NOT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_KnownUsersUpdate`;; + +CREATE TRIGGER `TR_KnownUsersUpdate` + AFTER UPDATE + ON `KnownUsers` + FOR EACH ROW +BEGIN + INSERT INTO `KnownUsersHistory` (`Id`, `DiscordId`, `DateFrom`, `DateTo`) + VALUES (OLD.KnownUserId, OLD.DiscordId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_KnownUsersDelete`;; + +CREATE TRIGGER `TR_KnownUsersDelete` + AFTER DELETE + ON `KnownUsers` + FOR EACH ROW +BEGIN + INSERT INTO `KnownUsersHistory` (`Id`, `DiscordId`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.KnownUserId, OLD.DiscordId, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `Levels` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `Levels` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `LevelsHistory` +( + `Id` BIGINT(20) NOT NULL, + `Name` VARCHAR(255) NOT NULL, + `Color` VARCHAR(8) NOT NULL, + `MinXp` BIGINT(20) NOT NULL, + `PermissionInt` BIGINT(20) NOT NULL, + `ServerId` BIGINT(20) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_LevelsUpdate`;; + +CREATE TRIGGER `TR_LevelsUpdate` + AFTER UPDATE + ON `Levels` + FOR EACH ROW +BEGIN + INSERT INTO `LevelsHistory` (`Id`, `Name`, `Color`, `MinXp`, `PermissionInt`, `ServerId`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.Name, OLD.Color, OLD.MinXp, OLD.PermissionInt, OLD.ServerId, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_LevelsDelete`;; + +CREATE TRIGGER `TR_LevelsDelete` + AFTER DELETE + ON `Levels` + FOR EACH ROW +BEGIN + INSERT INTO `LevelsHistory` (`Id`, `Name`, `Color`, `MinXp`, `PermissionInt`, `ServerId`, `Deleted`, `DateFrom`, + `DateTo`) + VALUES (OLD.Id, OLD.Name, OLD.Color, OLD.MinXp, OLD.PermissionInt, OLD.ServerId, TRUE, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `Servers` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `Servers` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `ServersHistory` +( + `Id` BIGINT(20) NOT NULL, + `DiscordId` BIGINT(20) NOT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_ServersUpdate`;; + +CREATE TRIGGER `TR_ServersUpdate` + AFTER UPDATE + ON `Servers` + FOR EACH ROW +BEGIN + INSERT INTO `ServersHistory` (`Id`, `DiscordId`, `DateFrom`, `DateTo`) + VALUES (OLD.ServerId, OLD.DiscordServerId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_ServersDelete`;; + +CREATE TRIGGER `TR_ServersDelete` + AFTER DELETE + ON `Servers` + FOR EACH ROW +BEGIN + INSERT INTO `ServersHistory` (`Id`, `DiscordId`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.ServerId, OLD.DiscordServerId, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `UserGameIdents` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `UserGameIdents` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `UserGameIdentsHistory` +( + `Id` BIGINT(20) NOT NULL, + `UserId` BIGINT(20) NOT NULL, + `GameServerId` BIGINT(20) NOT NULL, + `Ident` VARCHAR(255) NOT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_UserGameIdentsUpdate`;; + +CREATE TRIGGER `TR_UserGameIdentsUpdate` + AFTER UPDATE + ON `UserGameIdents` + FOR EACH ROW +BEGIN + INSERT INTO `UserGameIdentsHistory` (`Id`, `UserId`, `GameServerId`, `Ident`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.UserId, OLD.GameServerId, OLD.Ident, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_UserGameIdentsDelete`;; + +CREATE TRIGGER `TR_UserGameIdentsDelete` + AFTER DELETE + ON `UserGameIdents` + FOR EACH ROW +BEGIN + INSERT INTO `UserGameIdentsHistory` (`Id`, `UserId`, `GameServerId`, `Ident`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.UserId, OLD.GameServerId, OLD.Ident, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `UserJoinedGameServer` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `UserJoinedGameServer` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `UserJoinedGameServerHistory` +( + `Id` BIGINT(20) NOT NULL, + `UserId` BIGINT(20) NOT NULL, + `GameServerId` BIGINT(20) NOT NULL, + `JoinedOn` DATETIME(6) NOT NULL, + `LeavedOn` DATETIME(6) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_UserJoinedGameServerUpdate`;; + +CREATE TRIGGER `TR_UserJoinedGameServerUpdate` + AFTER UPDATE + ON `UserJoinedGameServer` + FOR EACH ROW +BEGIN + INSERT INTO `UserJoinedGameServerHistory` (`Id`, `UserId`, `GameServerId`, `JoinedOn`, `LeavedOn`, `DateFrom`, + `DateTo`) + VALUES (OLD.Id, OLD.UserId, OLD.GameServerId, OLD.JoinedOn, OLD.LeavedOn, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_UserJoinedGameServerDelete`;; + +CREATE TRIGGER `TR_UserJoinedGameServerDelete` + AFTER DELETE + ON `UserJoinedGameServer` + FOR EACH ROW +BEGIN + INSERT INTO `UserJoinedGameServerHistory` (`Id`, `UserId`, `GameServerId`, `JoinedOn`, `LeavedOn`, `Deleted`, + `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.UserId, OLD.GameServerId, OLD.JoinedOn, OLD.LeavedOn, TRUE, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `UserJoinedServers` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `UserJoinedServers` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `UserJoinedServersHistory` +( + `Id` BIGINT(20) NOT NULL, + `UserId` BIGINT(20) NOT NULL, + `JoinedOn` DATETIME(6) NOT NULL, + `LeavedOn` DATETIME(6) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_UserJoinedServersUpdate`;; + +CREATE TRIGGER `TR_UserJoinedServersUpdate` + AFTER UPDATE + ON `UserJoinedServers` + FOR EACH ROW +BEGIN + INSERT INTO `UserJoinedServersHistory` (`Id`, `UserId`, `JoinedOn`, `LeavedOn`, `DateFrom`, `DateTo`) + VALUES (OLD.JoinId, OLD.UserId, OLD.JoinedOn, OLD.LeavedOn, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_UserJoinedServersDelete`;; + +CREATE TRIGGER `TR_UserJoinedServersDelete` + AFTER DELETE + ON `UserJoinedServers` + FOR EACH ROW +BEGIN + INSERT INTO `UserJoinedServersHistory` (`Id`, `UserId`, `JoinedOn`, `LeavedOn`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.JoinId, OLD.UserId, OLD.JoinedOn, OLD.LeavedOn, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `UserJoinedVoiceChannel` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `UserJoinedVoiceChannel` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `UserJoinedVoiceChannelHistory` +( + `Id` BIGINT(20) NOT NULL, + `UserId` BIGINT(20) NOT NULL, + `DiscordChannelId` BIGINT(20) NOT NULL, + `JoinedOn` DATETIME(6) NOT NULL, + `LeavedOn` DATETIME(6) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_UserJoinedVoiceChannelUpdate`;; + +CREATE TRIGGER `TR_UserJoinedVoiceChannelUpdate` + AFTER UPDATE + ON `UserJoinedVoiceChannel` + FOR EACH ROW +BEGIN + INSERT INTO `UserJoinedVoiceChannelHistory` (`Id`, `UserId`, `DiscordChannelId`, `JoinedOn`, `LeavedOn`, `DateFrom`, + `DateTo`) + VALUES (OLD.JoinId, OLD.UserId, OLD.DiscordChannelId, OLD.JoinedOn, OLD.LeavedOn, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_UserJoinedVoiceChannelDelete`;; + +CREATE TRIGGER `TR_UserJoinedVoiceChannelDelete` + AFTER DELETE + ON `UserJoinedVoiceChannel` + FOR EACH ROW +BEGIN + INSERT INTO `UserJoinedVoiceChannelHistory` (`Id`, `UserId`, `DiscordChannelId`, `JoinedOn`, `LeavedOn`, `Deleted`, + `DateFrom`, `DateTo`) + VALUES (OLD.JoinId, OLD.UserId, OLD.DiscordChannelId, OLD.JoinedOn, OLD.LeavedOn, TRUE, OLD.LastModifiedAt, + CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `UserMessageCountPerHour` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `UserMessageCountPerHour` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `UserMessageCountPerHourHistory` +( + `Id` BIGINT(20) NOT NULL, + `Date` DATETIME(6) NOT NULL, + `Hour` BIGINT(20) DEFAULT NULL, + `XPCount` BIGINT(20) DEFAULT NULL, + `UserId` BIGINT(20) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_UserMessageCountPerHourUpdate`;; + +CREATE TRIGGER `TR_UserMessageCountPerHourUpdate` + AFTER UPDATE + ON `UserMessageCountPerHour` + FOR EACH ROW +BEGIN + INSERT INTO `UserMessageCountPerHourHistory` (`Id`, `UserId`, `Date`, `Hour`, `XPCount`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.UserId, OLD.Date, OLD.Hour, OLD.XPCount, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_UserMessageCountPerHourDelete`;; + +CREATE TRIGGER `TR_UserMessageCountPerHourDelete` + AFTER DELETE + ON `UserMessageCountPerHour` + FOR EACH ROW +BEGIN + INSERT INTO `UserMessageCountPerHourHistory` (`Id`, `UserId`, `Date`, `Hour`, `XPCount`, `Deleted`, `DateFrom`, + `DateTo`) + VALUES (OLD.Id, OLD.UserId, OLD.Date, OLD.Hour, OLD.XPCount, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `Users` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `Users` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `UsersHistory` +( + `Id` BIGINT(20) NOT NULL, + `DiscordId` BIGINT(20) NOT NULL, + `XP` BIGINT(20) NOT NULL DEFAULT 0, + `ReactionCount` BIGINT(20) NOT NULL DEFAULT 0, + `MessageCount` BIGINT(20) NOT NULL DEFAULT 0, + `Birthday` DATE NULL, + `ServerId` BIGINT(20) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_UsersUpdate`;; + +CREATE TRIGGER `TR_UsersUpdate` + AFTER UPDATE + ON `Users` + FOR EACH ROW +BEGIN + INSERT INTO `UsersHistory` (`Id`, `DiscordId`, `XP`, `ReactionCount`, `MessageCount`, `Birthday`, `ServerId`, + `DateFrom`, `DateTo`) + VALUES (OLD.UserId, OLD.DiscordId, OLD.XP, OLD.ReactionCount, OLD.MessageCount, OLD.Birthday, OLD.ServerId, + OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_UsersDelete`;; + +CREATE TRIGGER `TR_UsersDelete` + AFTER DELETE + ON `Users` + FOR EACH ROW +BEGIN + INSERT INTO `UsersHistory` (`Id`, `DiscordId`, `XP`, `ReactionCount`, `MessageCount`, `Birthday`, `ServerId`, + `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.UserId, OLD.DiscordId, OLD.XP, OLD.ReactionCount, OLD.MessageCount, OLD.Birthday, OLD.ServerId, TRUE, + OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +ALTER TABLE `UserWarnings` + CHANGE `CreatedAt` `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6);; + +ALTER TABLE `UserWarnings` + CHANGE `LastModifiedAt` `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);; + +CREATE TABLE IF NOT EXISTS `UserWarningsHistory` +( + `Id` BIGINT(20) NOT NULL, + `Description` VARCHAR(255) NOT NULL, + `UserId` BIGINT(20) NOT NULL, + `Author` BIGINT(20) DEFAULT NULL, + `Deleted` BOOL DEFAULT FALSE, + `DateFrom` DATETIME(6) NOT NULL, + `DateTo` DATETIME(6) NOT NULL +);; + +DROP TRIGGER IF EXISTS `TR_UserWarningsUpdate`;; + +CREATE TRIGGER `TR_UserWarningsUpdate` + AFTER UPDATE + ON `UserWarnings` + FOR EACH ROW +BEGIN + INSERT INTO `UserWarningsHistory` (`Id`, `Description`, `UserId`, `Author`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.Description, OLD.UserId, OLD.Author, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; + +DROP TRIGGER IF EXISTS `TR_UserWarningsDelete`;; + +CREATE TRIGGER `TR_UserWarningsDelete` + AFTER DELETE + ON `UserWarnings` + FOR EACH ROW +BEGIN + INSERT INTO `UserWarningsHistory` (`Id`, `Description`, `UserId`, `Author`, `Deleted`, `DateFrom`, `DateTo`) + VALUES (OLD.Id, OLD.Description, OLD.UserId, OLD.Author, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)); +END;; +