Files
mkt.ose.tw/backend/app/api/runtime/router.py
2026-03-23 20:23:58 +08:00

50 lines
1.6 KiB
Python

from fastapi import APIRouter, HTTPException, status
from app.application.runtime.assignment import RuntimeService
from app.schemas.runtime import (
RuntimeAssignRequest,
RuntimeAssignResponse,
RuntimeBootstrapRequest,
RuntimeBootstrapResponse,
RuntimeEventRequest,
RuntimeEventResponse,
RuntimePayloadRequest,
RuntimePayloadResponse,
)
router = APIRouter()
service = RuntimeService()
@router.post("/bootstrap", response_model=RuntimeBootstrapResponse)
async def runtime_bootstrap(
request: RuntimeBootstrapRequest,
) -> RuntimeBootstrapResponse:
return await service.bootstrap(request)
@router.post("/assign", response_model=RuntimeAssignResponse)
async def runtime_assign(request: RuntimeAssignRequest) -> RuntimeAssignResponse:
item = await service.assign(request)
if not item:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail="No assignable variants were provided.",
)
return item
@router.post("/payload", response_model=RuntimePayloadResponse)
async def runtime_payload(request: RuntimePayloadRequest) -> RuntimePayloadResponse:
return await service.payload(request)
@router.post("/events/impression", response_model=RuntimeEventResponse)
async def runtime_impression(request: RuntimeEventRequest) -> RuntimeEventResponse:
return await service.ingest_event(request)
@router.post("/events/conversion", response_model=RuntimeEventResponse)
async def runtime_conversion(request: RuntimeEventRequest) -> RuntimeEventResponse:
return await service.ingest_event(request)