Compare commits
	
		
			33 Commits
		
	
	
		
			1.2.3
			...
			9622232c33
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9622232c33 | |||
| d09a13f0ee | |||
| 3360baad6c | |||
| 0de8b9b41d | |||
| 0e647fabe7 | |||
| 76787cb180 | |||
| 15b2e22642 | |||
| f520f4e7ec | |||
| 959cf33272 | |||
| be174cf970 | |||
| 934e0e1423 | |||
| 0c3e298562 | |||
| 42eeb068e3 | |||
| 89199004c4 | |||
| 8f26835d72 | |||
| 4c1de9e20b | |||
| 9c5760e0f9 | |||
| dd6b609094 | |||
| 3810dec927 | |||
| a87380f6f8 | |||
| 98ac7835b6 | |||
| 0a76068604 | |||
| f9caf59180 | |||
| 284318bb10 | |||
| 6130cac6fe | |||
| 3a64c51600 | |||
| 90fce5a79a | |||
| d448ad7707 | |||
| 19791ff9d8 | |||
| 3cba8de675 | |||
| b7ff070676 | |||
| c88e07d743 | |||
| f5b978b231 | 
| @@ -8,8 +8,14 @@ on: | |||||||
| jobs: | jobs: | ||||||
|   on-push-deploy_sh-edraft: |   on-push-deploy_sh-edraft: | ||||||
|     runs-on: [ dobby.sh-edraft.de, ubuntu-latest ] |     runs-on: [ dobby.sh-edraft.de, ubuntu-latest ] | ||||||
|     container: sh-edraft.de/act-runner:latest |     container: catthehacker/ubuntu:act-latest | ||||||
|     steps: |     steps: | ||||||
|  |       - name: Setup Python 3.10 | ||||||
|  |         uses: actions/setup-python@v3 | ||||||
|  |         with: | ||||||
|  |           python-version: "3.10.12" | ||||||
|  |       - run: python -v | ||||||
|  |  | ||||||
|       - name: Setup docker |       - name: Setup docker | ||||||
|         uses: https://github.com/papodaca/install-docker-action@main |         uses: https://github.com/papodaca/install-docker-action@main | ||||||
|       - run: docker -v |       - run: docker -v | ||||||
| @@ -20,12 +26,21 @@ jobs: | |||||||
|           token: ${{ secrets.CI_ACCESS_TOKEN }} |           token: ${{ secrets.CI_ACCESS_TOKEN }} | ||||||
|           submodules: true |           submodules: true | ||||||
|  |  | ||||||
|  |       - name: Shutdown stack | ||||||
|  |         run: docker stack rm sdb_staging | ||||||
|  |  | ||||||
|       - name: Prepare bot build |       - name: Prepare bot build | ||||||
|         run: | |         run: | | ||||||
|           cd bot |           cd bot | ||||||
|           python3.10 -m pip install --extra-index-url https://pip.sh-edraft.de cpl-cli |           pip install --extra-index-url https://pip.sh-edraft.de cpl-cli | ||||||
|           cpl i |           cpl i | ||||||
|  |  | ||||||
|  |       - name: Build docker bot | ||||||
|  |         run: | | ||||||
|  |           cd bot | ||||||
|  |           docker image prune -f | ||||||
|  |           cpl docker-build | ||||||
|  |  | ||||||
|       - name: Setup node |       - name: Setup node | ||||||
|         uses: https://github.com/actions/setup-node@v3 |         uses: https://github.com/actions/setup-node@v3 | ||||||
|  |  | ||||||
| @@ -33,31 +48,13 @@ jobs: | |||||||
|         run: | |         run: | | ||||||
|           cd web |           cd web | ||||||
|           npm install -g ts-node |           npm install -g ts-node | ||||||
|           npm ci |           npm i | ||||||
|  |  | ||||||
|       - name: Shutdown stack |  | ||||||
|         run: docker stack rm sdb_dev |  | ||||||
|  |  | ||||||
|       - name: Build docker bot |  | ||||||
|         run: | |  | ||||||
|           cd bot |  | ||||||
|           docker image prune -f |  | ||||||
|           cpl build |  | ||||||
|           docker build -t sh-edraft.de/sdb-bot:$(cpl gv)-dev . |  | ||||||
|  |  | ||||||
|       - name: Build docker web |       - name: Build docker web | ||||||
|         run: | |         run: | | ||||||
|           cd web |           cd web | ||||||
|           docker image prune -f |           docker image prune -f | ||||||
|           cp src/favicon.dev.ico src/favicon.ico |           npm run docker-build | ||||||
|           npm run build |  | ||||||
|           docker build -t sh-edraft.de/sdb-web:$(npm run -s gv)-dev . |  | ||||||
|  |  | ||||||
|       - name: Set version |  | ||||||
|         run: | |  | ||||||
|           cd bot/docker |  | ||||||
|           chmod +x ./set-docker-compose-image-version.sh |  | ||||||
|           ./set-docker-compose-image-version.sh sh-edraft.de/sdb-bot:$(cd ../; cpl gv)-dev sh-edraft.de/sdb-web:$(cd ../../web; npm run -s gv;)-dev |  | ||||||
|  |  | ||||||
|       - name: Deploy Stack to sh-edraft.de |       - name: Deploy Stack to sh-edraft.de | ||||||
|         uses: https://github.com/kgierke/portainer-stack-deployment@v1 |         uses: https://github.com/kgierke/portainer-stack-deployment@v1 | ||||||
| @@ -66,6 +63,6 @@ jobs: | |||||||
|           portainer-username: "gitea_job" |           portainer-username: "gitea_job" | ||||||
|           portainer-password: "${{ secrets.docker_job }}" |           portainer-password: "${{ secrets.docker_job }}" | ||||||
|           portainer-endpoint: 2 |           portainer-endpoint: 2 | ||||||
|           name: sdb_dev |           name: sdb_staging | ||||||
|           file: bot/docker/docker-compose.dev.yml |           file: bot/docker/docker-compose.staging.yml | ||||||
|           variables: '{}' |           variables: '{}' | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| name: Deploy prod on push | name: Deploy dev on push | ||||||
| run-name: Deploy prod on push | run-name: Deploy dev on push | ||||||
| on: | on: | ||||||
|   push: |   push: | ||||||
|     branches: |     branches: | ||||||
| @@ -8,24 +8,36 @@ on: | |||||||
| jobs: | jobs: | ||||||
|   on-push-deploy_sh-edraft: |   on-push-deploy_sh-edraft: | ||||||
|     runs-on: [ dobby.sh-edraft.de, ubuntu-latest ] |     runs-on: [ dobby.sh-edraft.de, ubuntu-latest ] | ||||||
|     container: sh-edraft.de/act-runner:latest |     container: catthehacker/ubuntu:act-latest | ||||||
|     steps: |     steps: | ||||||
|  |       - name: Setup Python 3.10 | ||||||
|  |         uses: actions/setup-python@v3 | ||||||
|  |         with: | ||||||
|  |           python-version: "3.10.12" | ||||||
|  |       - run: python -v | ||||||
|  |  | ||||||
|       - name: Setup docker |       - name: Setup docker | ||||||
|         uses: https://github.com/papodaca/install-docker-action@main |         uses: https://github.com/papodaca/install-docker-action@main | ||||||
|       - run: docker -v |       - run: docker -v | ||||||
|  |  | ||||||
|       - name: Clone Repository |       - name: Clone Repository | ||||||
|         uses: https://github.com/actions/checkout@v3 |         uses: https://github.com/actions/checkout@v3 | ||||||
|         with: |  | ||||||
|           token: ${{ secrets.CI_ACCESS_TOKEN }} |       - name: Shutdown stack | ||||||
|           submodules: true |         run: docker stack rm sdb_prod | ||||||
|  |  | ||||||
|       - name: Prepare bot build |       - name: Prepare bot build | ||||||
|         run: | |         run: | | ||||||
|           cd bot |           cd bot | ||||||
|           python3.10 -m pip install --extra-index-url https://pip.sh-edraft.de cpl-cli |           pip install --extra-index-url https://pip.sh-edraft.de cpl-cli | ||||||
|           cpl i |           cpl i | ||||||
|  |  | ||||||
|  |       - name: Build docker bot | ||||||
|  |         run: | | ||||||
|  |           cd bot | ||||||
|  |           docker image prune -f | ||||||
|  |           cpl docker-build | ||||||
|  |  | ||||||
|       - name: Setup node |       - name: Setup node | ||||||
|         uses: https://github.com/actions/setup-node@v3 |         uses: https://github.com/actions/setup-node@v3 | ||||||
|  |  | ||||||
| @@ -33,30 +45,13 @@ jobs: | |||||||
|         run: | |         run: | | ||||||
|           cd web |           cd web | ||||||
|           npm install -g ts-node |           npm install -g ts-node | ||||||
|           npm ci |           npm i | ||||||
|  |  | ||||||
|       - name: Shutdown stack |  | ||||||
|         run: docker stack rm sdb_prod |  | ||||||
|  |  | ||||||
|       - name: Build docker bot |  | ||||||
|         run: | |  | ||||||
|           cd bot |  | ||||||
|           docker image prune -f |  | ||||||
|           cpl build |  | ||||||
|           docker build -t sh-edraft.de/sdb-bot:$(cpl gv) . |  | ||||||
|  |  | ||||||
|       - name: Build docker web |       - name: Build docker web | ||||||
|         run: | |         run: | | ||||||
|           cd web |           cd web | ||||||
|           docker image prune -f |           docker image prune -f | ||||||
|           npm run build |           npm run docker-build | ||||||
|           docker build -t sh-edraft.de/sdb-web:$(npm run -s gv) . |  | ||||||
|  |  | ||||||
|       - name: Set version |  | ||||||
|         run: | |  | ||||||
|           cd bot/docker |  | ||||||
|           chmod +x ./set-docker-compose-image-version.sh |  | ||||||
|           ./set-docker-compose-image-version.sh sh-edraft.de/sdb-bot:$(cd ../; cpl gv) sh-edraft.de/sdb-web:$(cd ../../web; npm run -s gv;) |  | ||||||
|  |  | ||||||
|       - name: Deploy Stack to sh-edraft.de |       - name: Deploy Stack to sh-edraft.de | ||||||
|         uses: https://github.com/kgierke/portainer-stack-deployment@v1 |         uses: https://github.com/kgierke/portainer-stack-deployment@v1 | ||||||
| @@ -66,5 +61,5 @@ jobs: | |||||||
|           portainer-password: "${{ secrets.docker_job }}" |           portainer-password: "${{ secrets.docker_job }}" | ||||||
|           portainer-endpoint: 2 |           portainer-endpoint: 2 | ||||||
|           name: sdb_prod |           name: sdb_prod | ||||||
|           file: bot/docker/docker-compose.yml |           file: ./docker-compose.yml | ||||||
|           variables: '{}' |           variables: '{}' | ||||||
|   | |||||||
| @@ -1,71 +0,0 @@ | |||||||
| name: Deploy staging on push |  | ||||||
| run-name: Deploy staging on push |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - staging |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   on-push-deploy_sh-edraft: |  | ||||||
|     runs-on: [ dobby.sh-edraft.de, ubuntu-latest ] |  | ||||||
|     container: sh-edraft.de/act-runner:latest |  | ||||||
|     steps: |  | ||||||
|       - name: Setup docker |  | ||||||
|         uses: https://github.com/papodaca/install-docker-action@main |  | ||||||
|       - run: docker -v |  | ||||||
|  |  | ||||||
|       - name: Clone Repository |  | ||||||
|         uses: https://github.com/actions/checkout@v3 |  | ||||||
|         with: |  | ||||||
|           token: ${{ secrets.CI_ACCESS_TOKEN }} |  | ||||||
|           submodules: true |  | ||||||
|  |  | ||||||
|       - name: Prepare bot build |  | ||||||
|         run: | |  | ||||||
|           cd bot |  | ||||||
|           python3.10 -m pip install --extra-index-url https://pip.sh-edraft.de cpl-cli |  | ||||||
|           cpl i |  | ||||||
|  |  | ||||||
|       - name: Setup node |  | ||||||
|         uses: https://github.com/actions/setup-node@v3 |  | ||||||
|  |  | ||||||
|       - name: Prepare web build |  | ||||||
|         run: | |  | ||||||
|           cd web |  | ||||||
|           npm install -g ts-node |  | ||||||
|           npm ci |  | ||||||
|  |  | ||||||
|       - name: Shutdown stack |  | ||||||
|         run: docker stack rm sdb_staging |  | ||||||
|  |  | ||||||
|       - name: Build docker bot |  | ||||||
|         run: | |  | ||||||
|           cd bot |  | ||||||
|           docker image prune -f |  | ||||||
|           cpl build |  | ||||||
|           docker build -t sh-edraft.de/sdb-bot:$(cpl gv)-staging . |  | ||||||
|  |  | ||||||
|       - name: Build docker web |  | ||||||
|         run: | |  | ||||||
|           cd web |  | ||||||
|           docker image prune -f |  | ||||||
|           cp src/favicon.staging.ico src/favicon.ico |  | ||||||
|           npm run build |  | ||||||
|           docker build -t sh-edraft.de/sdb-web:$(npm run -s gv)-staging . |  | ||||||
|  |  | ||||||
|       - name: Set version |  | ||||||
|         run: | |  | ||||||
|           cd bot/docker |  | ||||||
|           chmod +x ./set-docker-compose-image-version.sh |  | ||||||
|           ./set-docker-compose-image-version.sh sh-edraft.de/sdb-bot:$(cd ../; cpl gv)-staging sh-edraft.de/sdb-web:$(cd ../../web; npm run -s gv;)-staging |  | ||||||
|  |  | ||||||
|       - name: Deploy Stack to sh-edraft.de |  | ||||||
|         uses: https://github.com/kgierke/portainer-stack-deployment@v1 |  | ||||||
|         with: |  | ||||||
|           portainer-url: "https://docker.sh-edraft.de" |  | ||||||
|           portainer-username: "gitea_job" |  | ||||||
|           portainer-password: "${{ secrets.docker_job }}" |  | ||||||
|           portainer-endpoint: 2 |  | ||||||
|           name: sdb_staging |  | ||||||
|           file: bot/docker/docker-compose.staging.yml |  | ||||||
|           variables: '{}' |  | ||||||
| @@ -21,8 +21,7 @@ | |||||||
|       "checks": "tools/checks/checks.json", |       "checks": "tools/checks/checks.json", | ||||||
|       "get-version": "tools/get_version/get-version.json", |       "get-version": "tools/get_version/get-version.json", | ||||||
|       "post-build": "tools/post_build/post-build.json", |       "post-build": "tools/post_build/post-build.json", | ||||||
|       "set-version": "tools/set_version/set-version.json", |       "set-version": "tools/set_version/set-version.json" | ||||||
|       "migration-to-sql": "tools/migration_to_sql/migration-to-sql.json" |  | ||||||
|     }, |     }, | ||||||
|     "Scripts": { |     "Scripts": { | ||||||
|       "format": "black ./", |       "format": "black ./", | ||||||
|   | |||||||
 Submodule bot/docker updated: b0bacce9f6...91461d3ce3
									
								
							| @@ -15,7 +15,7 @@ __title__ = "bot" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ from bot_api.api_thread import ApiThread | |||||||
| from bot_core.abc.task_abc import TaskABC | from bot_core.abc.task_abc import TaskABC | ||||||
| from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum | from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum | ||||||
| from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings | from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings | ||||||
| from bot_core.environment_variables import MAINTENANCE |  | ||||||
| from bot_core.service.data_integrity_service import DataIntegrityService | from bot_core.service.data_integrity_service import DataIntegrityService | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -59,7 +58,6 @@ class Application(DiscordBotApplicationABC): | |||||||
|                 return |                 return | ||||||
|  |  | ||||||
|             self._logger.info(__name__, f"Try to start {DiscordBotService.__name__}") |             self._logger.info(__name__, f"Try to start {DiscordBotService.__name__}") | ||||||
|             if not self._config.get_configuration(MAINTENANCE): |  | ||||||
|             for task in self._tasks: |             for task in self._tasks: | ||||||
|                 await self._bot.add_cog(task) |                 await self._bot.add_cog(task) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										0
									
								
								bot/src/bot/bot
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										0
									
								
								bot/src/bot/bot
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -4,7 +4,7 @@ | |||||||
|     "Version": { |     "Version": { | ||||||
|       "Major": "1", |       "Major": "1", | ||||||
|       "Minor": "2", |       "Minor": "2", | ||||||
|       "Micro": "2" |       "Micro": "0" | ||||||
|     }, |     }, | ||||||
|     "Author": "Sven Heidemann", |     "Author": "Sven Heidemann", | ||||||
|     "AuthorEmail": "sven.heidemann@sh-edraft.de", |     "AuthorEmail": "sven.heidemann@sh-edraft.de", | ||||||
| @@ -37,8 +37,7 @@ | |||||||
|     ], |     ], | ||||||
|     "DevDependencies": [ |     "DevDependencies": [ | ||||||
|       "cpl-cli==2023.4.0.post3", |       "cpl-cli==2023.4.0.post3", | ||||||
|       "pygount==1.6.1", |       "pygount==1.6.1" | ||||||
|       "black==23.10.1" |  | ||||||
|     ], |     ], | ||||||
|     "PythonVersion": ">=3.10.4", |     "PythonVersion": ">=3.10.4", | ||||||
|     "PythonPath": {}, |     "PythonPath": {}, | ||||||
|   | |||||||
 Submodule bot/src/bot/config updated: c11ca6f2e8...6f4414ce9d
									
								
							| @@ -15,7 +15,7 @@ __title__ = "bot.extension" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -1,22 +0,0 @@ | |||||||
| import os |  | ||||||
| import shutil |  | ||||||
| from datetime import datetime |  | ||||||
|  |  | ||||||
| from cpl_core.application.application_extension_abc import ApplicationExtensionABC |  | ||||||
| from cpl_core.configuration import ConfigurationABC |  | ||||||
| from cpl_core.dependency_injection import ServiceProviderABC |  | ||||||
| from cpl_query.extension import List |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class CleanLogsExtension(ApplicationExtensionABC): |  | ||||||
|     def __init__(self): |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     async def run(self, config: ConfigurationABC, services: ServiceProviderABC): |  | ||||||
|         ( |  | ||||||
|             List(str, os.listdir("logs/")) |  | ||||||
|             .where(lambda x: os.path.isdir(f"logs/{x}")) |  | ||||||
|             .order_by() |  | ||||||
|             .where(lambda x: (datetime.now() - datetime.strptime(x, "%Y-%m-%d")).days >= 7) |  | ||||||
|             .for_each(lambda x: shutil.rmtree(f"logs/{x}")) |  | ||||||
|         ) |  | ||||||
| @@ -6,11 +6,10 @@ from cpl_core.application import ApplicationBuilder | |||||||
| from cpl_core.console import Console | from cpl_core.console import Console | ||||||
|  |  | ||||||
| from bot.application import Application | from bot.application import Application | ||||||
| from bot.extension.clean_logs_extension import CleanLogsExtension |  | ||||||
| from bot.extension.init_bot_extension import InitBotExtension | from bot.extension.init_bot_extension import InitBotExtension | ||||||
| from bot.startup import Startup | from bot.startup import Startup | ||||||
| from bot.startup_discord_extension import StartupDiscordExtension | from bot.startup_discord_extension import StartupDiscordExtension | ||||||
| from bot_data.startup_migration_extension import StartupMigrationExtension | from bot.startup_migration_extension import StartupMigrationExtension | ||||||
| from bot.startup_module_extension import StartupModuleExtension | from bot.startup_module_extension import StartupModuleExtension | ||||||
| from bot.startup_settings_extension import StartupSettingsExtension | from bot.startup_settings_extension import StartupSettingsExtension | ||||||
| from bot_api.app_api_extension import AppApiExtension | from bot_api.app_api_extension import AppApiExtension | ||||||
| @@ -32,7 +31,6 @@ class Program: | |||||||
|             .use_extension(StartupDiscordExtension) |             .use_extension(StartupDiscordExtension) | ||||||
|             .use_extension(StartupModuleExtension) |             .use_extension(StartupModuleExtension) | ||||||
|             .use_extension(StartupMigrationExtension) |             .use_extension(StartupMigrationExtension) | ||||||
|             .use_extension(CleanLogsExtension) |  | ||||||
|             .use_extension(DatabaseExtension) |             .use_extension(DatabaseExtension) | ||||||
|             .use_extension(ConfigExtension) |             .use_extension(ConfigExtension) | ||||||
|             .use_extension(InitBotExtension) |             .use_extension(InitBotExtension) | ||||||
|   | |||||||
							
								
								
									
										70
									
								
								bot/src/bot/startup_migration_extension.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								bot/src/bot/startup_migration_extension.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | from cpl_core.application import StartupExtensionABC | ||||||
|  | from cpl_core.configuration import ConfigurationABC | ||||||
|  | from cpl_core.dependency_injection import ServiceCollectionABC | ||||||
|  | from cpl_core.environment import ApplicationEnvironmentABC | ||||||
|  |  | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.migration.achievements_migration import AchievementsMigration | ||||||
|  | from bot_data.migration.api_key_migration import ApiKeyMigration | ||||||
|  | from bot_data.migration.api_migration import ApiMigration | ||||||
|  | from bot_data.migration.auto_role_fix1_migration import AutoRoleFix1Migration | ||||||
|  | from bot_data.migration.auto_role_migration import AutoRoleMigration | ||||||
|  | from bot_data.migration.birthday_migration import BirthdayMigration | ||||||
|  | from bot_data.migration.config_feature_flags_migration import ( | ||||||
|  |     ConfigFeatureFlagsMigration, | ||||||
|  | ) | ||||||
|  | from bot_data.migration.config_migration import ConfigMigration | ||||||
|  | from bot_data.migration.db_history_migration import DBHistoryMigration | ||||||
|  | from bot_data.migration.default_role_migration import DefaultRoleMigration | ||||||
|  | from bot_data.migration.fix_updates_migration import FixUpdatesMigration | ||||||
|  | from bot_data.migration.fix_user_history_migration import FixUserHistoryMigration | ||||||
|  | from bot_data.migration.initial_migration import InitialMigration | ||||||
|  | from bot_data.migration.level_migration import LevelMigration | ||||||
|  | from bot_data.migration.remove_stats_migration import RemoveStatsMigration | ||||||
|  | from bot_data.migration.short_role_name_migration import ShortRoleNameMigration | ||||||
|  | from bot_data.migration.short_role_name_only_highest_migration import ( | ||||||
|  |     ShortRoleNameOnlyHighestMigration, | ||||||
|  | ) | ||||||
|  | from bot_data.migration.stats_migration import StatsMigration | ||||||
|  | from bot_data.migration.steam_special_offer_migration import SteamSpecialOfferMigration | ||||||
|  | from bot_data.migration.user_joined_game_server_migration import ( | ||||||
|  |     UserJoinedGameServerMigration, | ||||||
|  | ) | ||||||
|  | from bot_data.migration.user_message_count_per_hour_migration import ( | ||||||
|  |     UserMessageCountPerHourMigration, | ||||||
|  | ) | ||||||
|  | from bot_data.migration.user_warning_migration import UserWarningMigration | ||||||
|  | from bot_data.service.migration_service import MigrationService | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class StartupMigrationExtension(StartupExtensionABC): | ||||||
|  |     def __init__(self): | ||||||
|  |         pass | ||||||
|  |  | ||||||
|  |     def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): | ||||||
|  |         pass | ||||||
|  |  | ||||||
|  |     def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC): | ||||||
|  |         services.add_transient(MigrationService) | ||||||
|  |         services.add_transient(MigrationABC, InitialMigration) | ||||||
|  |         services.add_transient(MigrationABC, AutoRoleMigration)  # 03.10.2022 #54 - 0.2.2 | ||||||
|  |         services.add_transient(MigrationABC, ApiMigration)  # 15.10.2022 #70 - 0.3.0 | ||||||
|  |         services.add_transient(MigrationABC, LevelMigration)  # 06.11.2022 #25 - 0.3.0 | ||||||
|  |         services.add_transient(MigrationABC, StatsMigration)  # 09.11.2022 #46 - 0.3.0 | ||||||
|  |         services.add_transient(MigrationABC, AutoRoleFix1Migration)  # 30.12.2022 #151 - 0.3.0 | ||||||
|  |         services.add_transient(MigrationABC, UserMessageCountPerHourMigration)  # 11.01.2023 #168 - 0.3.1 | ||||||
|  |         services.add_transient(MigrationABC, ApiKeyMigration)  # 09.02.2023 #162 - 1.0.0 | ||||||
|  |         services.add_transient(MigrationABC, UserJoinedGameServerMigration)  # 12.02.2023 #181 - 1.0.0 | ||||||
|  |         services.add_transient(MigrationABC, RemoveStatsMigration)  # 19.02.2023 #190 - 1.0.0 | ||||||
|  |         services.add_transient(MigrationABC, UserWarningMigration)  # 21.02.2023 #35 - 1.0.0 | ||||||
|  |         services.add_transient(MigrationABC, DBHistoryMigration)  # 06.03.2023 #246 - 1.0.0 | ||||||
|  |         services.add_transient(MigrationABC, AchievementsMigration)  # 14.06.2023 #268 - 1.1.0 | ||||||
|  |         services.add_transient(MigrationABC, ConfigMigration)  # 19.07.2023 #127 - 1.1.0 | ||||||
|  |         services.add_transient(MigrationABC, ConfigFeatureFlagsMigration)  # 15.08.2023 #334 - 1.1.0 | ||||||
|  |         services.add_transient(MigrationABC, DefaultRoleMigration)  # 24.09.2023 #360 - 1.1.3 | ||||||
|  |         services.add_transient(MigrationABC, ShortRoleNameMigration)  # 28.09.2023 #378 - 1.1.7 | ||||||
|  |         services.add_transient(MigrationABC, FixUpdatesMigration)  # 28.09.2023 #378 - 1.1.7 | ||||||
|  |         services.add_transient(MigrationABC, ShortRoleNameOnlyHighestMigration)  # 02.10.2023 #391 - 1.1.9 | ||||||
|  |         services.add_transient(MigrationABC, FixUserHistoryMigration)  # 10.10.2023 #401 - 1.2.0 | ||||||
|  |         services.add_transient(MigrationABC, BirthdayMigration)  # 10.10.2023 #401 - 1.2.0 | ||||||
|  |         services.add_transient(MigrationABC, SteamSpecialOfferMigration)  # 10.10.2023 #188 - 1.2.0 | ||||||
| @@ -8,7 +8,6 @@ from cpl_core.dependency_injection import ServiceCollectionABC | |||||||
| from cpl_core.environment import ApplicationEnvironmentABC | from cpl_core.environment import ApplicationEnvironmentABC | ||||||
|  |  | ||||||
| from bot_core.configuration.bot_logging_settings import BotLoggingSettings | from bot_core.configuration.bot_logging_settings import BotLoggingSettings | ||||||
| from bot_core.environment_variables import MAINTENANCE, MIGRATION_ONLY |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class StartupSettingsExtension(StartupExtensionABC): | class StartupSettingsExtension(StartupExtensionABC): | ||||||
| @@ -20,12 +19,6 @@ class StartupSettingsExtension(StartupExtensionABC): | |||||||
|         environment.set_working_directory(os.path.dirname(os.path.realpath(__file__))) |         environment.set_working_directory(os.path.dirname(os.path.realpath(__file__))) | ||||||
|         configuration.add_environment_variables("SDB_") |         configuration.add_environment_variables("SDB_") | ||||||
|         configuration.add_environment_variables("DISCORD_") |         configuration.add_environment_variables("DISCORD_") | ||||||
|         configuration.add_configuration( |  | ||||||
|             MAINTENANCE, configuration.get_configuration(MAINTENANCE) in [True, "true", "True"] |  | ||||||
|         ) |  | ||||||
|         configuration.add_configuration( |  | ||||||
|             MIGRATION_ONLY, configuration.get_configuration(MIGRATION_ONLY) in [True, "true", "True"] |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         configuration.add_json_file(f"config/appsettings.json", optional=False) |         configuration.add_json_file(f"config/appsettings.json", optional=False) | ||||||
|         configuration.add_json_file(f"config/appsettings.{environment.environment_name}.json", optional=True) |         configuration.add_json_file(f"config/appsettings.{environment.environment_name}.json", optional=True) | ||||||
|   | |||||||
| @@ -90,8 +90,7 @@ | |||||||
|       "booting": "Ich fahre gerade hoch...", |       "booting": "Ich fahre gerade hoch...", | ||||||
|       "restart": "Muss neue Kekse holen...", |       "restart": "Muss neue Kekse holen...", | ||||||
|       "running": "Ich esse Kekse :D", |       "running": "Ich esse Kekse :D", | ||||||
|       "shutdown": "Ich werde bestimmt wieder kommen...", |       "shutdown": "Ich werde bestimmt wieder kommen..." | ||||||
|       "maintenance": "In Wartung!" |  | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "modules": { |   "modules": { | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.abc" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|     "Version": { |     "Version": { | ||||||
|       "Major": "1", |       "Major": "1", | ||||||
|       "Minor": "2", |       "Minor": "2", | ||||||
|       "Micro": "2" |       "Micro": "0" | ||||||
|     }, |     }, | ||||||
|     "Author": "", |     "Author": "", | ||||||
|     "AuthorEmail": "", |     "AuthorEmail": "", | ||||||
|   | |||||||
 Submodule bot/src/bot_api/config updated: 521951b8ab...b6ffed4da1
									
								
							| @@ -15,7 +15,7 @@ __title__ = "bot_api.configuration" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports | # imports | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.controller" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -14,10 +14,7 @@ from bot_api.model.reset_password_dto import ResetPasswordDTO | |||||||
| from bot_api.model.token_dto import TokenDTO | from bot_api.model.token_dto import TokenDTO | ||||||
| from bot_api.model.update_auth_user_dto import UpdateAuthUserDTO | from bot_api.model.update_auth_user_dto import UpdateAuthUserDTO | ||||||
| from bot_api.route.route import Route | from bot_api.route.route import Route | ||||||
| from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum |  | ||||||
| from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings |  | ||||||
| from bot_data.model.auth_role_enum import AuthRoleEnum | from bot_data.model.auth_role_enum import AuthRoleEnum | ||||||
| from bot_data.model.technician_config import TechnicianConfig |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class AuthController: | class AuthController: | ||||||
| @@ -33,7 +30,6 @@ class AuthController: | |||||||
|         mail_settings: EMailClientSettings, |         mail_settings: EMailClientSettings, | ||||||
|         mailer: EMailClientABC, |         mailer: EMailClientABC, | ||||||
|         auth_service: AuthServiceABC, |         auth_service: AuthServiceABC, | ||||||
|         technician_config: TechnicianConfig, |  | ||||||
|     ): |     ): | ||||||
|         self._config = config |         self._config = config | ||||||
|         self._env = env |         self._env = env | ||||||
| @@ -43,7 +39,6 @@ class AuthController: | |||||||
|         self._mail_settings = mail_settings |         self._mail_settings = mail_settings | ||||||
|         self._mailer = mailer |         self._mailer = mailer | ||||||
|         self._auth_service = auth_service |         self._auth_service = auth_service | ||||||
|         self._technician_config = technician_config |  | ||||||
|  |  | ||||||
|     @Route.get(f"{BasePath}/users") |     @Route.get(f"{BasePath}/users") | ||||||
|     @Route.authorize(role=AuthRoleEnum.admin) |     @Route.authorize(role=AuthRoleEnum.admin) | ||||||
| @@ -75,32 +70,17 @@ class AuthController: | |||||||
|  |  | ||||||
|     @Route.post(f"{BasePath}/register") |     @Route.post(f"{BasePath}/register") | ||||||
|     async def register(self): |     async def register(self): | ||||||
|         if not FeatureFlagsSettings.get_flag_from_dict( |  | ||||||
|             self._technician_config.feature_flags, FeatureFlagsEnum.basic_registration |  | ||||||
|         ): |  | ||||||
|             return |  | ||||||
|  |  | ||||||
|         dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True)) |         dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True)) | ||||||
|         self._auth_service.add_auth_user(dto) |         self._auth_service.add_auth_user(dto) | ||||||
|         return "", 200 |         return "", 200 | ||||||
|  |  | ||||||
|     @Route.post(f"{BasePath}/register-by-id/<id>") |     @Route.post(f"{BasePath}/register-by-id/<id>") | ||||||
|     async def register_id(self, id: str): |     async def register_id(self, id: str): | ||||||
|         if not FeatureFlagsSettings.get_flag_from_dict( |  | ||||||
|             self._technician_config.feature_flags, FeatureFlagsEnum.basic_registration |  | ||||||
|         ): |  | ||||||
|             return |  | ||||||
|  |  | ||||||
|         result = await self._auth_service.confirm_email_async(id) |         result = await self._auth_service.confirm_email_async(id) | ||||||
|         return jsonify(result) |         return jsonify(result) | ||||||
|  |  | ||||||
|     @Route.post(f"{BasePath}/login") |     @Route.post(f"{BasePath}/login") | ||||||
|     async def login(self) -> Response: |     async def login(self) -> Response: | ||||||
|         if not FeatureFlagsSettings.get_flag_from_dict( |  | ||||||
|             self._technician_config.feature_flags, FeatureFlagsEnum.basic_login |  | ||||||
|         ): |  | ||||||
|             return jsonify({}) |  | ||||||
|  |  | ||||||
|         dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True)) |         dto: AuthUserDTO = JSONProcessor.process(AuthUserDTO, request.get_json(force=True, silent=True)) | ||||||
|         result = await self._auth_service.login_async(dto) |         result = await self._auth_service.login_async(dto) | ||||||
|         return jsonify(result.to_dict()) |         return jsonify(result.to_dict()) | ||||||
| @@ -120,11 +100,6 @@ class AuthController: | |||||||
|  |  | ||||||
|     @Route.post(f"{BasePath}/forgot-password/<email>") |     @Route.post(f"{BasePath}/forgot-password/<email>") | ||||||
|     async def forgot_password(self, email: str): |     async def forgot_password(self, email: str): | ||||||
|         if not FeatureFlagsSettings.get_flag_from_dict( |  | ||||||
|             self._technician_config.feature_flags, FeatureFlagsEnum.basic_login |  | ||||||
|         ): |  | ||||||
|             return "", 409 |  | ||||||
|  |  | ||||||
|         await self._auth_service.forgot_password_async(email) |         await self._auth_service.forgot_password_async(email) | ||||||
|         return "", 200 |         return "", 200 | ||||||
|  |  | ||||||
| @@ -135,11 +110,6 @@ class AuthController: | |||||||
|  |  | ||||||
|     @Route.post(f"{BasePath}/reset-password") |     @Route.post(f"{BasePath}/reset-password") | ||||||
|     async def reset_password(self): |     async def reset_password(self): | ||||||
|         if not FeatureFlagsSettings.get_flag_from_dict( |  | ||||||
|             self._technician_config.feature_flags, FeatureFlagsEnum.basic_login |  | ||||||
|         ): |  | ||||||
|             return "", 409 |  | ||||||
|  |  | ||||||
|         dto: ResetPasswordDTO = JSONProcessor.process(ResetPasswordDTO, request.get_json(force=True, silent=True)) |         dto: ResetPasswordDTO = JSONProcessor.process(ResetPasswordDTO, request.get_json(force=True, silent=True)) | ||||||
|         await self._auth_service.reset_password_async(dto) |         await self._auth_service.reset_password_async(dto) | ||||||
|         return "", 200 |         return "", 200 | ||||||
|   | |||||||
| @@ -12,9 +12,6 @@ from bot_api.logging.api_logger import ApiLogger | |||||||
| from bot_api.model.settings_dto import SettingsDTO | from bot_api.model.settings_dto import SettingsDTO | ||||||
| from bot_api.model.version_dto import VersionDTO | from bot_api.model.version_dto import VersionDTO | ||||||
| from bot_api.route.route import Route | from bot_api.route.route import Route | ||||||
| from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum |  | ||||||
| from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings |  | ||||||
| from bot_data.model.technician_config import TechnicianConfig |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class GuiController: | class GuiController: | ||||||
| @@ -85,11 +82,3 @@ class GuiController: | |||||||
|         ) |         ) | ||||||
|         self._mailer.send_mail(mail) |         self._mailer.send_mail(mail) | ||||||
|         return "", 200 |         return "", 200 | ||||||
|  |  | ||||||
|     @Route.get(f"{BasePath}/has-feature-flag/<flag>") |  | ||||||
|     async def has_feature_flag(self, flag: str): |  | ||||||
|         settings: TechnicianConfig = self._config.get_configuration(TechnicianConfig) |  | ||||||
|         return { |  | ||||||
|             "key": flag, |  | ||||||
|             "value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(flag)), |  | ||||||
|         } |  | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.event" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.exception" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.filter" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.filter.discord" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.logging" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.model" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.model.discord" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.route" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.service" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports | # imports | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.transformer" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports | # imports | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.abc" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -75,7 +75,3 @@ class ClientUtilsABC(ABC): | |||||||
|     @abstractmethod |     @abstractmethod | ||||||
|     async def check_default_role(self, member: Union[discord.User, discord.Member]): |     async def check_default_role(self, member: Union[discord.User, discord.Member]): | ||||||
|         pass |         pass | ||||||
|  |  | ||||||
|     @abstractmethod |  | ||||||
|     async def set_maintenance_mode(self, state: bool): |  | ||||||
|         pass |  | ||||||
|   | |||||||
| @@ -6,7 +6,6 @@ from cpl_core.dependency_injection import ServiceProviderABC | |||||||
| from cpl_discord.service import DiscordBotServiceABC | from cpl_discord.service import DiscordBotServiceABC | ||||||
| from discord.ext import commands | from discord.ext import commands | ||||||
|  |  | ||||||
| from bot_core.environment_variables import MAINTENANCE |  | ||||||
| from bot_core.logging.task_logger import TaskLogger | from bot_core.logging.task_logger import TaskLogger | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -15,18 +14,14 @@ class TaskABC(commands.Cog): | |||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         commands.Cog.__init__(self) |         commands.Cog.__init__(self) | ||||||
|  |  | ||||||
|     @ServiceProviderABC.inject |  | ||||||
|     def _is_maintenance(self, config: ConfigurationABC) -> bool: |  | ||||||
|         return config.get_configuration(MAINTENANCE) is True |  | ||||||
|  |  | ||||||
|     @ServiceProviderABC.inject |     @ServiceProviderABC.inject | ||||||
|     async def _wait_until_ready(self, config: ConfigurationABC, logger: TaskLogger, bot: DiscordBotServiceABC): |     async def _wait_until_ready(self, config: ConfigurationABC, logger: TaskLogger, bot: DiscordBotServiceABC): | ||||||
|         logger.debug(__name__, f"Waiting before ready {type(self).__name__}") |         logger.debug(__name__, f"Waiting before {type(self).__name__}") | ||||||
|         await bot.wait_until_ready() |         await bot.wait_until_ready() | ||||||
|  |  | ||||||
|         async def wait(): |         async def wait(): | ||||||
|             is_ready = config.get_configuration("IS_READY") is True |             is_ready = config.get_configuration("IS_READY") | ||||||
|             if not is_ready: |             if is_ready != "true": | ||||||
|                 await asyncio.sleep(1) |                 await asyncio.sleep(1) | ||||||
|                 await wait() |                 await wait() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|     "Version": { |     "Version": { | ||||||
|       "Major": "1", |       "Major": "1", | ||||||
|       "Minor": "2", |       "Minor": "2", | ||||||
|       "Micro": "2" |       "Micro": "0" | ||||||
|     }, |     }, | ||||||
|     "Author": "Sven Heidemann", |     "Author": "Sven Heidemann", | ||||||
|     "AuthorEmail": "sven.heidemann@sh-edraft.de", |     "AuthorEmail": "sven.heidemann@sh-edraft.de", | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.configuration" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -27,6 +27,3 @@ class FeatureFlagsEnum(Enum): | |||||||
|     short_role_name = "ShortRoleName" |     short_role_name = "ShortRoleName" | ||||||
|     technician_full_access = "TechnicianFullAccess" |     technician_full_access = "TechnicianFullAccess" | ||||||
|     steam_special_offers = "SteamSpecialOffers" |     steam_special_offers = "SteamSpecialOffers" | ||||||
|     scheduled_events = "ScheduledEvents" |  | ||||||
|     basic_registration = "BasicRegistration" |  | ||||||
|     basic_login = "BasicLogin" |  | ||||||
|   | |||||||
| @@ -29,9 +29,6 @@ class FeatureFlagsSettings(ConfigurationModelABC): | |||||||
|         FeatureFlagsEnum.short_role_name.value: False,  # 28.09.2023 #378 |         FeatureFlagsEnum.short_role_name.value: False,  # 28.09.2023 #378 | ||||||
|         FeatureFlagsEnum.technician_full_access.value: False,  # 03.10.2023 #393 |         FeatureFlagsEnum.technician_full_access.value: False,  # 03.10.2023 #393 | ||||||
|         FeatureFlagsEnum.steam_special_offers.value: False,  # 11.10.2023 #188 |         FeatureFlagsEnum.steam_special_offers.value: False,  # 11.10.2023 #188 | ||||||
|         FeatureFlagsEnum.scheduled_events.value: False,  # 14.11.2023 #410 |  | ||||||
|         FeatureFlagsEnum.basic_registration.value: False,  # 19.11.2023 #440 |  | ||||||
|         FeatureFlagsEnum.basic_login.value: False,  # 19.11.2023 #440 |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     def __init__(self, **kwargs: dict): |     def __init__(self, **kwargs: dict): | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.core_extension" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -1,19 +1,16 @@ | |||||||
| import asyncio | import asyncio | ||||||
|  |  | ||||||
| from cpl_core.configuration import ConfigurationABC |  | ||||||
| from cpl_core.logging import LoggerABC | from cpl_core.logging import LoggerABC | ||||||
| from cpl_discord.events import OnReadyABC | from cpl_discord.events import OnReadyABC | ||||||
| from cpl_discord.service import DiscordBotServiceABC | from cpl_discord.service import DiscordBotServiceABC | ||||||
| from cpl_translation import TranslatePipe | from cpl_translation import TranslatePipe | ||||||
|  |  | ||||||
| from bot_core.abc.client_utils_abc import ClientUtilsABC | from bot_core.abc.client_utils_abc import ClientUtilsABC | ||||||
| from bot_core.environment_variables import MAINTENANCE |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class CoreExtensionOnReadyEvent(OnReadyABC): | class CoreExtensionOnReadyEvent(OnReadyABC): | ||||||
|     def __init__( |     def __init__( | ||||||
|         self, |         self, | ||||||
|         config: ConfigurationABC, |  | ||||||
|         logger: LoggerABC, |         logger: LoggerABC, | ||||||
|         bot: DiscordBotServiceABC, |         bot: DiscordBotServiceABC, | ||||||
|         client_utils: ClientUtilsABC, |         client_utils: ClientUtilsABC, | ||||||
| @@ -21,7 +18,6 @@ class CoreExtensionOnReadyEvent(OnReadyABC): | |||||||
|     ): |     ): | ||||||
|         OnReadyABC.__init__(self) |         OnReadyABC.__init__(self) | ||||||
|  |  | ||||||
|         self._config = config |  | ||||||
|         self._logger = logger |         self._logger = logger | ||||||
|         self._bot = bot |         self._bot = bot | ||||||
|         self._client_utils = client_utils |         self._client_utils = client_utils | ||||||
| @@ -31,5 +27,5 @@ class CoreExtensionOnReadyEvent(OnReadyABC): | |||||||
|  |  | ||||||
|     async def on_ready(self): |     async def on_ready(self): | ||||||
|         self._logger.debug(__name__, f"Module {type(self)} started") |         self._logger.debug(__name__, f"Module {type(self)} started") | ||||||
|         await self._client_utils.set_maintenance_mode(self._config.get_configuration(MAINTENANCE)) |         await self._client_utils.presence_game("common.presence.running") | ||||||
|         self._logger.trace(__name__, f"Module {type(self)} stopped") |         self._logger.trace(__name__, f"Module {type(self)} stopped") | ||||||
|   | |||||||
| @@ -1,2 +0,0 @@ | |||||||
| MIGRATION_ONLY = "MIGRATION_ONLY" |  | ||||||
| MAINTENANCE = "MAINTENANCE" |  | ||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.events" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.exception" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.helper" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| import inspect |  | ||||||
| from typing import Optional | from typing import Optional | ||||||
|  |  | ||||||
| from discord.ext import commands | from discord.ext import commands | ||||||
| @@ -18,18 +17,11 @@ class EventChecks: | |||||||
|         cls._client_utils = client_utils |         cls._client_utils = client_utils | ||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
|     def check_is_ready(cls, func): |     def check_is_ready(cls): | ||||||
|         async def check_if_bot_is_ready(*args, **kwargs): |         async def check_if_bot_is_ready() -> bool: | ||||||
|             result = await cls._client_utils.check_if_bot_is_ready_yet() |             result = await cls._client_utils.check_if_bot_is_ready_yet() | ||||||
|             if not result: |             if not result: | ||||||
|  |                 raise CheckError(f"Bot is not ready") | ||||||
|  |             return result | ||||||
|  |  | ||||||
|                 def empty(*args, **kwargs): |         return commands.check(check_if_bot_is_ready) | ||||||
|                     return |  | ||||||
|  |  | ||||||
|                 return empty |  | ||||||
|             return await func(*args, **kwargs) |  | ||||||
|  |  | ||||||
|         check_if_bot_is_ready.__name__ = func.__name__ |  | ||||||
|         sig = inspect.signature(func) |  | ||||||
|         check_if_bot_is_ready.__signature__ = sig.replace(parameters=tuple(sig.parameters.values())[1:]) |  | ||||||
|         return check_if_bot_is_ready |  | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.logging" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports | # imports | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.pipes" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports | # imports | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.service" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports: | # imports: | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -16,7 +16,6 @@ from bot_core.abc.client_utils_abc import ClientUtilsABC | |||||||
| from bot_core.abc.message_service_abc import MessageServiceABC | from bot_core.abc.message_service_abc import MessageServiceABC | ||||||
| from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum | from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum | ||||||
| from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings | from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings | ||||||
| from bot_core.environment_variables import MAINTENANCE |  | ||||||
| from bot_data.abc.client_repository_abc import ClientRepositoryABC | from bot_data.abc.client_repository_abc import ClientRepositoryABC | ||||||
| from bot_data.abc.server_repository_abc import ServerRepositoryABC | from bot_data.abc.server_repository_abc import ServerRepositoryABC | ||||||
| from bot_data.abc.user_joined_voice_channel_repository_abc import ( | from bot_data.abc.user_joined_voice_channel_repository_abc import ( | ||||||
| @@ -88,14 +87,7 @@ class ClientUtilsService(ClientUtilsABC): | |||||||
|         return client |         return client | ||||||
|  |  | ||||||
|     async def check_if_bot_is_ready_yet(self) -> bool: |     async def check_if_bot_is_ready_yet(self) -> bool: | ||||||
|         if self._config.get_configuration(MAINTENANCE): |         if self._config.get_configuration("IS_READY") == "true": | ||||||
|             self._logger.warn( |  | ||||||
|                 __name__, |  | ||||||
|                 f"Bot is in maintenance mode", |  | ||||||
|             ) |  | ||||||
|             return False |  | ||||||
|  |  | ||||||
|         if self._config.get_configuration("IS_READY") is True: |  | ||||||
|             return True |             return True | ||||||
|  |  | ||||||
|         self._logger.debug( |         self._logger.debug( | ||||||
| @@ -247,10 +239,3 @@ class ClientUtilsService(ClientUtilsABC): | |||||||
|  |  | ||||||
|         except Exception as e: |         except Exception as e: | ||||||
|             self._logger.error(__name__, f"Cannot check for default role for member {member.id}", e) |             self._logger.error(__name__, f"Cannot check for default role for member {member.id}", e) | ||||||
|  |  | ||||||
|     async def set_maintenance_mode(self, state: bool): |  | ||||||
|         self._config.add_configuration(MAINTENANCE, state) |  | ||||||
|         if state: |  | ||||||
|             await self.presence_game("common.presence.maintenance") |  | ||||||
|         else: |  | ||||||
|             await self.presence_game("common.presence.running") |  | ||||||
|   | |||||||
| @@ -7,7 +7,6 @@ from bot_data.abc.technician_config_repository_abc import TechnicianConfigReposi | |||||||
| from bot_data.model.server import Server | from bot_data.model.server import Server | ||||||
| from bot_data.model.technician_config import TechnicianConfig | from bot_data.model.technician_config import TechnicianConfig | ||||||
| from bot_data.service.server_config_seeder import ServerConfigSeeder | from bot_data.service.server_config_seeder import ServerConfigSeeder | ||||||
| from bot_data.service.technician_config_seeder import TechnicianConfigSeeder |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class ConfigService: | class ConfigService: | ||||||
| @@ -17,24 +16,17 @@ class ConfigService: | |||||||
|         services: ServiceProviderABC, |         services: ServiceProviderABC, | ||||||
|         technician_config_repo: TechnicianConfigRepositoryABC, |         technician_config_repo: TechnicianConfigRepositoryABC, | ||||||
|         server_config_repo: ServerConfigRepositoryABC, |         server_config_repo: ServerConfigRepositoryABC, | ||||||
|         technician_seeder: TechnicianConfigSeeder, |  | ||||||
|         server_seeder: ServerConfigSeeder, |         server_seeder: ServerConfigSeeder, | ||||||
|     ): |     ): | ||||||
|         self._config = config |         self._config = config | ||||||
|         self._services = services |         self._services = services | ||||||
|         self._technician_config_repo = technician_config_repo |         self._technician_config_repo = technician_config_repo | ||||||
|         self._technician_seeder = technician_seeder |  | ||||||
|         self._server_config_repo = server_config_repo |         self._server_config_repo = server_config_repo | ||||||
|  |  | ||||||
|         self._server_seeder = server_seeder |         self._server_seeder = server_seeder | ||||||
|  |  | ||||||
|     async def reload_technician_config(self): |     def reload_technician_config(self): | ||||||
|         try: |  | ||||||
|         technician_config = self._technician_config_repo.get_technician_config() |         technician_config = self._technician_config_repo.get_technician_config() | ||||||
|         except Exception as e: |  | ||||||
|             await self._technician_seeder.seed() |  | ||||||
|             technician_config = self._technician_config_repo.get_technician_config() |  | ||||||
|  |  | ||||||
|         self._config.add_configuration(TechnicianConfig, technician_config) |         self._config.add_configuration(TechnicianConfig, technician_config) | ||||||
|         self._config.add_configuration( |         self._config.add_configuration( | ||||||
|             FeatureFlagsSettings, |             FeatureFlagsSettings, | ||||||
|   | |||||||
| @@ -92,7 +92,7 @@ class DataIntegrityService: | |||||||
|             except Exception as e: |             except Exception as e: | ||||||
|                 self._logger.error(__name__, f"Cannot get user", e) |                 self._logger.error(__name__, f"Cannot get user", e) | ||||||
|  |  | ||||||
|     def check_servers(self): |     def _check_servers(self): | ||||||
|         self._logger.debug(__name__, f"Start checking Servers table") |         self._logger.debug(__name__, f"Start checking Servers table") | ||||||
|         for g in self._bot.guilds: |         for g in self._bot.guilds: | ||||||
|             g: discord.Guild = g |             g: discord.Guild = g | ||||||
| @@ -389,33 +389,16 @@ class DataIntegrityService: | |||||||
|             for member in guild.members: |             for member in guild.members: | ||||||
|                 await self._client_utils.check_default_role(member) |                 await self._client_utils.check_default_role(member) | ||||||
|  |  | ||||||
|     def _check_for_bots(self): |  | ||||||
|         for guild in self._bot.guilds: |  | ||||||
|             server = self._servers.get_server_by_discord_id(guild.id) |  | ||||||
|  |  | ||||||
|             for member in guild.members.where(lambda x: x.bot): |  | ||||||
|                 user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id) |  | ||||||
|                 if user is None: |  | ||||||
|                     continue |  | ||||||
|  |  | ||||||
|                 for join in self._user_joins.get_user_joined_servers_by_user_id(user.id): |  | ||||||
|                     self._user_joins.delete_user_joined_server(join) |  | ||||||
|  |  | ||||||
|                 self._user_joins_vc.delete_user_joined_voice_channel_by_user_id(user.id) |  | ||||||
|                 self._users.delete_user(user) |  | ||||||
|                 self._db_context.save_changes() |  | ||||||
|  |  | ||||||
|     async def check_data_integrity(self, is_for_shutdown=False): |     async def check_data_integrity(self, is_for_shutdown=False): | ||||||
|         if is_for_shutdown != self._is_for_shutdown: |         if is_for_shutdown != self._is_for_shutdown: | ||||||
|             self._is_for_shutdown = is_for_shutdown |             self._is_for_shutdown = is_for_shutdown | ||||||
|  |  | ||||||
|         await self._check_default_role() |         await self._check_default_role() | ||||||
|         self._check_known_users() |         self._check_known_users() | ||||||
|         self.check_servers() |         self._check_servers() | ||||||
|         self._check_clients() |         self._check_clients() | ||||||
|         self._check_users() |         self._check_users() | ||||||
|         self._check_user_joins() |         self._check_user_joins() | ||||||
|         self._check_user_joins_vc() |         self._check_user_joins_vc() | ||||||
|         self._check_user_joined_gs() |         self._check_user_joined_gs() | ||||||
|         await self._check_for_user_achievements() |         await self._check_for_user_achievements() | ||||||
|         self._check_for_bots() |  | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_data" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports | # imports | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ __title__ = "bot_data.abc" | |||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
|  |  | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|  |  | ||||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | |||||||
| # imports | # imports | ||||||
|  |  | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
|   | |||||||
| @@ -1,35 +0,0 @@ | |||||||
| from abc import ABC, abstractmethod |  | ||||||
|  |  | ||||||
| from cpl_query.extension import List |  | ||||||
|  |  | ||||||
| from bot_data.model.scheduled_event import ScheduledEvent |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class ScheduledEventRepositoryABC(ABC): |  | ||||||
|     @abstractmethod |  | ||||||
|     def __init__(self): |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     @abstractmethod |  | ||||||
|     def get_scheduled_events(self) -> List[ScheduledEvent]: |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     @abstractmethod |  | ||||||
|     def get_scheduled_event_by_id(self, id: int) -> ScheduledEvent: |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     @abstractmethod |  | ||||||
|     def get_scheduled_events_by_server_id(self, id: int) -> List[ScheduledEvent]: |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     @abstractmethod |  | ||||||
|     def add_scheduled_event(self, scheduled_event: ScheduledEvent): |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     @abstractmethod |  | ||||||
|     def update_scheduled_event(self, scheduled_event: ScheduledEvent): |  | ||||||
|         pass |  | ||||||
|  |  | ||||||
|     @abstractmethod |  | ||||||
|     def delete_scheduled_event(self, scheduled_event: ScheduledEvent): |  | ||||||
|         pass |  | ||||||
| @@ -4,7 +4,7 @@ | |||||||
|     "Version": { |     "Version": { | ||||||
|       "Major": "1", |       "Major": "1", | ||||||
|       "Minor": "2", |       "Minor": "2", | ||||||
|       "Micro": "2" |       "Micro": "0" | ||||||
|     }, |     }, | ||||||
|     "Author": "Sven Heidemann", |     "Author": "Sven Heidemann", | ||||||
|     "AuthorEmail": "sven.heidemann@sh-edraft.de", |     "AuthorEmail": "sven.heidemann@sh-edraft.de", | ||||||
|   | |||||||
| @@ -14,7 +14,6 @@ from bot_data.abc.data_seeder_abc import DataSeederABC | |||||||
| from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC | from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC | ||||||
| from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC | from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC | ||||||
| from bot_data.abc.level_repository_abc import LevelRepositoryABC | from bot_data.abc.level_repository_abc import LevelRepositoryABC | ||||||
| from bot_data.abc.scheduled_event_repository_abc import ScheduledEventRepositoryABC |  | ||||||
| from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC | from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC | ||||||
| from bot_data.abc.server_repository_abc import ServerRepositoryABC | from bot_data.abc.server_repository_abc import ServerRepositoryABC | ||||||
| from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC | from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC | ||||||
| @@ -46,7 +45,6 @@ from bot_data.service.client_repository_service import ClientRepositoryService | |||||||
| from bot_data.service.game_server_repository_service import GameServerRepositoryService | from bot_data.service.game_server_repository_service import GameServerRepositoryService | ||||||
| from bot_data.service.known_user_repository_service import KnownUserRepositoryService | from bot_data.service.known_user_repository_service import KnownUserRepositoryService | ||||||
| from bot_data.service.level_repository_service import LevelRepositoryService | from bot_data.service.level_repository_service import LevelRepositoryService | ||||||
| from bot_data.service.scheduled_event_repository_service import ScheduledEventRepositoryService |  | ||||||
| from bot_data.service.seeder_service import SeederService | from bot_data.service.seeder_service import SeederService | ||||||
| from bot_data.service.server_config_repository_service import ( | from bot_data.service.server_config_repository_service import ( | ||||||
|     ServerConfigRepositoryService, |     ServerConfigRepositoryService, | ||||||
| @@ -117,7 +115,6 @@ class DataModule(ModuleABC): | |||||||
|         services.add_transient(ServerConfigRepositoryABC, ServerConfigRepositoryService) |         services.add_transient(ServerConfigRepositoryABC, ServerConfigRepositoryService) | ||||||
|         services.add_transient(ShortRoleNameRepositoryABC, ShortRoleNameRepositoryService) |         services.add_transient(ShortRoleNameRepositoryABC, ShortRoleNameRepositoryService) | ||||||
|         services.add_transient(SteamSpecialOfferRepositoryABC, SteamSpecialOfferRepositoryService) |         services.add_transient(SteamSpecialOfferRepositoryABC, SteamSpecialOfferRepositoryService) | ||||||
|         services.add_transient(ScheduledEventRepositoryABC, ScheduledEventRepositoryService) |  | ||||||
|  |  | ||||||
|         services.add_transient(SeederService) |         services.add_transient(SeederService) | ||||||
|         services.add_transient(DataSeederABC, TechnicianConfigSeeder) |         services.add_transient(DataSeederABC, TechnicianConfigSeeder) | ||||||
|   | |||||||
| @@ -11,16 +11,16 @@ Discord bot for customers of sh-edraft.de | |||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| __title__ = "modules.base.tasks" | __title__ = "bot_data.migration" | ||||||
| __author__ = "Sven Heidemann" | __author__ = "Sven Heidemann" | ||||||
| __license__ = "MIT" | __license__ = "MIT" | ||||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||||
| __version__ = "1.2.2" | __version__ = "1.2.0" | ||||||
| 
 | 
 | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # imports: | # imports | ||||||
| 
 | 
 | ||||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | version_info = VersionInfo(major="1", minor="2", micro="0") | ||||||
							
								
								
									
										127
									
								
								bot/src/bot_data/migration/achievements_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								bot/src/bot_data/migration/achievements_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class AchievementsMigration(MigrationABC): | ||||||
|  |     name = "1.1.0_AchievementsMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     CREATE TABLE IF NOT EXISTS `Achievements` ( | ||||||
|  |                         `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||||
|  |                         `Name` VARCHAR(255) NOT NULL, | ||||||
|  |                         `Description` VARCHAR(255) NOT NULL, | ||||||
|  |                         `Attribute` VARCHAR(255) NOT NULL, | ||||||
|  |                         `Operator` VARCHAR(255) NOT NULL, | ||||||
|  |                         `Value` VARCHAR(255) NOT NULL, | ||||||
|  |                         `ServerId` BIGINT, | ||||||
|  |                         `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 `AchievementsHistory` | ||||||
|  |                     ( | ||||||
|  |                         `Id`    BIGINT(20)  NOT NULL, | ||||||
|  |                         `Name` VARCHAR(255) NOT NULL, | ||||||
|  |                         `Description` VARCHAR(255) NOT NULL, | ||||||
|  |                         `Attribute` VARCHAR(255) NOT NULL, | ||||||
|  |                         `Operator` VARCHAR(255) NOT NULL, | ||||||
|  |                         `Value` VARCHAR(255) NOT NULL, | ||||||
|  |                         `ServerId` BIGINT, | ||||||
|  |                         `Deleted`   BOOL DEFAULT FALSE, | ||||||
|  |                         `DateFrom`  DATETIME(6) NOT NULL, | ||||||
|  |                         `DateTo`    DATETIME(6) NOT NULL | ||||||
|  |                     ); | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     CREATE TABLE IF NOT EXISTS `UserGotAchievements` ( | ||||||
|  |                         `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||||
|  |                         `UserId` BIGINT, | ||||||
|  |                         `AchievementId` BIGINT, | ||||||
|  |                         `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 (`UserId`) REFERENCES `Users`(`UserId`), | ||||||
|  |                         FOREIGN KEY (`AchievementId`) REFERENCES `Achievements`(`Id`) | ||||||
|  |                     ); | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         # A join table history between users and achievements is not necessary. | ||||||
|  |  | ||||||
|  |         self._cursor.execute(str(f"""ALTER TABLE Users ADD MessageCount BIGINT NOT NULL DEFAULT 0 AFTER XP;""")) | ||||||
|  |         self._cursor.execute(str(f"""ALTER TABLE Users ADD ReactionCount BIGINT NOT NULL DEFAULT 0 AFTER XP;""")) | ||||||
|  |         self._cursor.execute(str(f"""ALTER TABLE UsersHistory ADD MessageCount BIGINT NOT NULL DEFAULT 0 AFTER XP;""")) | ||||||
|  |         self._cursor.execute(str(f"""ALTER TABLE UsersHistory ADD ReactionCount BIGINT NOT NULL DEFAULT 0 AFTER XP;""")) | ||||||
|  |  | ||||||
|  |         self._cursor.execute(str(f"""DROP TRIGGER IF EXISTS `TR_AchievementsUpdate`;""")) | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     CREATE TRIGGER `TR_AchievementsUpdate` | ||||||
|  |                         AFTER UPDATE | ||||||
|  |                         ON `Achievements` | ||||||
|  |                         FOR EACH ROW | ||||||
|  |                     BEGIN | ||||||
|  |                         INSERT INTO `AchievementsHistory` ( | ||||||
|  |                             `Id`, `Name`, `Description`, `Attribute`, `Operator`, `Value`, `ServerId`, `DateFrom`, `DateTo` | ||||||
|  |                         ) | ||||||
|  |                         VALUES ( | ||||||
|  |                             OLD.Id, OLD.Name, OLD.Description, OLD.Attribute, OLD.Operator, OLD.Value, OLD.ServerId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6) | ||||||
|  |                         ); | ||||||
|  |                     END; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute(str(f"""DROP TRIGGER IF EXISTS `TR_AchievementsDelete`;""")) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     CREATE TRIGGER `TR_AchievementsDelete` | ||||||
|  |                         AFTER DELETE | ||||||
|  |                         ON `Achievements` | ||||||
|  |                         FOR EACH ROW | ||||||
|  |                     BEGIN | ||||||
|  |                         INSERT INTO `AchievementsHistory` ( | ||||||
|  |                             `Id`, `Name`, `Description`, `Attribute`, `Operator`, `Value`, `ServerId`, `Deleted`, `DateFrom`, `DateTo` | ||||||
|  |                         ) | ||||||
|  |                         VALUES ( | ||||||
|  |                             OLD.Id, OLD.Name, OLD.Description, OLD.Attribute, OLD.Operator, OLD.Value, OLD.ServerId, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6) | ||||||
|  |                         ); | ||||||
|  |                     END; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute("DROP TABLE `Achievements`;") | ||||||
|  |  | ||||||
|  |         self._cursor.execute(str(f"""ALTER TABLE Users DROP COLUMN MessageCount;""")) | ||||||
|  |         self._cursor.execute(str(f"""ALTER TABLE Users DROP COLUMN ReactionCount;""")) | ||||||
							
								
								
									
										38
									
								
								bot/src/bot_data/migration/api_key_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								bot/src/bot_data/migration/api_key_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ApiKeyMigration(MigrationABC): | ||||||
|  |     name = "1.0.0_ApiKeyMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute("DROP TABLE `ApiKeys`;") | ||||||
							
								
								
									
										61
									
								
								bot/src/bot_data/migration/api_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								bot/src/bot_data/migration/api_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ApiMigration(MigrationABC): | ||||||
|  |     name = "0.3_ApiMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute("DROP TABLE `AuthUsers`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `AuthUserUsersRelations`;") | ||||||
							
								
								
									
										33
									
								
								bot/src/bot_data/migration/auto_role_fix1_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								bot/src/bot_data/migration/auto_role_fix1_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class AutoRoleFix1Migration(MigrationABC): | ||||||
|  |     name = "0.3.0_AutoRoleFixMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             ALTER TABLE AutoRoles ADD DiscordChannelId BIGINT NOT NULL AFTER ServerId; | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             ALTER TABLE AutoRoles DROP COLUMN DiscordChannelId; | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
							
								
								
									
										53
									
								
								bot/src/bot_data/migration/auto_role_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								bot/src/bot_data/migration/auto_role_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class AutoRoleMigration(MigrationABC): | ||||||
|  |     name = "0.2.1_AutoRoleMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute("DROP TABLE `AutoRole`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `AutoRoleRules`;") | ||||||
							
								
								
									
										84
									
								
								bot/src/bot_data/migration/birthday_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								bot/src/bot_data/migration/birthday_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class BirthdayMigration(MigrationABC): | ||||||
|  |     name = "1.2.0_BirthdayMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE Users | ||||||
|  |                     ADD Birthday DATE NULL AFTER MessageCount; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE UsersHistory | ||||||
|  |                     ADD Birthday DATE NULL AFTER MessageCount; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._exec(__file__, "users.sql") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE CFG_Server | ||||||
|  |                     ADD XpForBirthday BIGINT(20) NOT NULL DEFAULT 0 AFTER XpPerAchievement; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE CFG_ServerHistory | ||||||
|  |                     ADD XpForBirthday BIGINT(20) NOT NULL DEFAULT 0 AFTER XpPerAchievement; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._exec(__file__, "config/server.sql") | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE Users DROP COLUMN Birthday; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE UsersHistory DROP COLUMN Birthday; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE CFG_Server DROP COLUMN XpForBirthday; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE CFG_ServerHistory DROP COLUMN XpForBirthday; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
							
								
								
									
										29
									
								
								bot/src/bot_data/migration/config_feature_flags_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								bot/src/bot_data/migration/config_feature_flags_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ConfigFeatureFlagsMigration(MigrationABC): | ||||||
|  |     name = "1.1.0_ConfigFeatureFlagsMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str("""ALTER TABLE CFG_Technician ADD FeatureFlags JSON NULL DEFAULT ('{}') AFTER CacheMaxMessages;""") | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str("""ALTER TABLE CFG_Server ADD FeatureFlags JSON NULL DEFAULT ('{}') AFTER LoginMessageChannelId;""") | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running downgrade") | ||||||
|  |         self._cursor.execute("ALTER TABLE CFG_Technician DROP COLUMN FeatureFlags;") | ||||||
|  |         self._cursor.execute("ALTER TABLE CFG_Server DROP COLUMN FeatureFlags;") | ||||||
							
								
								
									
										145
									
								
								bot/src/bot_data/migration/config_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								bot/src/bot_data/migration/config_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ConfigMigration(MigrationABC): | ||||||
|  |     name = "1.1.0_ConfigMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |         self._server_upgrade() | ||||||
|  |         self._technician_upgrade() | ||||||
|  |  | ||||||
|  |         self._exec(__file__, "config/server.sql") | ||||||
|  |         self._exec(__file__, "config/server_afk_channels.sql") | ||||||
|  |         self._exec(__file__, "config/server_team_roles.sql") | ||||||
|  |         self._exec(__file__, "config/technician.sql") | ||||||
|  |         self._exec(__file__, "config/technician_ids.sql") | ||||||
|  |         self._exec(__file__, "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._server_downgrade() | ||||||
|  |         self._technician_downgrade() | ||||||
|  |  | ||||||
|  |     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`;") | ||||||
							
								
								
									
										56
									
								
								bot/src/bot_data/migration/db_history_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								bot/src/bot_data/migration/db_history_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class DBHistoryMigration(MigrationABC): | ||||||
|  |     name = "1.0.0_DBHistoryMigration" | ||||||
|  |     prio = 1 | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._exec(__file__, "api_keys.sql") | ||||||
|  |         self._exec(__file__, "auth_users.sql") | ||||||
|  |         self._exec(__file__, "auth_user_users_relation.sql") | ||||||
|  |         self._exec(__file__, "auto_role_rules.sql") | ||||||
|  |         self._exec(__file__, "auto_roles.sql") | ||||||
|  |         self._exec(__file__, "clients.sql") | ||||||
|  |         self._exec(__file__, "game_servers.sql") | ||||||
|  |         self._exec(__file__, "known_users.sql") | ||||||
|  |         self._exec(__file__, "levels.sql") | ||||||
|  |         self._exec(__file__, "servers.sql") | ||||||
|  |         self._exec(__file__, "user_game_idents.sql") | ||||||
|  |         self._exec(__file__, "user_joined_game_servers.sql") | ||||||
|  |         self._exec(__file__, "user_joined_servers.sql") | ||||||
|  |         self._exec(__file__, "user_joined_voice_channel.sql") | ||||||
|  |         self._exec(__file__, "user_message_count_per_hour.sql") | ||||||
|  |         self._exec(__file__, "users.sql") | ||||||
|  |         self._exec(__file__, "user_warnings.sql") | ||||||
|  |  | ||||||
|  |         self._logger.debug(__name__, "Finished history upgrade") | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute("DROP TABLE `ApiKeysHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `AuthUsersHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `AuthUserUsersRelationsHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `AutoRoleRulesHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `AutoRolesHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `ClientsHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `GameServersHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `KnownUsersHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `LevelsHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `ServersHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UserGameIdentsHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UserJoinedGameServerHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UserJoinedServersHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UserJoinedVoiceChannelHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UserMessageCountPerHourHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UsersHistory`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UserWarningsHistory`;") | ||||||
							
								
								
									
										46
									
								
								bot/src/bot_data/migration/db_history_scripts/api_keys.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								bot/src/bot_data/migration/db_history_scripts/api_keys.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | 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; | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | 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; | ||||||
							
								
								
									
										62
									
								
								bot/src/bot_data/migration/db_history_scripts/auth_users.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								bot/src/bot_data/migration/db_history_scripts/auth_users.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | 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; | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | 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; | ||||||
							
								
								
									
										48
									
								
								bot/src/bot_data/migration/db_history_scripts/auto_roles.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								bot/src/bot_data/migration/db_history_scripts/auto_roles.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | |||||||
|  | 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; | ||||||
							
								
								
									
										54
									
								
								bot/src/bot_data/migration/db_history_scripts/clients.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								bot/src/bot_data/migration/db_history_scripts/clients.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | 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; | ||||||
| @@ -1,12 +1,29 @@ | |||||||
| ALTER TABLE CFG_Server | CREATE TABLE IF NOT EXISTS `CFG_ServerHistory` | ||||||
|     ADD ShortRoleNameSetOnlyHighest BOOLEAN NOT NULL DEFAULT FALSE AFTER DefaultRoleId; | ( | ||||||
|  |     `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, | ||||||
|  |     `DefaultRoleId`               BIGINT      NULL, | ||||||
|  |     `ShortRoleNameSetOnlyHighest` BOOLEAN     NOT NULL DEFAULT FALSE, | ||||||
|  |     `FeatureFlags`                JSON        NULL     DEFAULT ('{}'), | ||||||
|  |     `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`; | ||||||
| 
 |  | ||||||
| ALTER TABLE CFG_ServerHistory |  | ||||||
|     ADD ShortRoleNameSetOnlyHighest BOOLEAN NOT NULL DEFAULT FALSE AFTER DefaultRoleId; |  | ||||||
| 
 |  | ||||||
| DROP TRIGGER IF EXISTS `TR_CFG_ServerUpdate`;; |  | ||||||
| 
 | 
 | ||||||
| CREATE TRIGGER `TR_CFG_ServerUpdate` | CREATE TRIGGER `TR_CFG_ServerUpdate` | ||||||
|     AFTER UPDATE |     AFTER UPDATE | ||||||
| @@ -53,9 +70,9 @@ BEGIN | |||||||
|             OLD.ServerId, |             OLD.ServerId, | ||||||
|             OLD.LastModifiedAt, |             OLD.LastModifiedAt, | ||||||
|             CURRENT_TIMESTAMP(6)); |             CURRENT_TIMESTAMP(6)); | ||||||
| END;; | END; | ||||||
| 
 | 
 | ||||||
| DROP TRIGGER IF EXISTS `TR_CFG_ServerDelete`;; | DROP TRIGGER IF EXISTS `TR_CFG_ServerDelete`; | ||||||
| 
 | 
 | ||||||
| CREATE TRIGGER `TR_CFG_ServerDelete` | CREATE TRIGGER `TR_CFG_ServerDelete` | ||||||
|     AFTER DELETE |     AFTER DELETE | ||||||
| @@ -104,5 +121,4 @@ BEGIN | |||||||
|             TRUE, |             TRUE, | ||||||
|             OLD.LastModifiedAt, |             OLD.LastModifiedAt, | ||||||
|             CURRENT_TIMESTAMP(6)); |             CURRENT_TIMESTAMP(6)); | ||||||
| END;; | 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.Id, | ||||||
|  |         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.Id, | ||||||
|  |         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.Id, | ||||||
|  |         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.Id, | ||||||
|  |         OLD.RoleId, | ||||||
|  |         OLD.TeamMemberType, | ||||||
|  |         OLD.ServerId, | ||||||
|  |         TRUE, | ||||||
|  |         OLD.LastModifiedAt, | ||||||
|  |         CURRENT_TIMESTAMP(6) | ||||||
|  |     ); | ||||||
|  | END; | ||||||
| @@ -1,10 +1,17 @@ | |||||||
| ALTER TABLE CFG_Technician | CREATE TABLE IF NOT EXISTS `CFG_TechnicianHistory` | ||||||
|     ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount; | ( | ||||||
|  |     `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, | ||||||
|  |     `FeatureFlags`            JSON         NULL     DEFAULT ('{}'), | ||||||
|  |     `Deleted`                 BOOL                  DEFAULT FALSE, | ||||||
|  |     `DateFrom`                DATETIME(6)  NOT NULL, | ||||||
|  |     `DateTo`                  DATETIME(6)  NOT NULL | ||||||
|  | ); | ||||||
| 
 | 
 | ||||||
| ALTER TABLE CFG_TechnicianHistory | DROP TRIGGER IF EXISTS `TR_CFG_TechnicianUpdate`; | ||||||
|     ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount; |  | ||||||
| 
 |  | ||||||
| DROP TRIGGER IF EXISTS `TR_CFG_TechnicianUpdate`;; |  | ||||||
| 
 | 
 | ||||||
| CREATE TRIGGER `TR_CFG_TechnicianUpdate` | CREATE TRIGGER `TR_CFG_TechnicianUpdate` | ||||||
|     AFTER UPDATE |     AFTER UPDATE | ||||||
| @@ -16,8 +23,6 @@ BEGIN | |||||||
|                                          `WaitForRestart`, |                                          `WaitForRestart`, | ||||||
|                                          `WaitForShutdown`, |                                          `WaitForShutdown`, | ||||||
|                                          `CacheMaxMessages`, |                                          `CacheMaxMessages`, | ||||||
|                                          `MaxSteamOfferCount`, |  | ||||||
|                                          `Maintenance`, |  | ||||||
|                                          `FeatureFlags`, |                                          `FeatureFlags`, | ||||||
|                                          `DateFrom`, |                                          `DateFrom`, | ||||||
|                                          `DateTo`) |                                          `DateTo`) | ||||||
| @@ -26,14 +31,12 @@ BEGIN | |||||||
|             OLD.WaitForRestart, |             OLD.WaitForRestart, | ||||||
|             OLD.WaitForShutdown, |             OLD.WaitForShutdown, | ||||||
|             OLD.CacheMaxMessages, |             OLD.CacheMaxMessages, | ||||||
|             OLD.MaxSteamOfferCount, |  | ||||||
|             OLD.Maintenance, |  | ||||||
|             OLD.FeatureFlags, |             OLD.FeatureFlags, | ||||||
|             OLD.LastModifiedAt, |             OLD.LastModifiedAt, | ||||||
|             CURRENT_TIMESTAMP(6)); |             CURRENT_TIMESTAMP(6)); | ||||||
| END;; | END; | ||||||
| 
 | 
 | ||||||
| DROP TRIGGER IF EXISTS `TR_CFG_TechnicianDelete`;; | DROP TRIGGER IF EXISTS `TR_CFG_TechnicianDelete`; | ||||||
| 
 | 
 | ||||||
| CREATE TRIGGER `TR_CFG_TechnicianDelete` | CREATE TRIGGER `TR_CFG_TechnicianDelete` | ||||||
|     AFTER DELETE |     AFTER DELETE | ||||||
| @@ -45,8 +48,6 @@ BEGIN | |||||||
|                                          `WaitForRestart`, |                                          `WaitForRestart`, | ||||||
|                                          `WaitForShutdown`, |                                          `WaitForShutdown`, | ||||||
|                                          `CacheMaxMessages`, |                                          `CacheMaxMessages`, | ||||||
|                                          `MaxSteamOfferCount`, |  | ||||||
|                                          `Maintenance`, |  | ||||||
|                                          `FeatureFlags`, |                                          `FeatureFlags`, | ||||||
|                                          `Deleted`, |                                          `Deleted`, | ||||||
|                                          `DateFrom`, |                                          `DateFrom`, | ||||||
| @@ -56,11 +57,8 @@ BEGIN | |||||||
|             OLD.WaitForRestart, |             OLD.WaitForRestart, | ||||||
|             OLD.WaitForShutdown, |             OLD.WaitForShutdown, | ||||||
|             OLD.CacheMaxMessages, |             OLD.CacheMaxMessages, | ||||||
|             OLD.MaxSteamOfferCount, |  | ||||||
|             OLD.Maintenance, |  | ||||||
|             OLD.FeatureFlags, |             OLD.FeatureFlags, | ||||||
|             TRUE, |             TRUE, | ||||||
|             OLD.LastModifiedAt, |             OLD.LastModifiedAt, | ||||||
|             CURRENT_TIMESTAMP(6)); |             CURRENT_TIMESTAMP(6)); | ||||||
| END;; | 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.Id, | ||||||
|  |         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.Id, | ||||||
|  |         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.Id, | ||||||
|  |         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.Id, | ||||||
|  |         OLD.URL, | ||||||
|  |         TRUE, | ||||||
|  |         OLD.LastModifiedAt, | ||||||
|  |         CURRENT_TIMESTAMP(6) | ||||||
|  |     ); | ||||||
|  | END; | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | 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; | ||||||
| @@ -0,0 +1,44 @@ | |||||||
|  | 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; | ||||||
							
								
								
									
										50
									
								
								bot/src/bot_data/migration/db_history_scripts/levels.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								bot/src/bot_data/migration/db_history_scripts/levels.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | |||||||
|  | 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; | ||||||
							
								
								
									
										44
									
								
								bot/src/bot_data/migration/db_history_scripts/servers.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								bot/src/bot_data/migration/db_history_scripts/servers.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | 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; | ||||||
| @@ -1,17 +1,3 @@ | |||||||
| CREATE TABLE IF NOT EXISTS `ShortRoleNames` |  | ||||||
| ( |  | ||||||
|     `Id`             BIGINT                   NOT NULL AUTO_INCREMENT, |  | ||||||
|     `ShortName`      VARCHAR(255)             NOT NULL, |  | ||||||
|     `DiscordRoleId`  BIGINT                   NOT NULL, |  | ||||||
|     `Position`       ENUM ('before', 'after') NOT NULL, |  | ||||||
|     `ServerId`       BIGINT, |  | ||||||
|     `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`) |  | ||||||
| ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| CREATE TABLE IF NOT EXISTS `ShortRoleNamesHistory` | CREATE TABLE IF NOT EXISTS `ShortRoleNamesHistory` | ||||||
| ( | ( | ||||||
|     `Id`            BIGINT(20)               NOT NULL, |     `Id`            BIGINT(20)               NOT NULL, | ||||||
| @@ -22,9 +8,9 @@ CREATE TABLE IF NOT EXISTS `ShortRoleNamesHistory` | |||||||
|     `Deleted`       BOOL        DEFAULT FALSE, |     `Deleted`       BOOL        DEFAULT FALSE, | ||||||
|     `DateFrom`      DATETIME(6)              NOT NULL, |     `DateFrom`      DATETIME(6)              NOT NULL, | ||||||
|     `DateTo`        DATETIME(6)              NOT NULL |     `DateTo`        DATETIME(6)              NOT NULL | ||||||
| );; | ); | ||||||
| 
 | 
 | ||||||
| DROP TRIGGER IF EXISTS `TR_ShortRoleNamesUpdate`;; | DROP TRIGGER IF EXISTS `TR_ShortRoleNamesUpdate`; | ||||||
| 
 | 
 | ||||||
| CREATE TRIGGER `TR_ShortRoleNamesUpdate` | CREATE TRIGGER `TR_ShortRoleNamesUpdate` | ||||||
|     AFTER UPDATE |     AFTER UPDATE | ||||||
| @@ -35,9 +21,9 @@ BEGIN | |||||||
|                                          `DateTo`) |                                          `DateTo`) | ||||||
|     VALUES (OLD.Id, OLD.ShortName, OLD.DiscordRoleId, OLD.Position, OLD.ServerId, OLD.LastModifiedAt, |     VALUES (OLD.Id, OLD.ShortName, OLD.DiscordRoleId, OLD.Position, OLD.ServerId, OLD.LastModifiedAt, | ||||||
|             CURRENT_TIMESTAMP(6)); |             CURRENT_TIMESTAMP(6)); | ||||||
| END;; | END; | ||||||
| 
 | 
 | ||||||
| DROP TRIGGER IF EXISTS `TR_ShortRoleNamesDelete`;; | DROP TRIGGER IF EXISTS `TR_ShortRoleNamesDelete`; | ||||||
| 
 | 
 | ||||||
| CREATE TRIGGER `TR_ShortRoleNamesDelete` | CREATE TRIGGER `TR_ShortRoleNamesDelete` | ||||||
|     AFTER DELETE |     AFTER DELETE | ||||||
| @@ -49,5 +35,4 @@ BEGIN | |||||||
|                                          `DateTo`) |                                          `DateTo`) | ||||||
|     VALUES (OLD.Id, OLD.ShortName, OLD.DiscordRoleId, OLD.Position, OLD.ServerId, TRUE, OLD.LastModifiedAt, |     VALUES (OLD.Id, OLD.ShortName, OLD.DiscordRoleId, OLD.Position, OLD.ServerId, TRUE, OLD.LastModifiedAt, | ||||||
|             CURRENT_TIMESTAMP(6)); |             CURRENT_TIMESTAMP(6)); | ||||||
| END;; | END; | ||||||
| 
 |  | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | 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; | ||||||
| @@ -0,0 +1,47 @@ | |||||||
|  | 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; | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | 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; | ||||||
| @@ -0,0 +1,49 @@ | |||||||
|  | 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; | ||||||
| @@ -0,0 +1,47 @@ | |||||||
|  | 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; | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | 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; | ||||||
							
								
								
									
										45
									
								
								bot/src/bot_data/migration/db_history_scripts/users.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								bot/src/bot_data/migration/db_history_scripts/users.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | 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; | ||||||
							
								
								
									
										34
									
								
								bot/src/bot_data/migration/default_role_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								bot/src/bot_data/migration/default_role_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class DefaultRoleMigration(MigrationABC): | ||||||
|  |     name = "1.1.3_DefaultRoleMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE CFG_Server | ||||||
|  |                     ADD DefaultRoleId BIGINT NULL AFTER LoginMessageChannelId; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE CFG_Server DROP COLUMN DefaultRoleId; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
							
								
								
									
										51
									
								
								bot/src/bot_data/migration/fix_updates_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								bot/src/bot_data/migration/fix_updates_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class FixUpdatesMigration(MigrationABC): | ||||||
|  |     name = "1.1.7_FixUpdatesMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE CFG_ServerHistory | ||||||
|  |                     ADD DefaultRoleId BIGINT NULL AFTER LoginMessageChannelId; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 """ALTER TABLE CFG_TechnicianHistory ADD FeatureFlags JSON NULL DEFAULT ('{}') AFTER CacheMaxMessages;""" | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 """ALTER TABLE CFG_ServerHistory ADD FeatureFlags JSON NULL DEFAULT ('{}') AFTER LoginMessageChannelId;""" | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._exec(__file__, "config/server.sql") | ||||||
|  |         self._exec(__file__, "config/technician.sql") | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE CFG_ServerHistory DROP COLUMN DefaultRoleId; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._cursor.execute("ALTER TABLE CFG_TechnicianHistory DROP COLUMN FeatureFlags;") | ||||||
|  |         self._cursor.execute("ALTER TABLE CFG_ServerHistory DROP COLUMN FeatureFlags;") | ||||||
							
								
								
									
										45
									
								
								bot/src/bot_data/migration/fix_user_history_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								bot/src/bot_data/migration/fix_user_history_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class FixUserHistoryMigration(MigrationABC): | ||||||
|  |     name = "1.2.0_FixUserHistoryMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         # fix 1.1.0_AchievementsMigration | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f"""ALTER TABLE UsersHistory ADD COLUMN IF NOT EXISTS ReactionCount BIGINT NOT NULL DEFAULT 0 AFTER XP;""" | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f"""ALTER TABLE UsersHistory ADD COLUMN IF NOT EXISTS MessageCount BIGINT NOT NULL DEFAULT 0 AFTER ReactionCount;""" | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._exec(__file__, "users.sql") | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE UsersHistory DROP COLUMN MessageCount; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     ALTER TABLE UsersHistory DROP COLUMN ReactionCount; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
							
								
								
									
										138
									
								
								bot/src/bot_data/migration/initial_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								bot/src/bot_data/migration/initial_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class InitialMigration(MigrationABC): | ||||||
|  |     name = "0.1_InitialMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             CREATE TABLE IF NOT EXISTS `MigrationHistory` ( | ||||||
|  |                 `MigrationId` VARCHAR(255), | ||||||
|  |                 `CreatedAt` DATETIME(6), | ||||||
|  |                 `LastModifiedAt` DATETIME(6), | ||||||
|  |                 PRIMARY KEY(`MigrationId`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute("DROP TABLE `Servers`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `Users`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `Clients`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `KnownUsers`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UserJoinedServers`;") | ||||||
|  |         self._cursor.execute("DROP TABLE `UserJoinedVoiceChannel`;") | ||||||
							
								
								
									
										38
									
								
								bot/src/bot_data/migration/level_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								bot/src/bot_data/migration/level_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class LevelMigration(MigrationABC): | ||||||
|  |     name = "0.3_LevelMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |             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`) | ||||||
|  |             ); | ||||||
|  |             """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute("DROP TABLE `Levels`;") | ||||||
							
								
								
									
										43
									
								
								bot/src/bot_data/migration/remove_stats_migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								bot/src/bot_data/migration/remove_stats_migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | from bot_core.logging.database_logger import DatabaseLogger | ||||||
|  | from bot_data.abc.migration_abc import MigrationABC | ||||||
|  | from bot_data.db_context import DBContext | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class RemoveStatsMigration(MigrationABC): | ||||||
|  |     name = "1.0.0_RemoveStatsMigration" | ||||||
|  |  | ||||||
|  |     def __init__(self, logger: DatabaseLogger, db: DBContext): | ||||||
|  |         MigrationABC.__init__(self) | ||||||
|  |         self._logger = logger | ||||||
|  |         self._db = db | ||||||
|  |         self._cursor = db.cursor | ||||||
|  |  | ||||||
|  |     def upgrade(self): | ||||||
|  |         self._logger.debug(__name__, "Running upgrade") | ||||||
|  |  | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     DROP TABLE IF EXISTS `Statistics`; | ||||||
|  |                 """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def downgrade(self): | ||||||
|  |         self._cursor.execute( | ||||||
|  |             str( | ||||||
|  |                 f""" | ||||||
|  |                     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`) | ||||||
|  |                     ); | ||||||
|  |                     """ | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user