diff --git a/app/blueprints/__init__.py b/app/blueprints/__init__.py index 7f5acaa..ffac468 100644 --- a/app/blueprints/__init__.py +++ b/app/blueprints/__init__.py @@ -1,3 +1,5 @@ from .default import default_blueprint + from .auth import auth_blueprint -from .user import user_blueprint + +# from .user import user_blueprint diff --git a/app/blueprints/auth.py b/app/blueprints/auth.py index 8800194..9426e5d 100644 --- a/app/blueprints/auth.py +++ b/app/blueprints/auth.py @@ -1,23 +1,25 @@ from flask import Blueprint from controllers import AuthController -from di_container import containers +from di_container import Container +from dependency_injector.wiring import inject, Provide + -# Inisialisasi blueprint auth_blueprint = Blueprint("auth", __name__) -auth_controller = AuthController(containers.user_service, containers.auth_service) -# Daftarkan rute ke controller @auth_blueprint.route("/register", methods=["POST"]) -def register(): +@inject +def register(auth_controller: AuthController = Provide[Container.auth_controller]): return auth_controller.register() @auth_blueprint.route("/login", methods=["POST"]) -def login(): +@inject +def login(auth_controller: AuthController = Provide[Container.auth_controller]): return auth_controller.login() @auth_blueprint.route("/logout", methods=["DELETE"]) -def logout(): +@inject +def logout(auth_controller: AuthController = Provide[Container.auth_controller]): return auth_controller.logout() diff --git a/app/database/db.py b/app/database/db.py index f6e4933..94e08f2 100644 --- a/app/database/db.py +++ b/app/database/db.py @@ -1,17 +1,21 @@ from flask_pymongo import PyMongo from flask import Flask from configs import Config +from di_container import Container # Import your container -def init_db(app: Flask) -> PyMongo: +def init_db(app: Flask, container: Container) -> PyMongo: try: - mongo = PyMongo(app) # Initialize PyMongo with the app app.config["MONGO_URI"] = Config.MONGO_URI + mongo = PyMongo(app) # Initialize PyMongo with the app print(f"Connecting to MongoDB: {Config.MONGO_URI}") mongo.cx.server_info() # Ping the MongoDB server print("✅ MongoDB connection successful!") + # Store the MongoDB instance in the container + container.mongo.override(mongo) + return mongo except Exception as e: diff --git a/app/di_container.py b/app/di_container.py index e7baf56..41ffa1e 100644 --- a/app/di_container.py +++ b/app/di_container.py @@ -1,42 +1,25 @@ from dependency_injector import containers, providers -from flask import Flask -from flask_pymongo import PyMongo from repositories.user_repository import UserRepository -from services.user_service import UserService -from services.auth_service import AuthService +from services import UserService, AuthService +from controllers import AuthController class Container(containers.DeclarativeContainer): """Dependency Injection Container""" - # Flask App Provider - app = providers.Singleton( - Flask, - import_name=__name__, - ) + mongo = providers.Singleton(lambda: None) - # Configurations - config = providers.Configuration() - - # Initialize MongoDB - mongo = providers.Singleton( - PyMongo, - app, - ) - - # Initialize Repositories user_repository = providers.Factory( UserRepository, - db=mongo.provided.db, + mongo.db, ) - # Initialize Services auth_service = providers.Factory( AuthService, - user_repository=user_repository, + user_repository, ) - user_service = providers.Factory( - UserService, - user_repository=user_repository, + auth_controller = providers.Factory( + AuthController, + AuthService, ) diff --git a/app/main.py b/app/main.py index aecb997..581b1f6 100644 --- a/app/main.py +++ b/app/main.py @@ -1,18 +1,23 @@ -from blueprints import auth_blueprint, user_blueprint, default_blueprint +from blueprints import default_blueprint from di_container import Container from configs import Config from flask import Flask +from blueprints import auth_blueprint +from database import init_db def createApp() -> Flask: - container = Container() app = Flask(__name__) + container = Container() + + init_db(app, container) + app.container = container # Register Blueprints app.register_blueprint(default_blueprint) - # app.register_blueprint(auth_blueprint, url_prefix="/api") + app.register_blueprint(auth_blueprint, url_prefix="/api") # app.register_blueprint(user_blueprint, url_prefix="/api") return app