Compare commits
	
		
			47 Commits
		
	
	
		
			1.2.0
			...
			29ea96a5e5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 29ea96a5e5 | |||
| 026331b397 | |||
| bfe74ad1c5 | |||
| 7c8c2bef70 | |||
| 4ccb57e6a3 | |||
| c8d3bf780d | |||
| 8788b727c5 | |||
| 5e9280d972 | |||
| bd856d0143 | |||
| da57063b68 | |||
| 171aa63df9 | |||
| 74dba4b981 | |||
| a3ebd07093 | |||
| 2de5afd648 | |||
| e8cc42e155 | |||
| 20e20969e4 | |||
| 802d5478d1 | |||
| 05f718f3ae | |||
| 7682b966a8 | |||
| 7cb4f03554 | |||
| b1b74b2551 | |||
| bbad4100dc | |||
| 25df0e4876 | |||
| 4ba40b826a | |||
| 06a0eba5c5 | |||
| fe5b0207c0 | |||
| e01c738cf0 | |||
| d2d59bdad7 | |||
| dd3bfa68c6 | |||
| 4e12ba5ffe | |||
| 35a8b8f592 | |||
| 5c8feed8aa | |||
| e018fdcbdf | |||
| 39b9def76c | |||
| 2801c617f6 | |||
| 5461a6d8dc | |||
| d93c3ad6c7 | |||
| aec7dac4c7 | |||
| 407ec08463 | |||
| 4628f31993 | |||
| 1f2fbc362f | |||
| 666b20d3a9 | |||
| 38093ab817 | |||
| 804aa0b9b8 | |||
| 692cf8de31 | |||
| b15c3b7fa3 | |||
| 49121fd179 | 
| @@ -21,7 +21,8 @@ | ||||
|       "checks": "tools/checks/checks.json", | ||||
|       "get-version": "tools/get_version/get-version.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": { | ||||
|       "format": "black ./", | ||||
|   | ||||
 Submodule bot/docker updated: 9c0dc59534...b0bacce9f6
									
								
							| @@ -15,7 +15,7 @@ __title__ = "bot" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
							
								
								
									
										0
									
								
								bot/src/bot/bot
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								bot/src/bot/bot
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -4,7 +4,7 @@ | ||||
|     "Version": { | ||||
|       "Major": "1", | ||||
|       "Minor": "2", | ||||
|       "Micro": "0" | ||||
|       "Micro": "2" | ||||
|     }, | ||||
|     "Author": "Sven Heidemann", | ||||
|     "AuthorEmail": "sven.heidemann@sh-edraft.de", | ||||
| @@ -37,7 +37,8 @@ | ||||
|     ], | ||||
|     "DevDependencies": [ | ||||
|       "cpl-cli==2023.4.0.post3", | ||||
|       "pygount==1.6.1" | ||||
|       "pygount==1.6.1", | ||||
|       "black==23.10.1" | ||||
|     ], | ||||
|     "PythonVersion": ">=3.10.4", | ||||
|     "PythonPath": {}, | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot.extension" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.abc" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     "Version": { | ||||
|       "Major": "1", | ||||
|       "Minor": "2", | ||||
|       "Micro": "0" | ||||
|       "Micro": "2" | ||||
|     }, | ||||
|     "Author": "", | ||||
|     "AuthorEmail": "", | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.configuration" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.controller" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -14,7 +14,10 @@ from bot_api.model.reset_password_dto import ResetPasswordDTO | ||||
| from bot_api.model.token_dto import TokenDTO | ||||
| from bot_api.model.update_auth_user_dto import UpdateAuthUserDTO | ||||
| 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.technician_config import TechnicianConfig | ||||
|  | ||||
|  | ||||
| class AuthController: | ||||
| @@ -30,6 +33,7 @@ class AuthController: | ||||
|         mail_settings: EMailClientSettings, | ||||
|         mailer: EMailClientABC, | ||||
|         auth_service: AuthServiceABC, | ||||
|         technician_config: TechnicianConfig, | ||||
|     ): | ||||
|         self._config = config | ||||
|         self._env = env | ||||
| @@ -39,6 +43,7 @@ class AuthController: | ||||
|         self._mail_settings = mail_settings | ||||
|         self._mailer = mailer | ||||
|         self._auth_service = auth_service | ||||
|         self._technician_config = technician_config | ||||
|  | ||||
|     @Route.get(f"{BasePath}/users") | ||||
|     @Route.authorize(role=AuthRoleEnum.admin) | ||||
| @@ -70,17 +75,32 @@ class AuthController: | ||||
|  | ||||
|     @Route.post(f"{BasePath}/register") | ||||
|     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)) | ||||
|         self._auth_service.add_auth_user(dto) | ||||
|         return "", 200 | ||||
|  | ||||
|     @Route.post(f"{BasePath}/register-by-id/<id>") | ||||
|     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) | ||||
|         return jsonify(result) | ||||
|  | ||||
|     @Route.post(f"{BasePath}/login") | ||||
|     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)) | ||||
|         result = await self._auth_service.login_async(dto) | ||||
|         return jsonify(result.to_dict()) | ||||
| @@ -100,6 +120,11 @@ class AuthController: | ||||
|  | ||||
|     @Route.post(f"{BasePath}/forgot-password/<email>") | ||||
|     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) | ||||
|         return "", 200 | ||||
|  | ||||
| @@ -110,6 +135,11 @@ class AuthController: | ||||
|  | ||||
|     @Route.post(f"{BasePath}/reset-password") | ||||
|     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)) | ||||
|         await self._auth_service.reset_password_async(dto) | ||||
|         return "", 200 | ||||
|   | ||||
| @@ -12,6 +12,9 @@ from bot_api.logging.api_logger import ApiLogger | ||||
| from bot_api.model.settings_dto import SettingsDTO | ||||
| from bot_api.model.version_dto import VersionDTO | ||||
| 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: | ||||
| @@ -82,3 +85,11 @@ class GuiController: | ||||
|         ) | ||||
|         self._mailer.send_mail(mail) | ||||
|         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" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.exception" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.filter" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.filter.discord" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.logging" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.model" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.model.discord" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.route" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.service" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_api.transformer" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.abc" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -21,7 +21,7 @@ class TaskABC(commands.Cog): | ||||
|  | ||||
|     @ServiceProviderABC.inject | ||||
|     async def _wait_until_ready(self, config: ConfigurationABC, logger: TaskLogger, bot: DiscordBotServiceABC): | ||||
|         logger.debug(__name__, f"Waiting before {type(self).__name__}") | ||||
|         logger.debug(__name__, f"Waiting before ready {type(self).__name__}") | ||||
|         await bot.wait_until_ready() | ||||
|  | ||||
|         async def wait(): | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     "Version": { | ||||
|       "Major": "1", | ||||
|       "Minor": "2", | ||||
|       "Micro": "0" | ||||
|       "Micro": "2" | ||||
|     }, | ||||
|     "Author": "Sven Heidemann", | ||||
|     "AuthorEmail": "sven.heidemann@sh-edraft.de", | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.configuration" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -27,3 +27,6 @@ class FeatureFlagsEnum(Enum): | ||||
|     short_role_name = "ShortRoleName" | ||||
|     technician_full_access = "TechnicianFullAccess" | ||||
|     steam_special_offers = "SteamSpecialOffers" | ||||
|     scheduled_events = "ScheduledEvents" | ||||
|     basic_registration = "BasicRegistration" | ||||
|     basic_login = "BasicLogin" | ||||
|   | ||||
| @@ -29,6 +29,9 @@ class FeatureFlagsSettings(ConfigurationModelABC): | ||||
|         FeatureFlagsEnum.short_role_name.value: False,  # 28.09.2023 #378 | ||||
|         FeatureFlagsEnum.technician_full_access.value: False,  # 03.10.2023 #393 | ||||
|         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): | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.core_extension" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.events" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.exception" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.helper" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.logging" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.pipes" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_core.service" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports: | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -92,7 +92,7 @@ class DataIntegrityService: | ||||
|             except Exception as 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") | ||||
|         for g in self._bot.guilds: | ||||
|             g: discord.Guild = g | ||||
| @@ -411,7 +411,7 @@ class DataIntegrityService: | ||||
|  | ||||
|         await self._check_default_role() | ||||
|         self._check_known_users() | ||||
|         self._check_servers() | ||||
|         self.check_servers() | ||||
|         self._check_clients() | ||||
|         self._check_users() | ||||
|         self._check_user_joins() | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_data" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_data.abc" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
							
								
								
									
										35
									
								
								bot/src/bot_data/abc/scheduled_event_repository_abc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								bot/src/bot_data/abc/scheduled_event_repository_abc.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| 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": { | ||||
|       "Major": "1", | ||||
|       "Minor": "2", | ||||
|       "Micro": "0" | ||||
|       "Micro": "2" | ||||
|     }, | ||||
|     "Author": "Sven Heidemann", | ||||
|     "AuthorEmail": "sven.heidemann@sh-edraft.de", | ||||
|   | ||||
| @@ -14,6 +14,7 @@ from bot_data.abc.data_seeder_abc import DataSeederABC | ||||
| from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC | ||||
| from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC | ||||
| 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_repository_abc import ServerRepositoryABC | ||||
| from bot_data.abc.short_role_name_repository_abc import ShortRoleNameRepositoryABC | ||||
| @@ -45,6 +46,7 @@ from bot_data.service.client_repository_service import ClientRepositoryService | ||||
| from bot_data.service.game_server_repository_service import GameServerRepositoryService | ||||
| from bot_data.service.known_user_repository_service import KnownUserRepositoryService | ||||
| 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.server_config_repository_service import ( | ||||
|     ServerConfigRepositoryService, | ||||
| @@ -115,6 +117,7 @@ class DataModule(ModuleABC): | ||||
|         services.add_transient(ServerConfigRepositoryABC, ServerConfigRepositoryService) | ||||
|         services.add_transient(ShortRoleNameRepositoryABC, ShortRoleNameRepositoryService) | ||||
|         services.add_transient(SteamSpecialOfferRepositoryABC, SteamSpecialOfferRepositoryService) | ||||
|         services.add_transient(ScheduledEventRepositoryABC, ScheduledEventRepositoryService) | ||||
|  | ||||
|         services.add_transient(SeederService) | ||||
|         services.add_transient(DataSeederABC, TechnicianConfigSeeder) | ||||
|   | ||||
| @@ -1,127 +0,0 @@ | ||||
| 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;""")) | ||||
| @@ -1,38 +0,0 @@ | ||||
| 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`;") | ||||
| @@ -1,61 +0,0 @@ | ||||
| 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`;") | ||||
| @@ -1,33 +0,0 @@ | ||||
| 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; | ||||
|             """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,53 +0,0 @@ | ||||
| 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`;") | ||||
| @@ -1,84 +0,0 @@ | ||||
| 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; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,29 +0,0 @@ | ||||
| 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;") | ||||
| @@ -1,145 +0,0 @@ | ||||
| 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`;") | ||||
| @@ -1,56 +0,0 @@ | ||||
| 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`;") | ||||
| @@ -1,46 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,46 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,62 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,46 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,48 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,54 +0,0 @@ | ||||
| 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,57 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,62 +0,0 @@ | ||||
| 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,52 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,52 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,46 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,44 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,50 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,44 +0,0 @@ | ||||
| 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,46 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,47 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,46 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,49 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,47 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,46 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,45 +0,0 @@ | ||||
| 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; | ||||
| @@ -1,34 +0,0 @@ | ||||
| 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; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,51 +0,0 @@ | ||||
| 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;") | ||||
| @@ -1,41 +0,0 @@ | ||||
| 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 ReactionCount BIGINT NOT NULL DEFAULT 0 AFTER XP;""") | ||||
|         ) | ||||
|         self._cursor.execute( | ||||
|             str(f"""ALTER TABLE UsersHistory ADD COLUMN 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; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,138 +0,0 @@ | ||||
| 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`;") | ||||
| @@ -1,38 +0,0 @@ | ||||
| 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`;") | ||||
| @@ -1,51 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class MaintenanceModeMigration(MigrationABC): | ||||
|     name = "1.2.0_MaintenanceModeMigration" | ||||
|  | ||||
|     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_Technician | ||||
|                     ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_TechnicianHistory | ||||
|                     ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|         self._exec(__file__, "config/technician.sql") | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_Technician DROP COLUMN Maintenance; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_TechnicianHistory DROP COLUMN Maintenance; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,51 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class MaxSteamOfferCountMigration(MigrationABC): | ||||
|     name = "1.2.0_MaxSteamOfferCountMigration" | ||||
|  | ||||
|     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_Technician | ||||
|                     ADD MaxSteamOfferCount BIGINT NOT NULL DEFAULT 250 AFTER CacheMaxMessages; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_TechnicianHistory | ||||
|                     ADD MaxSteamOfferCount BIGINT NOT NULL DEFAULT 250 AFTER CacheMaxMessages; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|         self._exec(__file__, "config/technician.sql") | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_Technician DROP COLUMN MaxSteamOfferCount; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_TechnicianHistory DROP COLUMN MaxSteamOfferCount; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,43 +0,0 @@ | ||||
| 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`) | ||||
|                     ); | ||||
|                     """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,40 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class ShortRoleNameMigration(MigrationABC): | ||||
|     name = "1.1.7_ShortRoleNameMigration" | ||||
|  | ||||
|     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 `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`) | ||||
|                     ); | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|         self._exec(__file__, "short_rule_names.sql") | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute("DROP TABLE `ShortRoleNames`;") | ||||
|         self._cursor.execute("DROP TABLE `ShortRoleNamesHistory`;") | ||||
| @@ -1,51 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class ShortRoleNameOnlyHighestMigration(MigrationABC): | ||||
|     name = "1.1.9_ShortRoleNameOnlyHighestMigration" | ||||
|  | ||||
|     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 ShortRoleNameSetOnlyHighest BOOLEAN NOT NULL DEFAULT FALSE AFTER DefaultRoleId; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_ServerHistory | ||||
|                     ADD ShortRoleNameSetOnlyHighest BOOLEAN NOT NULL DEFAULT FALSE AFTER DefaultRoleId; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|         self._exec(__file__, "config/server.sql") | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_Server DROP COLUMN ShortRoleNameSetOnlyHighest; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_ServerHistory DROP COLUMN ShortRoleNameSetOnlyHighest; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,37 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class StatsMigration(MigrationABC): | ||||
|     name = "0.3_StatsMigration" | ||||
|  | ||||
|     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 `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`) | ||||
|             ); | ||||
|             """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute("DROP TABLE `Statistics`;") | ||||
| @@ -1,68 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class SteamSpecialOfferMigration(MigrationABC): | ||||
|     name = "1.2.0_SteamSpecialOfferMigration" | ||||
|  | ||||
|     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 `SteamSpecialOffers` ( | ||||
|                         `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|                         `Game` VARCHAR(255) NOT NULL, | ||||
|                         `OriginalPrice` FLOAT NOT NULL, | ||||
|                         `DiscountPrice` FLOAT NOT NULL, | ||||
|                         `DiscountPct` 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`) | ||||
|                     ); | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_Server | ||||
|                     ADD COLUMN GameOfferNotificationChatId BIGINT NULL AFTER ShortRoleNameSetOnlyHighest; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_ServerHistory | ||||
|                     ADD COLUMN GameOfferNotificationChatId BIGINT NULL AFTER ShortRoleNameSetOnlyHighest; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute("DROP TABLE `SteamSpecialOffers`;") | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_Server DROP COLUMN ShortRoleNameSetOnlyHighest; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                     ALTER TABLE CFG_ServerHistory DROP COLUMN ShortRoleNameSetOnlyHighest; | ||||
|                 """ | ||||
|             ) | ||||
|         ) | ||||
| @@ -1,77 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class UserJoinedGameServerMigration(MigrationABC): | ||||
|     name = "1.0.0_UserJoinedGameServerMigration" | ||||
|  | ||||
|     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 `GameServers` ( | ||||
|                 `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|                 `Name` VARCHAR(255) NOT NULL, | ||||
|                 `ServerId` BIGINT NOT NULL, | ||||
|                 `ApiKeyId` BIGINT NOT NULL, | ||||
|                 `CreatedAt` DATETIME(6), | ||||
|                 `LastModifiedAt` DATETIME(6), | ||||
|                 FOREIGN KEY (`ServerId`) REFERENCES Servers(`ServerId`), | ||||
|                 FOREIGN KEY (`ApiKeyId`) REFERENCES ApiKeys(`Id`), | ||||
|                 PRIMARY KEY(`Id`) | ||||
|             ); | ||||
|             """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                 CREATE TABLE IF NOT EXISTS `UserJoinedGameServer` ( | ||||
|                 `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|                 `UserId` BIGINT NOT NULL, | ||||
|                 `GameServerId` BIGINT NOT NULL, | ||||
|                 `JoinedOn` DATETIME(6) NOT NULL, | ||||
|                 `LeavedOn` DATETIME(6), | ||||
|                 `CreatedAt` DATETIME(6), | ||||
|                 `LastModifiedAt` DATETIME(6), | ||||
|                 FOREIGN KEY (`UserId`) REFERENCES Users(`UserId`), | ||||
|                 FOREIGN KEY (`GameServerId`) REFERENCES GameServers(`Id`), | ||||
|                 PRIMARY KEY(`Id`) | ||||
|             ); | ||||
|             """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|         self._cursor.execute( | ||||
|             str( | ||||
|                 f""" | ||||
|                 CREATE TABLE IF NOT EXISTS `UserGameIdents` ( | ||||
|                 `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|                 `UserId` BIGINT NOT NULL, | ||||
|                 `GameServerId` BIGINT NOT NULL, | ||||
|                 `Ident` VARCHAR(255) NOT NULL, | ||||
|                 `CreatedAt` DATETIME(6), | ||||
|                 `LastModifiedAt` DATETIME(6), | ||||
|                 FOREIGN KEY (`UserId`) REFERENCES Users(`UserId`), | ||||
|                 FOREIGN KEY (`GameServerId`) REFERENCES GameServers(`Id`), | ||||
|                 CONSTRAINT UC_UserGameIdent UNIQUE (`GameServerId`,`Ident`), | ||||
|                 PRIMARY KEY(`Id`) | ||||
|             ); | ||||
|             """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute("DROP TABLE `GameServers`;") | ||||
|         self._cursor.execute("DROP TABLE `UserJoinedGameServer`;") | ||||
|         self._cursor.execute("DROP TABLE `UserGameIdents`;") | ||||
| @@ -1,37 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class UserMessageCountPerHourMigration(MigrationABC): | ||||
|     name = "0.3.1_UserMessageCountPerHourMigration" | ||||
|  | ||||
|     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 `UserMessageCountPerHour` ( | ||||
|                 `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|                 `Date` DATETIME(6) NOT NULL, | ||||
|                 `Hour` BIGINT, | ||||
|                 `XPCount` BIGINT, | ||||
|                 `UserId` BIGINT, | ||||
|                 `CreatedAt` DATETIME(6), | ||||
|                 `LastModifiedAt` DATETIME(6), | ||||
|                 PRIMARY KEY(`Id`), | ||||
|                 FOREIGN KEY (`UserId`) REFERENCES `Users`(`UserId`) | ||||
|             ); | ||||
|             """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute("DROP TABLE `UserMessageCountPerHour`;") | ||||
| @@ -1,37 +0,0 @@ | ||||
| from bot_core.logging.database_logger import DatabaseLogger | ||||
| from bot_data.abc.migration_abc import MigrationABC | ||||
| from bot_data.db_context import DBContext | ||||
|  | ||||
|  | ||||
| class UserWarningMigration(MigrationABC): | ||||
|     name = "1.0.0_UserWarningMigration" | ||||
|  | ||||
|     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 `UserWarnings` ( | ||||
|                 `Id` BIGINT NOT NULL AUTO_INCREMENT, | ||||
|                 `Description` VARCHAR(255) NOT NULL, | ||||
|                 `UserId` BIGINT NOT NULL, | ||||
|                 `Author` BIGINT NULL, | ||||
|                 `CreatedAt` DATETIME(6), | ||||
|                 `LastModifiedAt` DATETIME(6), | ||||
|                 PRIMARY KEY(`Id`), | ||||
|                 FOREIGN KEY (`UserId`) REFERENCES `Users`(`UserId`), | ||||
|                 FOREIGN KEY (`Author`) REFERENCES `Users`(`UserId`) | ||||
|             ); | ||||
|             """ | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     def downgrade(self): | ||||
|         self._cursor.execute("DROP TABLE `UserWarnings`;") | ||||
| @@ -15,7 +15,7 @@ __title__ = "bot_data.model" | ||||
| __author__ = "Sven Heidemann" | ||||
| __license__ = "MIT" | ||||
| __copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" | ||||
| __version__ = "1.2.0" | ||||
| __version__ = "1.2.2" | ||||
|  | ||||
| from collections import namedtuple | ||||
|  | ||||
| @@ -23,4 +23,4 @@ from collections import namedtuple | ||||
| # imports | ||||
|  | ||||
| VersionInfo = namedtuple("VersionInfo", "major minor micro") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="0") | ||||
| version_info = VersionInfo(major="1", minor="2", micro="2") | ||||
|   | ||||
							
								
								
									
										17
									
								
								bot/src/bot_data/model/migration.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								bot/src/bot_data/model/migration.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| class Migration: | ||||
|     def __init__(self, name: str, version: str, script: str): | ||||
|         self._name = name | ||||
|         self._version = version | ||||
|         self._script = script | ||||
|  | ||||
|     @property | ||||
|     def name(self) -> str: | ||||
|         return self._name | ||||
|  | ||||
|     @property | ||||
|     def version(self) -> str: | ||||
|         return self._version | ||||
|  | ||||
|     @property | ||||
|     def script(self) -> str: | ||||
|         return self._script | ||||
| @@ -2,10 +2,12 @@ from cpl_core.database import TableABC | ||||
|  | ||||
|  | ||||
| class MigrationHistory(TableABC): | ||||
|     def __init__(self, id: str): | ||||
|     def __init__(self, id: str, created_at=None, modified_at=None): | ||||
|         self._id = id | ||||
|  | ||||
|         TableABC.__init__(self) | ||||
|         self._created_at = created_at if created_at is not None else self._created_at | ||||
|         self._modified_at = modified_at if modified_at is not None else self._modified_at | ||||
|  | ||||
|     @property | ||||
|     def migration_id(self) -> str: | ||||
| @@ -39,7 +41,17 @@ class MigrationHistory(TableABC): | ||||
|         return str( | ||||
|             f""" | ||||
|             UPDATE `MigrationHistory` | ||||
|             SET LastModifiedAt` = '{self._modified_at}' | ||||
|             SET `LastModifiedAt` = '{self._modified_at}' | ||||
|             WHERE `MigrationId` = '{self._id}'; | ||||
|         """ | ||||
|         ) | ||||
|  | ||||
|     def change_id_string(self, new_name: str) -> str: | ||||
|         return str( | ||||
|             f""" | ||||
|             UPDATE `MigrationHistory` | ||||
|             SET `LastModifiedAt` = '{self._modified_at}', | ||||
|             `MigrationId` = '{new_name}' | ||||
|             WHERE `MigrationId` = '{self._id}'; | ||||
|         """ | ||||
|         ) | ||||
|   | ||||
							
								
								
									
										188
									
								
								bot/src/bot_data/model/scheduled_event.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								bot/src/bot_data/model/scheduled_event.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,188 @@ | ||||
| from datetime import datetime | ||||
| from typing import Optional | ||||
|  | ||||
| import discord | ||||
| from cpl_core.database import TableABC | ||||
|  | ||||
| from bot_data.model.scheduled_event_interval_enum import ScheduledEventIntervalEnum | ||||
| from bot_data.model.server import Server | ||||
|  | ||||
|  | ||||
| class ScheduledEvent(TableABC): | ||||
|     def __init__( | ||||
|         self, | ||||
|         interval: ScheduledEventIntervalEnum, | ||||
|         name: str, | ||||
|         description: str, | ||||
|         channel_id: int, | ||||
|         start_time: datetime, | ||||
|         end_time: Optional[datetime], | ||||
|         entity_type: discord.EntityType, | ||||
|         location: Optional[str], | ||||
|         server: Optional[Server], | ||||
|         created_at: datetime = None, | ||||
|         modified_at: datetime = None, | ||||
|         id=0, | ||||
|     ): | ||||
|         self._id = id | ||||
|         self._interval = interval | ||||
|         self._name = name | ||||
|         self._description = description | ||||
|         self._channel_id = channel_id | ||||
|         self._start_time = start_time | ||||
|         self._end_time = end_time | ||||
|         self._entity_type = entity_type | ||||
|         self._location = location | ||||
|         self._server = server | ||||
|  | ||||
|         TableABC.__init__(self) | ||||
|         self._created_at = created_at if created_at is not None else self._created_at | ||||
|         self._modified_at = modified_at if modified_at is not None else self._modified_at | ||||
|  | ||||
|     @property | ||||
|     def id(self) -> int: | ||||
|         return self._id | ||||
|  | ||||
|     @property | ||||
|     def interval(self) -> ScheduledEventIntervalEnum: | ||||
|         return self._interval | ||||
|  | ||||
|     @interval.setter | ||||
|     def interval(self, value: ScheduledEventIntervalEnum): | ||||
|         self._interval = value | ||||
|  | ||||
|     @property | ||||
|     def name(self) -> str: | ||||
|         return self._name | ||||
|  | ||||
|     @name.setter | ||||
|     def name(self, value: str): | ||||
|         self._name = value | ||||
|  | ||||
|     @property | ||||
|     def description(self) -> str: | ||||
|         return self._description | ||||
|  | ||||
|     @description.setter | ||||
|     def description(self, value: str): | ||||
|         self._description = value | ||||
|  | ||||
|     @property | ||||
|     def channel_id(self) -> int: | ||||
|         return self._channel_id | ||||
|  | ||||
|     @channel_id.setter | ||||
|     def channel_id(self, value: int): | ||||
|         self._channel_id = value | ||||
|  | ||||
|     @property | ||||
|     def start_time(self) -> datetime: | ||||
|         return self._start_time | ||||
|  | ||||
|     @start_time.setter | ||||
|     def start_time(self, value: datetime): | ||||
|         self._start_time = value | ||||
|  | ||||
|     @property | ||||
|     def end_time(self) -> datetime: | ||||
|         return self._end_time | ||||
|  | ||||
|     @end_time.setter | ||||
|     def end_time(self, value: datetime): | ||||
|         self._end_time = value | ||||
|  | ||||
|     @property | ||||
|     def entity_type(self) -> discord.EntityType: | ||||
|         return self._entity_type | ||||
|  | ||||
|     @entity_type.setter | ||||
|     def entity_type(self, value: discord.EntityType): | ||||
|         self._entity_type = value | ||||
|  | ||||
|     @property | ||||
|     def location(self) -> str: | ||||
|         return self._location | ||||
|  | ||||
|     @location.setter | ||||
|     def location(self, value: str): | ||||
|         self._location = value | ||||
|  | ||||
|     @property | ||||
|     def server(self) -> Server: | ||||
|         return self._server | ||||
|  | ||||
|     @server.setter | ||||
|     def server(self, value: Server): | ||||
|         self._server = value | ||||
|  | ||||
|     @staticmethod | ||||
|     def get_select_all_string() -> str: | ||||
|         return str( | ||||
|             f""" | ||||
|             SELECT * FROM `ScheduledEvents`; | ||||
|         """ | ||||
|         ) | ||||
|  | ||||
|     @staticmethod | ||||
|     def get_select_by_id_string(id: int) -> str: | ||||
|         return str( | ||||
|             f""" | ||||
|             SELECT * FROM `ScheduledEvents` | ||||
|             WHERE `Id` = {id}; | ||||
|         """ | ||||
|         ) | ||||
|  | ||||
|     @staticmethod | ||||
|     def get_select_by_server_id_string(s_id: int) -> str: | ||||
|         return str( | ||||
|             f""" | ||||
|             SELECT * FROM `ScheduledEvents` | ||||
|             WHERE `ServerId` = {s_id}; | ||||
|         """ | ||||
|         ) | ||||
|  | ||||
|     @property | ||||
|     def insert_string(self) -> str: | ||||
|         return str( | ||||
|             f""" | ||||
|             INSERT INTO `ScheduledEvents` ( | ||||
|                 `Interval`, `Name`, `Description`, `ChannelId`, `StartTime`, `EndTime`, `EntityType`, `Location`, `ServerId` | ||||
|             ) VALUES ( | ||||
|                 '{self._interval.value}', | ||||
|                 '{self._name}', | ||||
|                 {"NULL" if self._description is None else f"'{self._description}'"}, | ||||
|                 {"NULL" if self._channel_id is None else f"'{self._channel_id}'"}, | ||||
|                 '{self._start_time}', | ||||
|                 {"NULL" if self._end_time is None else f"'{self._end_time}'"}, | ||||
|                 '{self._entity_type.value}', | ||||
|                 {"NULL" if self._location is None else f"'{self._location}'"}, | ||||
|                 {self._server.id} | ||||
|             ); | ||||
|         """ | ||||
|         ) | ||||
|  | ||||
|     @property | ||||
|     def udpate_string(self) -> str: | ||||
|         return str( | ||||
|             f""" | ||||
|             UPDATE `ScheduledEvents` | ||||
|             SET `Interval` = '{self._interval.value}',  | ||||
|             `Name` = '{self._name}', | ||||
|             `Description` = {"NULL" if self._description is None else f"'{self._description}'"}, | ||||
|             `ChannelId` = {"NULL" if self._channel_id is None else f"'{self._channel_id}'"}, | ||||
|             `StartTime` = '{self._start_time}', | ||||
|             `EndTime` = {"NULL" if self._end_time is None else f"'{self._end_time}'"},  | ||||
|             `EntityType` = '{self._entity_type.value}', | ||||
|             `Location` = {"NULL" if self._location is None else f"'{self._location}'"} | ||||
|             WHERE `Id` = {self._id}; | ||||
|         """ | ||||
|         ) | ||||
|  | ||||
|     @property | ||||
|     def delete_string(self) -> str: | ||||
|         return str( | ||||
|             f""" | ||||
|             DELETE FROM `ScheduledEvents` | ||||
|             WHERE `Id` = {self._id}; | ||||
|         """ | ||||
|         ) | ||||
							
								
								
									
										118
									
								
								bot/src/bot_data/model/scheduled_event_history.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								bot/src/bot_data/model/scheduled_event_history.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,118 @@ | ||||
| from datetime import datetime | ||||
| from typing import Optional | ||||
|  | ||||
| import discord | ||||
| from cpl_core.database import TableABC | ||||
|  | ||||
| from bot_data.abc.history_table_abc import HistoryTableABC | ||||
| from bot_data.model.server import Server | ||||
|  | ||||
|  | ||||
| class ScheduledEventHistory(HistoryTableABC): | ||||
|     def __init__( | ||||
|         self, | ||||
|         interval: str, | ||||
|         name: str, | ||||
|         description: str, | ||||
|         channel_id: int, | ||||
|         start_time: datetime, | ||||
|         end_time: Optional[datetime], | ||||
|         entity_type: discord.EntityType, | ||||
|         location: Optional[str], | ||||
|         server: Optional[Server], | ||||
|         deleted: bool, | ||||
|         date_from: str, | ||||
|         date_to: str, | ||||
|         id=0, | ||||
|     ): | ||||
|         HistoryTableABC.__init__(self) | ||||
|         self._id = id | ||||
|         self._interval = interval | ||||
|         self._name = name | ||||
|         self._description = description | ||||
|         self._channel_id = channel_id | ||||
|         self._start_time = start_time | ||||
|         self._end_time = end_time | ||||
|         self._entity_type = entity_type | ||||
|         self._location = location | ||||
|         self._server = server | ||||
|  | ||||
|         self._deleted = deleted | ||||
|         self._date_from = date_from | ||||
|         self._date_to = date_to | ||||
|  | ||||
|     @property | ||||
|     def id(self) -> int: | ||||
|         return self._id | ||||
|  | ||||
|     @property | ||||
|     def interval(self) -> str: | ||||
|         return self._interval | ||||
|  | ||||
|     @interval.setter | ||||
|     def interval(self, value: str): | ||||
|         self._interval = value | ||||
|  | ||||
|     @property | ||||
|     def name(self) -> str: | ||||
|         return self._name | ||||
|  | ||||
|     @name.setter | ||||
|     def name(self, value: str): | ||||
|         self._name = value | ||||
|  | ||||
|     @property | ||||
|     def description(self) -> str: | ||||
|         return self._description | ||||
|  | ||||
|     @description.setter | ||||
|     def description(self, value: str): | ||||
|         self._description = value | ||||
|  | ||||
|     @property | ||||
|     def channel_id(self) -> int: | ||||
|         return self._channel_id | ||||
|  | ||||
|     @channel_id.setter | ||||
|     def channel_id(self, value: int): | ||||
|         self._channel_id = value | ||||
|  | ||||
|     @property | ||||
|     def start_time(self) -> datetime: | ||||
|         return self._start_time | ||||
|  | ||||
|     @start_time.setter | ||||
|     def start_time(self, value: datetime): | ||||
|         self._start_time = value | ||||
|  | ||||
|     @property | ||||
|     def end_time(self) -> datetime: | ||||
|         return self._end_time | ||||
|  | ||||
|     @end_time.setter | ||||
|     def end_time(self, value: datetime): | ||||
|         self._end_time = value | ||||
|  | ||||
|     @property | ||||
|     def entity_type(self) -> discord.EntityType: | ||||
|         return self._entity_type | ||||
|  | ||||
|     @entity_type.setter | ||||
|     def entity_type(self, value: discord.EntityType): | ||||
|         self._entity_type = value | ||||
|  | ||||
|     @property | ||||
|     def location(self) -> str: | ||||
|         return self._location | ||||
|  | ||||
|     @location.setter | ||||
|     def location(self, value: str): | ||||
|         self._location = value | ||||
|  | ||||
|     @property | ||||
|     def server(self) -> Server: | ||||
|         return self._server | ||||
|  | ||||
|     @server.setter | ||||
|     def server(self, value: Server): | ||||
|         self._server = value | ||||
							
								
								
									
										8
									
								
								bot/src/bot_data/model/scheduled_event_interval_enum.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								bot/src/bot_data/model/scheduled_event_interval_enum.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| from enum import Enum | ||||
|  | ||||
|  | ||||
| class ScheduledEventIntervalEnum(Enum): | ||||
|     daily = "daily" | ||||
|     weekly = "weekly" | ||||
|     monthly = "monthly" | ||||
|     yearly = "yearly" | ||||
| @@ -82,11 +82,11 @@ class User(TableABC): | ||||
|         self._reaction_count = value | ||||
|  | ||||
|     @property | ||||
|     def birthday(self) -> Optional[datetime]: | ||||
|     def birthday(self) -> Optional[date]: | ||||
|         return self._birthday | ||||
|  | ||||
|     @birthday.setter | ||||
|     def birthday(self, value: Optional[datetime]): | ||||
|     def birthday(self, value: Optional[date]): | ||||
|         self._birthday = value | ||||
|  | ||||
|     @property | ||||
|   | ||||
| @@ -1,3 +1,6 @@ | ||||
| from datetime import date | ||||
| from typing import Optional | ||||
|  | ||||
| from cpl_core.dependency_injection import ServiceProviderABC | ||||
| from cpl_query.extension import List | ||||
|  | ||||
| @@ -11,6 +14,7 @@ class UserHistory(HistoryTableABC): | ||||
|         xp: int, | ||||
|         message_count: int, | ||||
|         reaction_count: int, | ||||
|         birthday: Optional[date], | ||||
|         server: int, | ||||
|         deleted: bool, | ||||
|         date_from: str, | ||||
| @@ -24,6 +28,7 @@ class UserHistory(HistoryTableABC): | ||||
|         self._xp = xp | ||||
|         self._message_count = message_count | ||||
|         self._reaction_count = reaction_count | ||||
|         self._birthday = birthday | ||||
|         self._server = server | ||||
|  | ||||
|         self._deleted = deleted | ||||
| @@ -50,6 +55,10 @@ class UserHistory(HistoryTableABC): | ||||
|     def reaction_count(self) -> int: | ||||
|         return self._reaction_count | ||||
|  | ||||
|     @property | ||||
|     def birthday(self) -> Optional[date]: | ||||
|         return self._birthday | ||||
|  | ||||
|     @property | ||||
|     def server(self) -> int: | ||||
|         return self._server | ||||
|   | ||||
							
								
								
									
										12
									
								
								bot/src/bot_data/scripts/0.1.0/1_Initial_down.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								bot/src/bot_data/scripts/0.1.0/1_Initial_down.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| DROP TABLE `Servers`; | ||||
|  | ||||
| DROP TABLE `Users`; | ||||
|  | ||||
| DROP TABLE `Clients`; | ||||
|  | ||||
| DROP TABLE `KnownUsers`; | ||||
|  | ||||
| DROP TABLE `UserJoinedServers`; | ||||
|  | ||||
| DROP TABLE `UserJoinedVoiceChannel`; | ||||
|  | ||||
							
								
								
									
										80
									
								
								bot/src/bot_data/scripts/0.1.0/1_Initial_up.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								bot/src/bot_data/scripts/0.1.0/1_Initial_up.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| CREATE TABLE IF NOT EXISTS `MigrationHistory` | ||||
| ( | ||||
|     `MigrationId`    VARCHAR(255), | ||||
|     `CreatedAt`      DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     PRIMARY KEY (`MigrationId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `Servers` | ||||
| ( | ||||
|     `ServerId`        BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `DiscordServerId` BIGINT NOT NULL, | ||||
|     `CreatedAt`       DATETIME(6), | ||||
|     `LastModifiedAt`  DATETIME(6), | ||||
|     PRIMARY KEY (`ServerId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `Users` | ||||
| ( | ||||
|     `UserId`         BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `DiscordId`      BIGINT NOT NULL, | ||||
|     `XP`             BIGINT NOT NULL DEFAULT 0, | ||||
|     `ServerId`       BIGINT, | ||||
|     `CreatedAt`      DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     FOREIGN KEY (`ServerId`) REFERENCES Servers (`ServerId`), | ||||
|     PRIMARY KEY (`UserId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `Clients` | ||||
| ( | ||||
|     `ClientId`              BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `DiscordClientId`       BIGINT NOT NULL, | ||||
|     `SentMessageCount`      BIGINT NOT NULL DEFAULT 0, | ||||
|     `ReceivedMessageCount`  BIGINT NOT NULL DEFAULT 0, | ||||
|     `DeletedMessageCount`   BIGINT NOT NULL DEFAULT 0, | ||||
|     `ReceivedCommandsCount` BIGINT NOT NULL DEFAULT 0, | ||||
|     `MovedUsersCount`       BIGINT NOT NULL DEFAULT 0, | ||||
|     `ServerId`              BIGINT, | ||||
|     `CreatedAt`             DATETIME(6), | ||||
|     `LastModifiedAt`        DATETIME(6), | ||||
|     FOREIGN KEY (`ServerId`) REFERENCES Servers (`ServerId`), | ||||
|     PRIMARY KEY (`ClientId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `KnownUsers` | ||||
| ( | ||||
|     `KnownUserId`    BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `DiscordId`      BIGINT NOT NULL, | ||||
|     `CreatedAt`      DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     PRIMARY KEY (`KnownUserId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `UserJoinedServers` | ||||
| ( | ||||
|     `JoinId`         BIGINT      NOT NULL AUTO_INCREMENT, | ||||
|     `UserId`         BIGINT      NOT NULL, | ||||
|     `JoinedOn`       DATETIME(6) NOT NULL, | ||||
|     `LeavedOn`       DATETIME(6), | ||||
|     `CreatedAt`      DATETIME(6), | ||||
|     `LastModifiedAt` DATETIME(6), | ||||
|     FOREIGN KEY (`UserId`) REFERENCES Users (`UserId`), | ||||
|     PRIMARY KEY (`JoinId`) | ||||
| ); | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `UserJoinedVoiceChannel` | ||||
| ( | ||||
|     `JoinId`           BIGINT      NOT NULL AUTO_INCREMENT, | ||||
|     `UserId`           BIGINT      NOT NULL, | ||||
|     `DiscordChannelId` BIGINT      NOT NULL, | ||||
|     `JoinedOn`         DATETIME(6) NOT NULL, | ||||
|     `LeavedOn`         DATETIME(6), | ||||
|     `CreatedAt`        DATETIME(6), | ||||
|     `LastModifiedAt`   DATETIME(6), | ||||
|     FOREIGN KEY (`UserId`) REFERENCES Users (`UserId`), | ||||
|     PRIMARY KEY (`JoinId`) | ||||
| ); | ||||
|  | ||||
|  | ||||
							
								
								
									
										4
									
								
								bot/src/bot_data/scripts/0.2.2/1_AutoRole_down.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								bot/src/bot_data/scripts/0.2.2/1_AutoRole_down.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| DROP TABLE `AutoRoleRules`; | ||||
|  | ||||
|  | ||||
| DROP TABLE `AutoRoles`; | ||||
							
								
								
									
										26
									
								
								bot/src/bot_data/scripts/0.2.2/1_AutoRole_up.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								bot/src/bot_data/scripts/0.2.2/1_AutoRole_up.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| CREATE TABLE IF NOT EXISTS `AutoRoles` | ||||
| ( | ||||
|     `AutoRoleId`       BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `ServerId`         BIGINT, | ||||
|     `DiscordMessageId` BIGINT NOT NULL, | ||||
|     `CreatedAt`        DATETIME(6), | ||||
|     `LastModifiedAt`   DATETIME(6), | ||||
|     PRIMARY KEY (`AutoRoleId`), | ||||
|     FOREIGN KEY (`ServerId`) REFERENCES `Servers` (`ServerId`) | ||||
| ); | ||||
|  | ||||
|  | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS `AutoRoleRules` | ||||
| ( | ||||
|     `AutoRoleRuleId`   BIGINT NOT NULL AUTO_INCREMENT, | ||||
|     `AutoRoleId`       BIGINT, | ||||
|     `DiscordEmojiName` VARCHAR(64), | ||||
|     `DiscordRoleId`    BIGINT NOT NULL, | ||||
|     `CreatedAt`        DATETIME(6), | ||||
|     `LastModifiedAt`   DATETIME(6), | ||||
|     PRIMARY KEY (`AutoRoleRuleId`), | ||||
|     FOREIGN KEY (`AutoRoleId`) REFERENCES `AutoRoles` (`AutoRoleId`) | ||||
| ); | ||||
|  | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user