feat: manage trial settings on tariffs page

This commit is contained in:
3252a8
2026-05-24 18:46:23 +03:00
parent 60d1ba4efc
commit d1b9990bac
11 changed files with 558 additions and 10 deletions
+32 -4
View File
@@ -266,10 +266,38 @@ SETTINGS_MANIFEST: List[SettingField] = [
subsection="common",
),
# ─── Trial ─────────────────────────────────────────────────────
SettingField("TRIAL_ENABLED", "bool", "trial", "Триал включён"),
SettingField("TRIAL_DURATION_DAYS", "int", "trial", "Длительность триала (дней)", min=0),
SettingField("TRIAL_TRAFFIC_LIMIT_GB", "float", "trial", "Лимит трафика триала (ГБ)", min=0),
SettingField("TRIAL_TRAFFIC_STRATEGY", "string", "trial", "Стратегия сброса трафика триала"),
SettingField("TRIAL_ENABLED", "bool", "pricing", "Триал включён", subsection="trial"),
SettingField(
"TRIAL_DURATION_DAYS",
"int",
"pricing",
"Длительность триала (дней)",
min=0,
subsection="trial",
),
SettingField(
"TRIAL_TRAFFIC_LIMIT_GB",
"float",
"pricing",
"Лимит трафика триала (ГБ)",
min=0,
subsection="trial",
),
SettingField(
"TRIAL_TRAFFIC_STRATEGY",
"string",
"pricing",
"Стратегия сброса трафика триала",
subsection="trial",
),
SettingField(
"TRIAL_SQUAD_UUIDS",
"string",
"pricing",
"Internal Squads для триала",
"UUID через запятую. Если пусто, используется USER_SQUAD_UUIDS.",
subsection="trial",
),
# ─── Referral program ──────────────────────────────────────────
SettingField(
"REFERRAL_ONE_BONUS_PER_REFEREE", "bool", "referral", "Один бонус на приглашённого"
@@ -83,7 +83,15 @@ class TrialSubscriptionMixin:
status="ACTIVE",
traffic_limit_bytes=self.settings.trial_traffic_limit_bytes,
traffic_limit_strategy=self.settings.TRIAL_TRAFFIC_STRATEGY,
include_default_squads=False,
)
trial_squads = self.settings.parsed_trial_squad_uuids
if trial_squads:
panel_update_payload["activeInternalSquads"] = trial_squads
if self.settings.parsed_user_external_squad_uuid:
panel_update_payload["externalSquadUuid"] = (
self.settings.parsed_user_external_squad_uuid
)
panel_update_payload.update(self._panel_identity_payload_for_user(db_user))
+18
View File
@@ -273,6 +273,13 @@ class Settings(BaseSettings):
TRIAL_DURATION_DAYS: int = Field(default=3)
TRIAL_TRAFFIC_LIMIT_GB: Optional[float] = Field(default=5.0)
TRIAL_TRAFFIC_STRATEGY: str = Field(default="NO_RESET")
TRIAL_SQUAD_UUIDS: Optional[str] = Field(
default=None,
description=(
"Comma-separated UUIDs of internal squads to assign during trial activation. "
"Falls back to USER_SQUAD_UUIDS when empty."
),
)
CRYPT4_ENABLED: bool = Field(
default=False, description="Enable happ crypt4 encryption for subscription URLs"
@@ -543,6 +550,17 @@ class Settings(BaseSettings):
return [uuid.strip() for uuid in self.USER_SQUAD_UUIDS.split(",") if uuid.strip()]
return None
@computed_field
@property
def parsed_trial_squad_uuids(self) -> Optional[List[str]]:
if self.TRIAL_SQUAD_UUIDS:
trial_squads = [
uuid.strip() for uuid in self.TRIAL_SQUAD_UUIDS.split(",") if uuid.strip()
]
if trial_squads:
return trial_squads
return self.parsed_user_squad_uuids
@computed_field
@property
def parsed_user_external_squad_uuid(self) -> Optional[str]: