Added config migration #127
This commit is contained in:
		@@ -1,3 +1,5 @@
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
from bot_core.logging.database_logger import DatabaseLogger
 | 
			
		||||
from bot_data.abc.migration_abc import MigrationABC
 | 
			
		||||
from bot_data.db_context import DBContext
 | 
			
		||||
@@ -12,22 +14,140 @@ class ConfigMigration(MigrationABC):
 | 
			
		||||
        self._db = db
 | 
			
		||||
        self._cursor = db.cursor
 | 
			
		||||
 | 
			
		||||
    def _exec(self, file: str):
 | 
			
		||||
        path = f"{os.path.dirname(os.path.realpath(__file__))}/db_history_scripts"
 | 
			
		||||
        sql = open(f"{path}/{file}").read()
 | 
			
		||||
 | 
			
		||||
        for statement in sql.split("\n\n"):
 | 
			
		||||
            self._cursor.execute(statement + ";")
 | 
			
		||||
 | 
			
		||||
    def upgrade(self):
 | 
			
		||||
        self._logger.debug(__name__, "Running upgrade")
 | 
			
		||||
        self._server_upgrade()
 | 
			
		||||
        self._technician_upgrade()
 | 
			
		||||
 | 
			
		||||
        # self._cursor.execute(
 | 
			
		||||
        #     str(
 | 
			
		||||
        #         f"""
 | 
			
		||||
        #             CREATE TABLE IF NOT EXISTS `Config` (
 | 
			
		||||
        #                 `Id` BIGINT NOT NULL AUTO_INCREMENT,
 | 
			
		||||
        #                 `CreatedAt` DATETIME(6),
 | 
			
		||||
        #                 `LastModifiedAt` DATETIME(6),
 | 
			
		||||
        #                 PRIMARY KEY(`Id`)
 | 
			
		||||
        #             );
 | 
			
		||||
        #         """
 | 
			
		||||
        #     )
 | 
			
		||||
        # )
 | 
			
		||||
        self._exec("config/server.sql")
 | 
			
		||||
        self._exec("config/server_afk_channels.sql")
 | 
			
		||||
        self._exec("config/server_team_roles.sql")
 | 
			
		||||
        self._exec("config/technician.sql")
 | 
			
		||||
        self._exec("config/technician_ids.sql")
 | 
			
		||||
        self._exec("config/technician_ping_urls.sql")
 | 
			
		||||
 | 
			
		||||
    def _server_upgrade(self):
 | 
			
		||||
        self._cursor.execute(
 | 
			
		||||
            str(
 | 
			
		||||
                f"""
 | 
			
		||||
                    CREATE TABLE IF NOT EXISTS `CFG_Server` (
 | 
			
		||||
                        `Id` BIGINT NOT NULL AUTO_INCREMENT,
 | 
			
		||||
                        `MessageDeleteTimer` BIGINT NOT NULL DEFAULT 6,
 | 
			
		||||
                        `NotificationChatId` BIGINT NOT NULL,
 | 
			
		||||
                        `MaxVoiceStateHours` BIGINT NOT NULL DEFAULT 6,
 | 
			
		||||
                        `XpPerMessage` BIGINT NOT NULL DEFAULT 1,
 | 
			
		||||
                        `XpPerReaction` BIGINT NOT NULL DEFAULT 1,
 | 
			
		||||
                        `MaxMessageXpPerHour` BIGINT NOT NULL DEFAULT 20,
 | 
			
		||||
                        `XpPerOntimeHour` BIGINT NOT NULL DEFAULT 10,
 | 
			
		||||
                        `XpPerEventParticipation` BIGINT NOT NULL DEFAULT 10,
 | 
			
		||||
                        `XpPerAchievement` BIGINT NOT NULL DEFAULT 10,
 | 
			
		||||
                        `AFKCommandChannelId` BIGINT NOT NULL,
 | 
			
		||||
                        `HelpVoiceChannelId` BIGINT NOT NULL,
 | 
			
		||||
                        `TeamChannelId` BIGINT NOT NULL,
 | 
			
		||||
                        `LoginMessageChannelId` BIGINT NOT NULL,
 | 
			
		||||
                        `ServerId` BIGINT NOT NULL,
 | 
			
		||||
                        `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        PRIMARY KEY(`Id`),
 | 
			
		||||
                        FOREIGN KEY (`ServerId`) REFERENCES `Servers`(`ServerId`)
 | 
			
		||||
                    );
 | 
			
		||||
                """
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self._cursor.execute(
 | 
			
		||||
            str(
 | 
			
		||||
                f"""
 | 
			
		||||
                    CREATE TABLE IF NOT EXISTS `CFG_ServerAFKChannelIds` (
 | 
			
		||||
                        `Id` BIGINT NOT NULL AUTO_INCREMENT,
 | 
			
		||||
                        `ChannelId` BIGINT NOT NULL,
 | 
			
		||||
                        `ServerId` BIGINT NOT NULL,
 | 
			
		||||
                        `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        PRIMARY KEY(`Id`),
 | 
			
		||||
                        FOREIGN KEY (`ServerId`) REFERENCES `Servers`(`ServerId`)
 | 
			
		||||
                    );
 | 
			
		||||
                """
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self._cursor.execute(
 | 
			
		||||
            str(
 | 
			
		||||
                f"""
 | 
			
		||||
                    CREATE TABLE IF NOT EXISTS `CFG_ServerTeamRoleIds` (
 | 
			
		||||
                        `Id` BIGINT NOT NULL AUTO_INCREMENT,
 | 
			
		||||
                        `RoleId` BIGINT NOT NULL,
 | 
			
		||||
                        `TeamMemberType` ENUM('Moderator', 'Admin') NOT NULL,
 | 
			
		||||
                        `ServerId` BIGINT NOT NULL,
 | 
			
		||||
                        `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        PRIMARY KEY(`Id`),
 | 
			
		||||
                        FOREIGN KEY (`ServerId`) REFERENCES `Servers`(`ServerId`)
 | 
			
		||||
                    );
 | 
			
		||||
                """
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def _technician_upgrade(self):
 | 
			
		||||
        self._cursor.execute(
 | 
			
		||||
            str(
 | 
			
		||||
                f"""
 | 
			
		||||
                    CREATE TABLE IF NOT EXISTS `CFG_Technician` (
 | 
			
		||||
                        `Id` BIGINT NOT NULL AUTO_INCREMENT,
 | 
			
		||||
                        `HelpCommandReferenceUrl` VARCHAR(255) NOT NULL,
 | 
			
		||||
                        `WaitForRestart` BIGINT NOT NULL DEFAULT 8,
 | 
			
		||||
                        `WaitForShutdown` BIGINT NOT NULL DEFAULT 8,
 | 
			
		||||
                        `CacheMaxMessages` BIGINT NOT NULL DEFAULT 1000000,
 | 
			
		||||
                        `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        PRIMARY KEY(`Id`)
 | 
			
		||||
                    );
 | 
			
		||||
                """
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self._cursor.execute(
 | 
			
		||||
            str(
 | 
			
		||||
                f"""
 | 
			
		||||
                    CREATE TABLE IF NOT EXISTS `CFG_TechnicianPingUrls` (
 | 
			
		||||
                        `Id` BIGINT NOT NULL AUTO_INCREMENT,
 | 
			
		||||
                        `URL` VARCHAR(255) NOT NULL,
 | 
			
		||||
                        `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        PRIMARY KEY(`Id`)
 | 
			
		||||
                    );
 | 
			
		||||
                """
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self._cursor.execute(
 | 
			
		||||
            str(
 | 
			
		||||
                f"""
 | 
			
		||||
                    CREATE TABLE IF NOT EXISTS `CFG_TechnicianIds` (
 | 
			
		||||
                        `Id` BIGINT NOT NULL AUTO_INCREMENT,
 | 
			
		||||
                        `TechnicianId` BIGINT NOT NULL,
 | 
			
		||||
                        `CreatedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        `LastModifiedAt` DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
 | 
			
		||||
                        PRIMARY KEY(`Id`)
 | 
			
		||||
                    );
 | 
			
		||||
                """
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def downgrade(self):
 | 
			
		||||
        self._logger.debug(__name__, "Running downgrade")
 | 
			
		||||
        # self._cursor.execute("DROP TABLE `Config`;")
 | 
			
		||||
 | 
			
		||||
    def _server_downgrade(self):
 | 
			
		||||
        self._cursor.execute("DROP TABLE `CFG_Server`;")
 | 
			
		||||
 | 
			
		||||
    def _technician_downgrade(self):
 | 
			
		||||
        self._cursor.execute("DROP TABLE `CFG_Technician`;")
 | 
			
		||||
        self._cursor.execute("DROP TABLE `CFG_TechnicianPingUrls`;")
 | 
			
		||||
        self._cursor.execute("DROP TABLE `CFG_TechnicianIds`;")
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,117 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS `CFG_ServerHistory`
 | 
			
		||||
(
 | 
			
		||||
    `Id`    BIGINT(20)  NOT NULL,
 | 
			
		||||
    `MessageDeleteTimer` BIGINT NOT NULL DEFAULT 6,
 | 
			
		||||
    `NotificationChatId` BIGINT NOT NULL,
 | 
			
		||||
    `MaxVoiceStateHours` BIGINT NOT NULL DEFAULT 6,
 | 
			
		||||
    `XpPerMessage` BIGINT NOT NULL DEFAULT 1,
 | 
			
		||||
    `XpPerReaction` BIGINT NOT NULL DEFAULT 1,
 | 
			
		||||
    `MaxMessageXpPerHour` BIGINT NOT NULL DEFAULT 20,
 | 
			
		||||
    `XpPerOntimeHour` BIGINT NOT NULL DEFAULT 10,
 | 
			
		||||
    `XpPerEventParticipation` BIGINT NOT NULL DEFAULT 10,
 | 
			
		||||
    `XpPerAchievement` BIGINT NOT NULL DEFAULT 10,
 | 
			
		||||
    `AFKCommandChannelId` BIGINT NOT NULL,
 | 
			
		||||
    `HelpVoiceChannelId` BIGINT NOT NULL,
 | 
			
		||||
    `TeamChannelId` BIGINT NOT NULL,
 | 
			
		||||
    `LoginMessageChannelId` BIGINT NOT NULL,
 | 
			
		||||
    `ServerId` BIGINT NOT NULL,
 | 
			
		||||
    `Deleted` BOOL DEFAULT FALSE,
 | 
			
		||||
    `DateFrom` DATETIME(6) NOT NULL,
 | 
			
		||||
    `DateTo` DATETIME(6) NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_ServerUpdate`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_ServerUpdate`
 | 
			
		||||
    AFTER UPDATE
 | 
			
		||||
    ON `CFG_Server`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_ServerHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `MessageDeleteTimer`,
 | 
			
		||||
        `NotificationChatId`,
 | 
			
		||||
        `MaxVoiceStateHours`,
 | 
			
		||||
        `XpPerMessage`,
 | 
			
		||||
        `XpPerReaction`,
 | 
			
		||||
        `MaxMessageXpPerHour`,
 | 
			
		||||
        `XpPerOntimeHour`,
 | 
			
		||||
        `XpPerEventParticipation`,
 | 
			
		||||
        `XpPerAchievement`,
 | 
			
		||||
        `AFKCommandChannelId`,
 | 
			
		||||
        `HelpVoiceChannelId`,
 | 
			
		||||
        `TeamChannelId`,
 | 
			
		||||
        `LoginMessageChannelId`,
 | 
			
		||||
        `ServerId`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.MessageDeleteTimer,
 | 
			
		||||
        OLD.NotificationChatId,
 | 
			
		||||
        OLD.MaxVoiceStateHours,
 | 
			
		||||
        OLD.XpPerMessage,
 | 
			
		||||
        OLD.XpPerReaction,
 | 
			
		||||
        OLD.MaxMessageXpPerHour,
 | 
			
		||||
        OLD.XpPerOntimeHour,
 | 
			
		||||
        OLD.XpPerEventParticipation,
 | 
			
		||||
        OLD.XpPerAchievement,
 | 
			
		||||
        OLD.AFKCommandChannelId,
 | 
			
		||||
        OLD.HelpVoiceChannelId,
 | 
			
		||||
        OLD.TeamChannelId,
 | 
			
		||||
        OLD.LoginMessageChannelId,
 | 
			
		||||
        OLD.ServerId,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_ServerDelete`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_ServerDelete`
 | 
			
		||||
    AFTER DELETE
 | 
			
		||||
    ON `CFG_Server`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_ServerHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `MessageDeleteTimer`,
 | 
			
		||||
        `NotificationChatId`,
 | 
			
		||||
        `MaxVoiceStateHours`,
 | 
			
		||||
        `XpPerMessage`,
 | 
			
		||||
        `XpPerReaction`,
 | 
			
		||||
        `MaxMessageXpPerHour`,
 | 
			
		||||
        `XpPerOntimeHour`,
 | 
			
		||||
        `XpPerEventParticipation`,
 | 
			
		||||
        `XpPerAchievement`,
 | 
			
		||||
        `AFKCommandChannelId`,
 | 
			
		||||
        `HelpVoiceChannelId`,
 | 
			
		||||
        `TeamChannelId`,
 | 
			
		||||
        `LoginMessageChannelId`,
 | 
			
		||||
        `ServerId`,
 | 
			
		||||
        `Deleted`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.MessageDeleteTimer,
 | 
			
		||||
        OLD.NotificationChatId,
 | 
			
		||||
        OLD.MaxVoiceStateHours,
 | 
			
		||||
        OLD.XpPerMessage,
 | 
			
		||||
        OLD.XpPerReaction,
 | 
			
		||||
        OLD.MaxMessageXpPerHour,
 | 
			
		||||
        OLD.XpPerOntimeHour,
 | 
			
		||||
        OLD.XpPerEventParticipation,
 | 
			
		||||
        OLD.XpPerAchievement,
 | 
			
		||||
        OLD.AFKCommandChannelId,
 | 
			
		||||
        OLD.HelpVoiceChannelId,
 | 
			
		||||
        OLD.TeamChannelId,
 | 
			
		||||
        OLD.LoginMessageChannelId,
 | 
			
		||||
        OLD.ServerId,
 | 
			
		||||
        TRUE,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
@@ -0,0 +1,57 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS `CFG_ServerAFKChannelIdsHistory`
 | 
			
		||||
(
 | 
			
		||||
    `Id`    BIGINT(20)  NOT NULL,
 | 
			
		||||
    `ChannelId` BIGINT NOT NULL,
 | 
			
		||||
    `ServerId` BIGINT NOT NULL,
 | 
			
		||||
    `Deleted` BOOL DEFAULT FALSE,
 | 
			
		||||
    `DateFrom` DATETIME(6) NOT NULL,
 | 
			
		||||
    `DateTo` DATETIME(6) NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_ServerAFKChannelIdsUpdate`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_ServerAFKChannelIdsUpdate`
 | 
			
		||||
    AFTER UPDATE
 | 
			
		||||
    ON `CFG_ServerAFKChannelIds`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_ServerAFKChannelIdsHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `ChannelId`,
 | 
			
		||||
        `ServerId`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.ChannelId,
 | 
			
		||||
        OLD.ServerId,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_ServerAFKChannelIdsDelete`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_ServerAFKChannelIdsDelete`
 | 
			
		||||
    AFTER DELETE
 | 
			
		||||
    ON `CFG_ServerAFKChannelIds`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_ServerAFKChannelIdsHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `ChannelId`,
 | 
			
		||||
        `ServerId`,
 | 
			
		||||
        `Deleted`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.ChannelId,
 | 
			
		||||
        OLD.ServerId,
 | 
			
		||||
        TRUE,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
@@ -0,0 +1,62 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS `CFG_ServerTeamRoleIdsHistory`
 | 
			
		||||
(
 | 
			
		||||
    `Id`    BIGINT(20)  NOT NULL,
 | 
			
		||||
    `RoleId` BIGINT NOT NULL,
 | 
			
		||||
    `TeamMemberType` ENUM('Moderator', 'Admin') NOT NULL,
 | 
			
		||||
    `ServerId` BIGINT NOT NULL,
 | 
			
		||||
    `Deleted` BOOL DEFAULT FALSE,
 | 
			
		||||
    `DateFrom` DATETIME(6) NOT NULL,
 | 
			
		||||
    `DateTo` DATETIME(6) NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_ServerTeamRoleIdsUpdate`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_ServerTeamRoleIdsUpdate`
 | 
			
		||||
    AFTER UPDATE
 | 
			
		||||
    ON `CFG_ServerTeamRoleIds`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_ServerTeamRoleIdsHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `RoleId`,
 | 
			
		||||
        `TeamMemberType`,
 | 
			
		||||
        `ServerId`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.RoleId,
 | 
			
		||||
        OLD.TeamMemberType,
 | 
			
		||||
        OLD.ServerId,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_ServerTeamRoleIdsDelete`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_ServerTeamRoleIdsDelete`
 | 
			
		||||
    AFTER DELETE
 | 
			
		||||
    ON `CFG_ServerTeamRoleIds`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_ServerTeamRoleIdsHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `RoleId`,
 | 
			
		||||
        `TeamMemberType`,
 | 
			
		||||
        `ServerId`,
 | 
			
		||||
        `Deleted`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.RoleId,
 | 
			
		||||
        OLD.TeamMemberType,
 | 
			
		||||
        OLD.ServerId,
 | 
			
		||||
        TRUE,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
@@ -0,0 +1,67 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS `CFG_TechnicianHistory`
 | 
			
		||||
(
 | 
			
		||||
    `Id`    BIGINT(20)  NOT NULL,
 | 
			
		||||
    `HelpCommandReferenceUrl` VARCHAR(255) NOT NULL,
 | 
			
		||||
    `WaitForRestart` BIGINT NOT NULL DEFAULT 8,
 | 
			
		||||
    `WaitForShutdown` BIGINT NOT NULL DEFAULT 8,
 | 
			
		||||
    `CacheMaxMessages` BIGINT NOT NULL DEFAULT 1000000,
 | 
			
		||||
    `Deleted` BOOL DEFAULT FALSE,
 | 
			
		||||
    `DateFrom` DATETIME(6) NOT NULL,
 | 
			
		||||
    `DateTo` DATETIME(6) NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_TechnicianUpdate`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_TechnicianUpdate`
 | 
			
		||||
    AFTER UPDATE
 | 
			
		||||
    ON `CFG_Technician`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_TechnicianHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `HelpCommandReferenceUrl`,
 | 
			
		||||
        `WaitForRestart`,
 | 
			
		||||
        `WaitForShutdown`,
 | 
			
		||||
        `CacheMaxMessages`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.HelpCommandReferenceUrl,
 | 
			
		||||
        OLD.WaitForRestart,
 | 
			
		||||
        OLD.WaitForShutdown,
 | 
			
		||||
        OLD.CacheMaxMessages,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_TechnicianDelete`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_TechnicianDelete`
 | 
			
		||||
    AFTER DELETE
 | 
			
		||||
    ON `CFG_Technician`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_TechnicianHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `HelpCommandReferenceUrl`,
 | 
			
		||||
        `WaitForRestart`,
 | 
			
		||||
        `WaitForShutdown`,
 | 
			
		||||
        `CacheMaxMessages`,
 | 
			
		||||
        `Deleted`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.HelpCommandReferenceUrl,
 | 
			
		||||
        OLD.WaitForRestart,
 | 
			
		||||
        OLD.WaitForShutdown,
 | 
			
		||||
        OLD.CacheMaxMessages,
 | 
			
		||||
        TRUE,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
@@ -0,0 +1,52 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS `CFG_TechnicianIdsHistory`
 | 
			
		||||
(
 | 
			
		||||
    `Id`    BIGINT(20)  NOT NULL,
 | 
			
		||||
    `TechnicianId` BIGINT NOT NULL,
 | 
			
		||||
    `Deleted` BOOL DEFAULT FALSE,
 | 
			
		||||
    `DateFrom` DATETIME(6) NOT NULL,
 | 
			
		||||
    `DateTo` DATETIME(6) NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_TechnicianIdsUpdate`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_TechnicianIdsUpdate`
 | 
			
		||||
    AFTER UPDATE
 | 
			
		||||
    ON `CFG_TechnicianIds`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_TechnicianIdsHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `TechnicianId`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.TechnicianId,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_TechnicianIdsDelete`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_TechnicianIdsDelete`
 | 
			
		||||
    AFTER DELETE
 | 
			
		||||
    ON `CFG_TechnicianIds`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_TechnicianIdsHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `TechnicianId`,
 | 
			
		||||
        `Deleted`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.TechnicianId,
 | 
			
		||||
        TRUE,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
@@ -0,0 +1,52 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS `CFG_TechnicianPingUrlsHistory`
 | 
			
		||||
(
 | 
			
		||||
    `Id`    BIGINT(20)  NOT NULL,
 | 
			
		||||
    `URL` VARCHAR(255) NOT NULL,
 | 
			
		||||
    `Deleted` BOOL DEFAULT FALSE,
 | 
			
		||||
    `DateFrom` DATETIME(6) NOT NULL,
 | 
			
		||||
    `DateTo` DATETIME(6) NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_TechnicianPingUrlsUpdate`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_TechnicianPingUrlsUpdate`
 | 
			
		||||
    AFTER UPDATE
 | 
			
		||||
    ON `CFG_TechnicianPingUrls`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_TechnicianPingUrlsHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `URL`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.URL,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
 | 
			
		||||
DROP TRIGGER IF EXISTS `TR_CFG_TechnicianPingUrlsDelete`;
 | 
			
		||||
 | 
			
		||||
CREATE TRIGGER `TR_CFG_TechnicianPingUrlsDelete`
 | 
			
		||||
    AFTER DELETE
 | 
			
		||||
    ON `CFG_TechnicianPingUrls`
 | 
			
		||||
    FOR EACH ROW
 | 
			
		||||
BEGIN
 | 
			
		||||
    INSERT INTO `CFG_TechnicianPingUrlsHistory` (
 | 
			
		||||
        `Id`,
 | 
			
		||||
        `URL`,
 | 
			
		||||
        `Deleted`,
 | 
			
		||||
        `DateFrom`,
 | 
			
		||||
        `DateTo`
 | 
			
		||||
    )
 | 
			
		||||
    VALUES (
 | 
			
		||||
        OLD.UserId,
 | 
			
		||||
        OLD.URL,
 | 
			
		||||
        TRUE,
 | 
			
		||||
        OLD.LastModifiedAt,
 | 
			
		||||
        CURRENT_TIMESTAMP(6)
 | 
			
		||||
    );
 | 
			
		||||
END;
 | 
			
		||||
		Reference in New Issue
	
	Block a user