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

87 lines
2.0 KiB
Python

from __future__ import annotations
from typing import Any
from app.schemas.common import ApiModel
class RuntimeVariantCandidateInput(ApiModel):
id: str
variant_key: str
traffic_weight: int
content_config: dict[str, Any] | list[Any] | None = None
class RuntimeExperimentInput(ApiModel):
experiment_id: str
experiment_key: str
status: str
site_key: str | None = None
assignment_salt: str | None = None
release_id: str | None = None
release_version: int | None = None
payload: dict[str, Any] | list[Any] | None = None
variants: list[RuntimeVariantCandidateInput] = []
class RuntimeBootstrapRequest(ApiModel):
site_id: str | None = None
site_key: str | None = None
url: str
visitor_id: str
user_agent: str | None = None
class RuntimeBootstrapResponse(ApiModel):
site_id: str | None = None
site_key: str | None = None
url: str
visitor_id: str
candidate_experiments: list[RuntimeExperimentInput] = []
class RuntimeAssignRequest(ApiModel):
visitor_id: str
experiment: RuntimeExperimentInput
class RuntimeAssignResponse(ApiModel):
experiment_id: str
experiment_key: str
variant_id: str
variant_key: str
bucket: int
reason: str
class RuntimePayloadRequest(ApiModel):
visitor_id: str
experiment: RuntimeExperimentInput
class RuntimePayloadResponse(ApiModel):
experiment_id: str
experiment_key: str
release_id: str | None = None
release_version: int | None = None
assigned_variant_id: str | None = None
assigned_variant_key: str | None = None
payload: dict[str, Any] | list[Any] | None = None
class RuntimeEventRequest(ApiModel):
site_id: str | None = None
site_key: str | None = None
experiment_id: str | None = None
experiment_key: str | None = None
variant_id: str | None = None
variant_key: str | None = None
visitor_id: str
event_name: str
payload: dict[str, Any] | list[Any] | None = None
class RuntimeEventResponse(ApiModel):
accepted: bool
event_name: str