Skip to content

Commit c0ddb99

Browse files
committed
Add dependency injection
1 parent f517a81 commit c0ddb99

9 files changed

Lines changed: 71 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from api.application_settings import ApplicationSettings
2+
from api.workflows.products.publish_product.publish_product_workflow import (
3+
PublishProductWorkflow,
4+
)
5+
6+
7+
class DependencyContainer:
8+
@classmethod
9+
def initialize(cls) -> None:
10+
cls.initialize_application_settings()
11+
12+
@classmethod
13+
def initialize_application_settings(cls) -> None:
14+
cls.application_settings = ApplicationSettings() # type: ignore[reportCallIssue]
15+
16+
@classmethod
17+
def get_application_settings(cls) -> ApplicationSettings:
18+
return cls.application_settings
19+
20+
@classmethod
21+
def get_publish_product_workflow(cls) -> PublishProductWorkflow:
22+
return PublishProductWorkflow()

api/src/api/main.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
from fastapi import FastAPI
22

3+
from api.dependency_container import DependencyContainer
4+
from api.workflows.products import product_router
5+
6+
DependencyContainer.initialize()
37
app = FastAPI()
8+
app.include_router(product_router.router)
49

510

611
@app.get("/")

api/src/api/workflows/__init__.py

Whitespace-only changes.

api/src/api/workflows/products/__init__.py

Whitespace-only changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from fastapi import APIRouter
2+
3+
from api.dependency_container import DependencyContainer
4+
from api.workflows.products.publish_product.publish_product_request import (
5+
PublishProductRequest,
6+
)
7+
from api.workflows.products.publish_product.publish_product_response import (
8+
PublishProductResponse,
9+
)
10+
11+
router = APIRouter(
12+
prefix="/api/v1/products",
13+
tags=["products"],
14+
)
15+
16+
17+
@router.post("")
18+
async def publish_product(request: PublishProductRequest) -> PublishProductResponse:
19+
return await DependencyContainer.get_publish_product_workflow().execute(request)

api/src/api/workflows/products/publish_product/__init__.py

Whitespace-only changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from decimal import Decimal
2+
3+
from pydantic import BaseModel
4+
5+
6+
class PublishProductRequest(BaseModel):
7+
name: str
8+
description: str | None = None
9+
price: Decimal
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from pydantic import BaseModel
2+
3+
4+
class PublishProductResponse(BaseModel):
5+
id: str
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from api.workflows.products.publish_product.publish_product_request import (
2+
PublishProductRequest,
3+
)
4+
from api.workflows.products.publish_product.publish_product_response import (
5+
PublishProductResponse,
6+
)
7+
8+
9+
class PublishProductWorkflow:
10+
async def execute(self, request: PublishProductRequest) -> PublishProductResponse:
11+
return PublishProductResponse(id=request.name)

0 commit comments

Comments
 (0)