diff --git a/src/main.py b/src/main.py index 3249a8b..cfc48d8 100644 --- a/src/main.py +++ b/src/main.py @@ -1,8 +1,10 @@ #!/usr/bin/env python from src.services.notifications import NotificationService, get_notification_service -from src.services.email import get_service as get_email_service -from src.services.users import get_service as get_user_service +from src.services.email import EmailService, get_email_service +from src.services.auth import AuthService +from src.services.users import UserService +from dataclasses import dataclass from src.infra.db import get_database from src.infra.users import UserRepoImpl from waitress import serve @@ -15,20 +17,31 @@ from src.config import parse_config, Config logger = logging.getLogger(__name__) +@dataclass +class AppServices: + users: UserService + auth: AuthService + email: EmailService + notifications: NotificationService + + +class MyFlask(Flask): + services: AppServices + + def create_app(name: str, config: Config) -> Flask: logging.basicConfig(level=config.logging.level, format=('%(asctime)s %(levelname)s [%(name)s] %(message)s')) - app = Flask(name) - - email_service = get_email_service(config.email) - notification_service = make_notification_service(email_service) + app = MyFlask(name) database = get_database(config.database) user_repo = UserRepoImpl(database) - user_service = get_user_service(user_repo) - - app.extensions['email'] = email_service - app.extensions['notifications'] = notification_service - app.extensions['user_service'] = user_service + email_service = get_email_service(config.email) + app.services = AppServices( + users=UserService(user_repo), + auth=AuthService(config.auth), + email=email_service, + notifications=get_notification_service(email_service), + ) if config.host: app.config['SERVER_NAME'] = config.host diff --git a/src/services/email.py b/src/services/email.py index dc51ad0..918bd28 100644 --- a/src/services/email.py +++ b/src/services/email.py @@ -42,5 +42,5 @@ class BirdEmailServiceImpl(EmailService): return response.ok -def get_service(config: EmailConfig) -> EmailService: +def get_email_service(config: EmailConfig) -> EmailService: return BirdEmailServiceImpl(config) diff --git a/src/services/users.py b/src/services/users.py index 9b4a0c2..3132f33 100644 --- a/src/services/users.py +++ b/src/services/users.py @@ -96,7 +96,3 @@ class UserService: user = self._repo.get_user_by_id(user_id) if user: return user.to_profile() - - -def get_service(repo: UserRepo) -> UserService: - return UserService(repo)