diff --git a/config/config.example.toml b/config/config.example.toml index 84d67d2..675f2d7 100644 --- a/config/config.example.toml +++ b/config/config.example.toml @@ -1,3 +1,11 @@ +[lan] + name="EZ LAN" + iteration="0.5" + tickets={ "LUXUS" = 40, "NORMAL" = 10 } + prices={ "LUXUS" = 3000, "NORMAL" = 2500 } # Eurocent + date_from="2024-10-30 15:00:00" + date_till="2024-11-01 12:00:00" + [database] db_user="demo_user" db_password="demo_password" diff --git a/src/ez_lan_manager/services/ConfigurationService.py b/src/ez_lan_manager/services/ConfigurationService.py index 151523f..f2e5f84 100644 --- a/src/ez_lan_manager/services/ConfigurationService.py +++ b/src/ez_lan_manager/services/ConfigurationService.py @@ -1,9 +1,10 @@ import sys +from datetime import datetime from pathlib import Path import logging import tomllib -from src.ez_lan_manager.types.ConfigurationTypes import DatabaseConfiguration, MailingServiceConfiguration +from src.ez_lan_manager.types.ConfigurationTypes import DatabaseConfiguration, MailingServiceConfiguration, LanInfo, TicketInfo logger = logging.getLogger(__name__.split(".")[-1]) @@ -33,14 +34,33 @@ class ConfigurationService: def get_mailing_service_configuration(self) -> MailingServiceConfiguration: try: - database_configuration = self._config["mailing"] + mailing_configuration = self._config["mailing"] return MailingServiceConfiguration( - smtp_server=database_configuration["smtp_server"], - smtp_port=database_configuration["smtp_port"], - sender=database_configuration["sender"], - username=database_configuration["username"], - password=database_configuration["password"] + smtp_server=mailing_configuration["smtp_server"], + smtp_port=mailing_configuration["smtp_port"], + sender=mailing_configuration["sender"], + username=mailing_configuration["username"], + password=mailing_configuration["password"] ) except KeyError: logger.fatal("Error loading MailingServiceConfiguration, exiting...") sys.exit(1) + + def get_lan_info(self) -> LanInfo: + try: + lan_info = self._config["lan"] + ticket_info = TicketInfo( + categories=list(lan_info["tickets"].keys()), + _prices=lan_info["prices"], + _available_tickets=lan_info["tickets"] + ) + return LanInfo( + name=lan_info["name"], + iteration=lan_info["iteration"], + ticket_info=ticket_info, + date_from=datetime.strptime(lan_info["date_from"], "%Y-%m-%d %H:%M:%S"), + date_till=datetime.strptime(lan_info["date_till"], "%Y-%m-%d %H:%M:%S") + ) + except KeyError: + logger.fatal("Error loading LAN Info, exiting...") + sys.exit(1) diff --git a/src/ez_lan_manager/services/TicketingService.py b/src/ez_lan_manager/services/TicketingService.py new file mode 100644 index 0000000..3b92ad0 --- /dev/null +++ b/src/ez_lan_manager/services/TicketingService.py @@ -0,0 +1,7 @@ +import logging + +logger = logging.getLogger(__name__.split(".")[-1]) + +class TicketingService: + def __init__(self) -> None: + pass \ No newline at end of file diff --git a/src/ez_lan_manager/types/ConfigurationTypes.py b/src/ez_lan_manager/types/ConfigurationTypes.py index 2f164fc..b3152ec 100644 --- a/src/ez_lan_manager/types/ConfigurationTypes.py +++ b/src/ez_lan_manager/types/ConfigurationTypes.py @@ -1,4 +1,8 @@ from dataclasses import dataclass +from datetime import datetime + +class NoSuchCategoryError(Exception): + pass @dataclass(frozen=True) class DatabaseConfiguration: @@ -8,6 +12,24 @@ class DatabaseConfiguration: db_port: int db_name: str +@dataclass(frozen=True) +class TicketInfo: + categories: list[str] + _prices: dict[str, int] + _available_tickets: dict[str, int] + + def get_price(self, category: str) -> int: + try: + return self._prices[category] + except KeyError: + raise NoSuchCategoryError + + def get_available_tickets(self, category: str) -> int: + try: + return self._available_tickets[category] + except KeyError: + raise NoSuchCategoryError + @dataclass(frozen=True) class MailingServiceConfiguration: smtp_server: str @@ -15,3 +37,11 @@ class MailingServiceConfiguration: sender: str username: str password: str + +@dataclass(frozen=True) +class LanInfo: + name: str + iteration: str + ticket_info: TicketInfo + date_from: datetime + date_till: datetime