feat: dependencies injection

This commit is contained in:
akhdanre 2025-02-19 08:49:18 +07:00
parent 90ebd044e7
commit c46a43160c
5 changed files with 34 additions and 38 deletions

View File

@ -1,3 +1,5 @@
from .default import default_blueprint
from .auth import auth_blueprint
from .user import user_blueprint
# from .user import user_blueprint

View File

@ -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()

View File

@ -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:

View File

@ -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,
)

View File

@ -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