staging #447
| @@ -1,12 +0,0 @@ | ||||
| DROP TABLE `Servers`; | ||||
|  | ||||
| DROP TABLE `Users`; | ||||
|  | ||||
| DROP TABLE `Clients`; | ||||
|  | ||||
| DROP TABLE `KnownUsers`; | ||||
|  | ||||
| DROP TABLE `UserJoinedServers`; | ||||
|  | ||||
| DROP TABLE `UserJoinedVoiceChannel`; | ||||
|  | ||||
| @@ -1,70 +0,0 @@ | ||||
| CREATE TABLE IF NOT EXISTS `Servers` | ||||
| ( | ||||
|     `ServerId`        BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `DiscordServerId` BIGINT NOT NULL, | ||||
|     `CreatedAt`       DATETIME(6), | ||||
|     `LastModifiedAt`  DATETIME(6), | ||||
|     PRIMARY KEY (`ServerId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `Users` | ||||
| ( | ||||
|     `UserId`         BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `DiscordId`      BIGINT NOT NULL, | ||||
|     `XP`             BIGINT NOT NULL DEFAULT 0, | ||||
|     `ServerId`       BIGINT, | ||||
|     `CreatedAt`      DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     FOREIGN KEY (`ServerId`) REFERENCES Servers (`ServerId`), | ||||
|     PRIMARY KEY (`UserId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `Clients` | ||||
| ( | ||||
|     `ClientId`              BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `DiscordClientId`       BIGINT NOT NULL, | ||||
|     `SentMessageCount`      BIGINT NOT NULL DEFAULT 0, | ||||
|     `ReceivedMessageCount`  BIGINT NOT NULL DEFAULT 0, | ||||
|     `DeletedMessageCount`   BIGINT NOT NULL DEFAULT 0, | ||||
|     `ReceivedCommandsCount` BIGINT NOT NULL DEFAULT 0, | ||||
|     `MovedUsersCount`       BIGINT NOT NULL DEFAULT 0, | ||||
|     `ServerId`              BIGINT, | ||||
|     `CreatedAt`             DATETIME(6), | ||||
|     `LastModifiedAt`        DATETIME(6), | ||||
|     FOREIGN KEY (`ServerId`) REFERENCES Servers (`ServerId`), | ||||
|     PRIMARY KEY (`ClientId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `KnownUsers` | ||||
| ( | ||||
|     `KnownUserId`    BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `DiscordId`      BIGINT NOT NULL, | ||||
|     `CreatedAt`      DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     PRIMARY KEY (`KnownUserId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `UserJoinedServers` | ||||
| ( | ||||
|     `JoinId`         BIGINT      NOT NULL AUTO_INCREMENT, | ||||
|     `UserId`         BIGINT      NOT NULL, | ||||
|     `JoinedOn`       DATETIME(6) NOT NULL, | ||||
|     `LeavedOn`       DATETIME(6), | ||||
|     `CreatedAt`      DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     FOREIGN KEY (`UserId`) REFERENCES Users (`UserId`), | ||||
|     PRIMARY KEY (`JoinId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `UserJoinedVoiceChannel` | ||||
| ( | ||||
|     `JoinId`           BIGINT      NOT NULL AUTO_INCREMENT, | ||||
|     `UserId`           BIGINT      NOT NULL, | ||||
|     `DiscordChannelId` BIGINT      NOT NULL, | ||||
|     `JoinedOn`         DATETIME(6) NOT NULL, | ||||
|     `LeavedOn`         DATETIME(6), | ||||
|     `CreatedAt`        DATETIME(6), | ||||
|     `LastModifiedAt`   DATETIME(6), | ||||
|     FOREIGN KEY (`UserId`) REFERENCES Users (`UserId`), | ||||
|     PRIMARY KEY (`JoinId`) | ||||
| ); | ||||
| @@ -1,4 +0,0 @@ | ||||
| DROP TABLE `AutoRoles`; | ||||
|  | ||||
| DROP TABLE `AutoRoleRules`; | ||||
|  | ||||
| @@ -1,24 +0,0 @@ | ||||
| CREATE TABLE IF NOT EXISTS `AutoRoles` | ||||
| ( | ||||
|     `AutoRoleId`       BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `ServerId`         BIGINT, | ||||
|     `DiscordMessageId` BIGINT NOT NULL, | ||||
|     `CreatedAt`        DATETIME(6), | ||||
|     `LastModifiedAt`   DATETIME(6), | ||||
|     PRIMARY KEY (`AutoRoleId`), | ||||
|     FOREIGN KEY (`ServerId`) REFERENCES `Servers` (`ServerId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `AutoRoleRules` | ||||
| ( | ||||
|     `AutoRoleRuleId`   BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `AutoRoleId`       BIGINT, | ||||
|     `DiscordEmojiName` VARCHAR(64), | ||||
|     `DiscordRoleId`    BIGINT NOT NULL, | ||||
|     `CreatedAt`        DATETIME(6), | ||||
|     `LastModifiedAt`   DATETIME(6), | ||||
|     PRIMARY KEY (`AutoRoleRuleId`), | ||||
|     FOREIGN KEY (`AutoRoleId`) REFERENCES `AutoRoles` (`AutoRoleId`) | ||||
| ); | ||||
|  | ||||
|  | ||||
| @@ -1,4 +0,0 @@ | ||||
| DROP TABLE `AuthUsers`; | ||||
|  | ||||
| DROP TABLE `AuthUserUsersRelations`; | ||||
|  | ||||
| @@ -1,31 +0,0 @@ | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `AuthUsers` ( | ||||
|     `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `FirstName` VARCHAR(255), | ||||
|     `LastName` VARCHAR(255), | ||||
|     `EMail` VARCHAR(255), | ||||
|     `Password` VARCHAR(255), | ||||
|     `PasswordSalt` VARCHAR(255), | ||||
|     `RefreshToken` VARCHAR(255), | ||||
|     `ConfirmationId` VARCHAR(255) DEFAULT NULL, | ||||
|     `ForgotPasswordId` VARCHAR(255) DEFAULT NULL, | ||||
|     `OAuthId` VARCHAR(255) DEFAULT NULL, | ||||
|     `RefreshTokenExpiryTime` DATETIME(6) NOT NULL, | ||||
|     `AuthRole` INT NOT NULL DEFAULT 0, | ||||
|     `CreatedAt` DATETIME(6) NOT NULL, | ||||
|     `LastModifiedAt` DATETIME(6) NOT NULL, | ||||
|     PRIMARY KEY(`Id`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `AuthUserUsersRelations`( | ||||
|     `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `AuthUserId` BIGINT DEFAULT NULL, | ||||
|     `UserId` BIGINT DEFAULT NULL, | ||||
|     `CreatedAt` DATETIME(6) NOT NULL, | ||||
|     `LastModifiedAt` DATETIME(6) NOT NULL, | ||||
|     PRIMARY KEY(`Id`), | ||||
|     FOREIGN KEY (`AuthUserId`) REFERENCES `AuthUsers`(`Id`), | ||||
|     FOREIGN KEY (`UserId`) REFERENCES `Users`(`UserId`) | ||||
| ); | ||||
|  | ||||
|  | ||||
| @@ -1,4 +0,0 @@ | ||||
|  | ||||
| ALTER TABLE AutoRoles DROP COLUMN DiscordChannelId; | ||||
|  | ||||
|  | ||||
| @@ -1,4 +0,0 @@ | ||||
|  | ||||
| ALTER TABLE AutoRoles ADD DiscordChannelId BIGINT NOT NULL AFTER ServerId; | ||||
|  | ||||
|  | ||||
| @@ -1,2 +0,0 @@ | ||||
| DROP TABLE `Levels`; | ||||
|  | ||||
| @@ -1,14 +0,0 @@ | ||||
| CREATE TABLE IF NOT EXISTS `Levels` ( | ||||
|     `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `Name` VARCHAR(255) NOT NULL, | ||||
|     `Color` VARCHAR(8) NOT NULL, | ||||
|     `MinXp` BIGINT NOT NULL, | ||||
|     `PermissionInt` BIGINT NOT NULL, | ||||
|     `ServerId` BIGINT, | ||||
|     `CreatedAt` DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     PRIMARY KEY(`Id`), | ||||
|     FOREIGN KEY (`ServerId`) REFERENCES `Servers`(`ServerId`) | ||||
| ); | ||||
|  | ||||
|  | ||||
| @@ -1,2 +0,0 @@ | ||||
| DROP TABLE `Statistics`; | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| 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`) | ||||
| ); | ||||
|  | ||||
|  | ||||
| @@ -1,2 +0,0 @@ | ||||
| DROP TABLE `UserMessageCountPerHour`; | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| CREATE TABLE IF NOT EXISTS `UserMessageCountPerHour` ( | ||||
|     `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `Date` DATETIME(6) NOT NULL, | ||||
|     `Hour` BIGINT, | ||||
|     `XPCount` BIGINT, | ||||
|     `UserId` BIGINT, | ||||
|     `CreatedAt` DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     PRIMARY KEY(`Id`), | ||||
|     FOREIGN KEY (`UserId`) REFERENCES `Users`(`UserId`) | ||||
| ); | ||||
|  | ||||
|  | ||||
| @@ -1,3 +1,6 @@ | ||||
| import os | ||||
| import shutil | ||||
|  | ||||
| from cpl_core.console import Console | ||||
| from cpl_core.dependency_injection import ServiceProviderABC | ||||
| from cpl_query.extension import List | ||||
| @@ -18,24 +21,31 @@ class MigrationService: | ||||
|         self._db = db | ||||
|         self._cursor = db.cursor | ||||
|  | ||||
|         self._migrations: List[MigrationABC] = ( | ||||
|             List(type, MigrationABC.__subclasses__()).order_by(lambda x: x.name.split("_")[0]).then_by(lambda x: x.prio) | ||||
|         ) | ||||
|         # self._migrations: List[MigrationABC] = ( | ||||
|         #     List(type, MigrationABC.__subclasses__()).order_by(lambda x: x.name.split("_")[0]).then_by(lambda x: x.prio) | ||||
|         # ) | ||||
|  | ||||
|     def migrate(self): | ||||
|         for migration in self._migrations: | ||||
|             migration_id = migration.__name__ | ||||
|         path = f"../../src/bot_data/scripts" | ||||
|         if not os.path.exists(path): | ||||
|             os.makedirs(path) | ||||
|         else: | ||||
|             shutil.rmtree(path) | ||||
|             os.makedirs(path) | ||||
|  | ||||
|         for migration in self._services.get_services(MigrationABC): | ||||
|             migration_id = type(migration).__name__ | ||||
|             try: | ||||
|                 migration_as_service: MigrationABC = self._services.get_service(migration) | ||||
|                 # migration_as_service: MigrationABC = self._services.get_service(migration) | ||||
|                 # save upgrade scripts | ||||
|                 self._db.set_migration(migration_as_service.name, True) | ||||
|                 migration_as_service.upgrade() | ||||
|                 self._db.set_migration(migration.name, True) | ||||
|                 migration.upgrade() | ||||
|                 self._cursor.execute(MigrationHistory(migration_id).insert_string) | ||||
|                 self._db.save_changes() | ||||
|  | ||||
|                 # save downgrade scripts | ||||
|                 self._db.set_migration(migration_as_service.name) | ||||
|                 migration_as_service.downgrade() | ||||
|                 self._db.set_migration(migration.name) | ||||
|                 migration.downgrade() | ||||
|                 self._cursor.execute(MigrationHistory(migration_id).insert_string) | ||||
|                 self._db.save_changes() | ||||
|  | ||||
|   | ||||
| @@ -15,6 +15,11 @@ class MockDBContext(DatabaseContextABC): | ||||
|         self._migration_name: Optional[str] = None | ||||
|         self._migration_script: Optional[str] = None | ||||
|  | ||||
|         self._old_version: Optional[str] = None | ||||
|         self._old_name: Optional[str] = None | ||||
|  | ||||
|         self._index: int = 0 | ||||
|  | ||||
|     @property | ||||
|     def cursor(self) -> MockCursor: | ||||
|         cursor = MockCursor() | ||||
| @@ -43,11 +48,25 @@ class MockDBContext(DatabaseContextABC): | ||||
|         if not os.path.exists(path): | ||||
|             os.makedirs(path) | ||||
|  | ||||
|         if ( | ||||
|             self._old_name is not None | ||||
|             and self._migration_name is not None | ||||
|             and self._old_name.split("_")[0] == self._migration_name.split("_")[0] | ||||
|         ): | ||||
|             pass | ||||
|         elif self._old_version == self._migration_version: | ||||
|             self._index += 1 | ||||
|         else: | ||||
|             self._index = 1 | ||||
|  | ||||
|         script = textwrap.dedent(self._migration_script) | ||||
|         with open(f"{path}/{self._migration_name}.sql", "w+") as f: | ||||
|         with open(f"{path}/{self._index}_{self._migration_name}.sql", "w+") as f: | ||||
|             f.write(script) | ||||
|             f.close() | ||||
|  | ||||
|         self._old_version = self._migration_version | ||||
|         self._old_name = self._migration_name | ||||
|  | ||||
|         self._migration_name = None | ||||
|         self._migration_version = None | ||||
|         self._migration_script = None | ||||
|   | ||||
		Reference in New Issue
	
	Block a user