feat: dependencies injection
This commit is contained in:
parent
90ebd044e7
commit
c46a43160c
|
@ -1,3 +1,5 @@
|
||||||
from .default import default_blueprint
|
from .default import default_blueprint
|
||||||
|
|
||||||
from .auth import auth_blueprint
|
from .auth import auth_blueprint
|
||||||
from .user import user_blueprint
|
|
||||||
|
# from .user import user_blueprint
|
||||||
|
|
|
@ -1,23 +1,25 @@
|
||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
from controllers import AuthController
|
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_blueprint = Blueprint("auth", __name__)
|
||||||
auth_controller = AuthController(containers.user_service, containers.auth_service)
|
|
||||||
|
|
||||||
|
|
||||||
# Daftarkan rute ke controller
|
|
||||||
@auth_blueprint.route("/register", methods=["POST"])
|
@auth_blueprint.route("/register", methods=["POST"])
|
||||||
def register():
|
@inject
|
||||||
|
def register(auth_controller: AuthController = Provide[Container.auth_controller]):
|
||||||
return auth_controller.register()
|
return auth_controller.register()
|
||||||
|
|
||||||
|
|
||||||
@auth_blueprint.route("/login", methods=["POST"])
|
@auth_blueprint.route("/login", methods=["POST"])
|
||||||
def login():
|
@inject
|
||||||
|
def login(auth_controller: AuthController = Provide[Container.auth_controller]):
|
||||||
return auth_controller.login()
|
return auth_controller.login()
|
||||||
|
|
||||||
|
|
||||||
@auth_blueprint.route("/logout", methods=["DELETE"])
|
@auth_blueprint.route("/logout", methods=["DELETE"])
|
||||||
def logout():
|
@inject
|
||||||
|
def logout(auth_controller: AuthController = Provide[Container.auth_controller]):
|
||||||
return auth_controller.logout()
|
return auth_controller.logout()
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
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) -> PyMongo:
|
def init_db(app: Flask, container: Container) -> PyMongo:
|
||||||
try:
|
try:
|
||||||
mongo = PyMongo(app) # Initialize PyMongo with the app
|
|
||||||
app.config["MONGO_URI"] = Config.MONGO_URI
|
app.config["MONGO_URI"] = Config.MONGO_URI
|
||||||
|
mongo = PyMongo(app) # Initialize PyMongo with the app
|
||||||
print(f"Connecting to MongoDB: {Config.MONGO_URI}")
|
print(f"Connecting to MongoDB: {Config.MONGO_URI}")
|
||||||
|
|
||||||
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:
|
||||||
|
|
|
@ -1,42 +1,25 @@
|
||||||
from dependency_injector import containers, providers
|
from dependency_injector import containers, providers
|
||||||
from flask import Flask
|
|
||||||
from flask_pymongo import PyMongo
|
|
||||||
from repositories.user_repository import UserRepository
|
from repositories.user_repository import UserRepository
|
||||||
from services.user_service import UserService
|
from services import UserService, AuthService
|
||||||
from services.auth_service import AuthService
|
from controllers import AuthController
|
||||||
|
|
||||||
|
|
||||||
class Container(containers.DeclarativeContainer):
|
class Container(containers.DeclarativeContainer):
|
||||||
"""Dependency Injection Container"""
|
"""Dependency Injection Container"""
|
||||||
|
|
||||||
# Flask App Provider
|
mongo = providers.Singleton(lambda: None)
|
||||||
app = providers.Singleton(
|
|
||||||
Flask,
|
|
||||||
import_name=__name__,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Configurations
|
|
||||||
config = providers.Configuration()
|
|
||||||
|
|
||||||
# Initialize MongoDB
|
|
||||||
mongo = providers.Singleton(
|
|
||||||
PyMongo,
|
|
||||||
app,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Initialize Repositories
|
|
||||||
user_repository = providers.Factory(
|
user_repository = providers.Factory(
|
||||||
UserRepository,
|
UserRepository,
|
||||||
db=mongo.provided.db,
|
mongo.db,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Initialize Services
|
|
||||||
auth_service = providers.Factory(
|
auth_service = providers.Factory(
|
||||||
AuthService,
|
AuthService,
|
||||||
user_repository=user_repository,
|
user_repository,
|
||||||
)
|
)
|
||||||
|
|
||||||
user_service = providers.Factory(
|
auth_controller = providers.Factory(
|
||||||
UserService,
|
AuthController,
|
||||||
user_repository=user_repository,
|
AuthService,
|
||||||
)
|
)
|
||||||
|
|
11
app/main.py
11
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 di_container import Container
|
||||||
from configs import Config
|
from configs import Config
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
|
from blueprints import auth_blueprint
|
||||||
|
from database import init_db
|
||||||
|
|
||||||
|
|
||||||
def createApp() -> Flask:
|
def createApp() -> Flask:
|
||||||
container = Container()
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
container = Container()
|
||||||
|
|
||||||
|
init_db(app, container)
|
||||||
|
|
||||||
app.container = container
|
app.container = container
|
||||||
|
|
||||||
# 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")
|
||||||
# app.register_blueprint(user_blueprint, url_prefix="/api")
|
# app.register_blueprint(user_blueprint, url_prefix="/api")
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|
Loading…
Reference in New Issue