feat(decide): added decision API
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user