feat: dependencies injection for db setup done

This commit is contained in:
akhdanre 2025-02-26 10:33:51 +07:00
parent c46a43160c
commit c40fd7a3c9
3 changed files with 8 additions and 9 deletions

View File

@ -1,10 +1,9 @@
from flask_pymongo import PyMongo from flask_pymongo import PyMongo
from flask import Flask from flask import Flask
from configs import Config from configs import Config
from di_container import Container # Import your container
def init_db(app: Flask, container: Container) -> PyMongo: def init_db(app: Flask) -> PyMongo:
try: try:
app.config["MONGO_URI"] = Config.MONGO_URI app.config["MONGO_URI"] = Config.MONGO_URI
mongo = PyMongo(app) # Initialize PyMongo with the app mongo = PyMongo(app) # Initialize PyMongo with the app
@ -13,9 +12,6 @@ def init_db(app: Flask, container: Container) -> PyMongo:
mongo.cx.server_info() # Ping the MongoDB server mongo.cx.server_info() # Ping the MongoDB server
print("✅ MongoDB connection successful!") print("✅ MongoDB connection successful!")
# Store the MongoDB instance in the container
container.mongo.override(mongo)
return mongo return mongo
except Exception as e: except Exception as e:

View File

@ -2,16 +2,17 @@ from dependency_injector import containers, providers
from repositories.user_repository import UserRepository from repositories.user_repository import UserRepository
from services import UserService, AuthService from services import UserService, AuthService
from controllers import AuthController from controllers import AuthController
from flask_pymongo import PyMongo
class Container(containers.DeclarativeContainer): class Container(containers.DeclarativeContainer):
"""Dependency Injection Container""" """Dependency Injection Container"""
mongo = providers.Singleton(lambda: None) mongo = providers.Dependency()
user_repository = providers.Factory( user_repository = providers.Factory(
UserRepository, UserRepository,
mongo.db, mongo.provided.db,
) )
auth_service = providers.Factory( auth_service = providers.Factory(

View File

@ -11,10 +11,12 @@ def createApp() -> Flask:
app = Flask(__name__) app = Flask(__name__)
container = Container() container = Container()
init_db(app, container)
app.container = container app.container = container
mongo = init_db(app)
if mongo is not None:
container.mongo.override(mongo)
# Register Blueprints # Register Blueprints
app.register_blueprint(default_blueprint) app.register_blueprint(default_blueprint)
app.register_blueprint(auth_blueprint, url_prefix="/api") app.register_blueprint(auth_blueprint, url_prefix="/api")