Added logic to handle default levels #25

This commit is contained in:
2022-11-06 16:26:09 +01:00
parent e6e26b77f9
commit 666c527730
14 changed files with 177 additions and 11 deletions

View File

@@ -0,0 +1,10 @@
from abc import ABC, abstractmethod
class DataSeederABC(ABC):
@abstractmethod
def __init__(self): pass
@abstractmethod
def seed(self): pass

View File

@@ -19,6 +19,7 @@ from bot_data.service.auto_role_repository_service import AutoRoleRepositoryServ
from bot_data.service.client_repository_service import ClientRepositoryService
from bot_data.service.known_user_repository_service import KnownUserRepositoryService
from bot_data.service.level_repository_service import LevelRepositoryService
from bot_data.service.seeder_service import SeederService
from bot_data.service.server_repository_service import ServerRepositoryService
from bot_data.service.user_joined_server_repository_service import UserJoinedServerRepositoryService
from bot_data.service.user_joined_voice_channel_service import UserJoinedVoiceChannelRepositoryService
@@ -43,3 +44,5 @@ class DataModule(ModuleABC):
services.add_transient(UserJoinedVoiceChannelRepositoryABC, UserJoinedVoiceChannelRepositoryService)
services.add_transient(AutoRoleRepositoryABC, AutoRoleRepositoryService)
services.add_transient(LevelRepositoryABC, LevelRepositoryService)
services.add_transient(SeederService)

View File

@@ -20,10 +20,12 @@ class LevelMigration(MigrationABC):
CREATE TABLE IF NOT EXISTS `Levels` (
`Id` BIGINT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(255) NOT NULL,
`Color` VARCHAR(7) 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`)
);

View File

@@ -56,8 +56,12 @@ class Level(TableABC):
self._permissions = value
@property
def server(self) -> Optional[Server]:
def server(self) -> Server:
return self._server
@server.setter
def server(self, value: Server):
self._server = value
@staticmethod
def get_select_all_string() -> str:
@@ -85,8 +89,8 @@ class Level(TableABC):
INSERT INTO `Levels` (
`Name`, `Color`, `MinXp`, `PermissionInt`, `ServerId`, `CreatedAt`, `LastModifiedAt`
) VALUES (
`{self._name}`,
`{self._color}`,
'{self._name}',
'{self._color}',
{self._min_xp},
{self._permissions},
{self._server.server_id},
@@ -99,9 +103,8 @@ class Level(TableABC):
def udpate_string(self) -> str:
return str(f"""
UPDATE `Levels`
SET `Name` = {self._name},
`Name` = {self._name},
`Color` = {self._color},
SET `Name` = '{self._name}',
`Color` = '{self._color}',
`MinXp` = {self._min_xp},
`PermissionInt` = {self._permissions},
`LastModifiedAt` = '{self._modified_at}'

View File

@@ -0,0 +1,25 @@
from cpl_core.database.context import DatabaseContextABC
from cpl_core.dependency_injection import ServiceProviderABC
from cpl_query.extension import List
from bot_core.logging.database_logger import DatabaseLogger
from bot_data.abc.data_seeder_abc import DataSeederABC
class SeederService:
def __init__(self, logger: DatabaseLogger, services: ServiceProviderABC, db: DatabaseContextABC):
self._logger = logger
self._services = services
self._db = db
self._seeder = List(type, DataSeederABC.__subclasses__())
async def seed(self):
self._logger.info(__name__, f"Seed data")
for seeder in self._seeder:
seeder_as_service: DataSeederABC = self._services.get_service(seeder)
self._logger.debug(__name__, f"Starting seeder {seeder.__name__}")
await seeder_as_service.seed()
self._db.save_changes()