35 lines
1.0 KiB
Python
35 lines
1.0 KiB
Python
from http import HTTPStatus
|
|
|
|
from django.http import HttpRequest
|
|
from ninja import Router
|
|
|
|
from api.v1.decision.schemas import DecisionIn, DecisionOut, SingleDecisionOut
|
|
from apps.decision.services import decide_for_flag
|
|
|
|
router = Router(tags=["decision"])
|
|
|
|
|
|
@router.post(
|
|
"",
|
|
response={HTTPStatus.OK: DecisionOut},
|
|
summary="Get decisions for feature flags",
|
|
description=(
|
|
"Resolve feature flag values for a given subject. "
|
|
"Returns default values when no active experiment applies, "
|
|
"or experiment variant values when the subject is assigned."
|
|
),
|
|
)
|
|
def decide(
|
|
request: HttpRequest,
|
|
payload: DecisionIn,
|
|
) -> tuple[HTTPStatus, DecisionOut]:
|
|
decisions = []
|
|
for flag_key in payload.flags:
|
|
result = decide_for_flag(
|
|
flag_key=flag_key,
|
|
subject_id=payload.subject_id,
|
|
subject_attributes=payload.subject_attributes,
|
|
)
|
|
decisions.append(SingleDecisionOut(**result))
|
|
return HTTPStatus.OK, DecisionOut(decisions=decisions)
|