Skip to content

Commit d880a34

Browse files
committed
Wire CreateBuildImageUseCase into FastAPI dependencies with shared session support
1 parent d15a42c commit d880a34

File tree

2 files changed

+31
-32
lines changed

2 files changed

+31
-32
lines changed

build_stream/api/build_image/dependencies.py

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,19 @@
1616

1717
from typing import Optional
1818

19-
from fastapi import Header, HTTPException, status
19+
from fastapi import Depends, Header, HTTPException, status
20+
from sqlalchemy.orm import Session
2021

22+
from api.dependencies import (
23+
get_db_session,
24+
_create_sql_job_repo,
25+
_create_sql_stage_repo,
26+
_create_sql_audit_repo,
27+
_get_container,
28+
_ENV,
29+
)
2130
from core.jobs.value_objects import ClientId, CorrelationId
31+
from orchestrator.build_image.use_cases import CreateBuildImageUseCase
2232

2333

2434
def _get_container():
@@ -27,35 +37,22 @@ def _get_container():
2737
return container
2838

2939

30-
def get_create_build_image_use_case():
31-
"""Provide create build image use case."""
32-
return _get_container().create_build_image_use_case()
33-
34-
35-
def get_build_image_client_id(
36-
authorization: str = Header(..., description="Bearer token for authentication"),
37-
) -> ClientId:
38-
"""Extract ClientId from Bearer token header."""
39-
if not authorization.startswith("Bearer "):
40-
raise HTTPException(
41-
status_code=status.HTTP_401_UNAUTHORIZED,
42-
detail="Invalid authorization header format",
40+
def get_create_build_image_use_case(
41+
db_session: Session = Depends(get_db_session),
42+
) -> CreateBuildImageUseCase:
43+
"""Provide create build image use case with shared session in prod."""
44+
if _ENV == "prod":
45+
container = _get_container()
46+
return CreateBuildImageUseCase(
47+
job_repo=_create_sql_job_repo(db_session),
48+
stage_repo=_create_sql_stage_repo(db_session),
49+
audit_repo=_create_sql_audit_repo(db_session),
50+
config_service=container.build_image_config_service(),
51+
queue_service=container.playbook_queue_request_service(),
52+
inventory_repo=container.input_repository(),
53+
uuid_generator=container.uuid_generator(),
4354
)
44-
45-
token = authorization[7:].lstrip()
46-
if not token:
47-
raise HTTPException(
48-
status_code=status.HTTP_401_UNAUTHORIZED,
49-
detail="Missing authentication token",
50-
)
51-
52-
try:
53-
return ClientId(token[:128] if len(token) > 128 else token)
54-
except ValueError as exc:
55-
raise HTTPException(
56-
status_code=status.HTTP_401_UNAUTHORIZED,
57-
detail="Invalid client credentials",
58-
) from exc
55+
return _get_container().create_build_image_use_case()
5956

6057

6158
def get_build_image_correlation_id(

build_stream/api/build_image/routes.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616

1717
import logging
1818
from datetime import datetime, timezone
19+
from typing import Annotated
1920

2021
from fastapi import APIRouter, Depends, HTTPException, status
2122

2223
from api.build_image.dependencies import (
2324
get_create_build_image_use_case,
24-
get_build_image_client_id,
2525
get_build_image_correlation_id,
2626
)
2727
from api.dependencies import verify_token, require_job_write
@@ -82,9 +82,8 @@ def _build_error_response(
8282
def create_build_image(
8383
job_id: str,
8484
request_body: CreateBuildImageRequest,
85-
token_data: dict = Depends(verify_token),
85+
token_data: Annotated[dict, Depends(verify_token)] = None, # pylint: disable=unused-argument
8686
use_case: CreateBuildImageUseCase = Depends(get_create_build_image_use_case),
87-
client_id: ClientId = Depends(get_build_image_client_id),
8887
correlation_id: CorrelationId = Depends(get_build_image_correlation_id),
8988
_: None = Depends(require_job_write),
9089
) -> CreateBuildImageResponse:
@@ -93,6 +92,9 @@ def create_build_image(
9392
Accepts the request synchronously and returns 202 Accepted.
9493
The playbook execution is handled by the NFS queue watcher service.
9594
"""
95+
# Extract client_id from validated token data
96+
client_id = ClientId(token_data["client_id"])
97+
9698
logger.info(
9799
"Create build image request: job_id=%s, arch=%s, image_key=%s, "
98100
"client_id=%s, correlation_id=%s",

0 commit comments

Comments
 (0)