Preskoči na vsebino

Funkcijske zastavice

White-label namestitev redko ladij vsako funkcijo. Funkcijske zastavice omogočajo operaterju vključiti/izključiti glavne funkcije produkta — ob namestitvi prek konfiguracije, ali kasneje med izvajanjem, brez ponovnega uvajanja. Vse funkcije so privzeto omogočene; namestitev navede samo tiste ki jih spreminja.

Model​

  • Core.Features.FeatureFlag — enum funkcij ki jih je mogoče vključiti: Authoring, Backtesting, Execution, CopyTrading, Ai, PortfolioAgent, Alerts, PropGuard, PropFirm, Accounts, OpenApi, Mcp, Compliance. Corey admin površine (nadzorna plošča, uporabniki, vozlišča, avtentikacija) nikoli ni mogoče vključiti, niso tukaj.
  • Core.Options.FeaturesOptions — konfiguracijska osnova, vezana iz App:Features. Vsaka lastnost privzeto true.
  • Core.Features.IFeatureGate — razrešuje efektivno stanje: konfiguracijska osnova prelita z izbirnim lastnik-setvim runtime prevzemom. Implementiran od Infrastructure.Features.FeatureGate, predpomni prevzete kratko (FeatureSettings.OverrideCacheTtl), invalidira ob spremembi.

Runtime prevzemi shranjeni kot AppSetting vrstice ključane feature.<FeatureFlag> (vrednost true/false). Brez vrstice = "uporabi konfiguracijsko osnovno".

Dva načina za onemogočanje funkcije​

1. Konfiguracija namestitve (osnova)​

Nastavi zastavico na false pod App:Features. Primer appsettings.json:

{
"App": {
"Features": {
"CopyTrading": false,
"PropGuard": false
}
}
}

Ali prek spremenljivk okolja (dvojni podčrtaj):

App__Features__CopyTrading=false

Osnova vrat startup registracija ozadnjih delavcev (Nodes.AddNodes) in MCP orodij (Mcp strežnik), torej funkcija onemogočena v konfiguraciji nikoli ne zažene svojih gostovanih storitev niti ne razkriva svojih MCP orodij.

2. Runtime prevzem (lastnik)​

Lastnik lahko preklopi katerokoli funkcijo v živo iz Settings → Features (/settings/features) ali API:

GET /api/features -> [{ "flag": "CopyTrading", "enabled": true }, ...] (Lastnik)
PUT /api/features/{flag} body { "enabled": false } -> nastavi prevzem (Lastnik)
PUT /api/features/{flag} body { "enabled": null } -> počisti prevzem (povrni) (Lastnik)

Runtime spremembe učinkujejo takoj za vrata ob času zahteve (navigacija, API). Ozadnji delavci in MCP orodja vključena ob startu, poberejo runtime spremembo ob naslednjem procesu restart.

Kaj vsako vrata uveljavljajo​

PlastMehanizemČas
HTTP APIRouteGroupBuilder.RequireFeature(flag) filter končne točke → 404 ko onemogočenoRuntime
NavigacijaNavMenu skrije povezave prek IFeatureGate.IsEnabledRuntime
Ozadnji delavcipogojni AddHostedService v Nodes.AddNodesStartup (konfiguracija)
MCP orodjapogojni WithTools<> v MCP strežnikuStartup (konfiguracija)

Funkcija dosegljiva z globinsko povezavo medtem ko onemogočena upodobi prazno stran — njena API vrne 404; nav je več ne površinsko.

Preslikava zastavica → površina​

ZastavicaSkupine APINavDelavci / MCP
Authoring/api/cbots, /api/paramsets, /api/buildercBots skupina → cBots (param sets per-cBot dialog)MCP CBotTools
Backtesting(deli /api/instances)cBots skupina → Backtest—
Execution/api/instancescBots skupina → RunMCP InstanceTools
CopyTrading/api/copyCopy TradingCopyEngineSupervisor, OpenApiTokenRefreshService, MCP CopyTools
Ai/api/aiAI skupina → AI; Settings → AI (ključ)AiRiskGuard, MCP AiTools
PortfolioAgent/api/agentAI skupina → Portfolio AgentPortfolioAgentService
Alerts/api/alertsAI skupina → AlertsAlertEvaluator
PropGuard/api/propProp skupina → Prop GuardPropGuardService
PropFirm/api/prop-firmProp skupina → Challenges—
Accounts/api/ctidsTrading Accounts—
OpenApi/api/openapiSettings → Open API—
Mcp/api/mcp-keysAI skupina → MCP Keys—
Compliance/api/complianceSettings → Legal & Privacy—

Testi​

  • Enote — UnitTests/Features/FeaturesOptionsTests.cs: osnovni privzeti, preslikava na zastavico.
  • Integracija — IntegrationTests/FeatureGateTests.cs: konfiguracijska osnova, runtime prevzem premaga konfiguracijo in vztraja kot AppSetting, čiščenje povrne v osnovo (resničen Postgres).
  • E2E — E2ETests/FeatureToggleTests.cs: onemogočanje CopyTrading med izvajanjem skrije njegovo nav povezavo in 404s /api/copy, ponovno omogočanje obnovi oboje.