Commit Graph
26 Commits
Author SHA1 Message Date
James WamplerandClaude Opus 4.8 6c815a6688 Add feature-usage tracking and dashboard charts
Instruments FeatureEvaluationService with System.Diagnostics.Metrics (Counter + IMeterFactory). Accumulates per-feature/day evaluation counts in-process, flushed every 30s to a new FeatureUsageDaily Postgres table via PostgreSQL ON CONFLICT upsert. Caches dashboard query results for 180s in IMemoryCache. New GET /api/v1/environments/{id}/usage endpoint returns top-10 features last day and 14-day per-day breakdown. Admin dashboard shows two ApexCharts bar charts: top features and evaluations by day with per-flag hover tooltip.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 12:45:56 -07:00
James WamplerandClaude Opus 4.8 b59b56575f Fix identity trait add and persistence bugs
Remove Key from UpsertTraitRequest body (comes from URL route). Emit 'updated' event from IdentityDetail on trait mutations and sync parent. Reload segment data on tab activation and dialog open.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 12:45:45 -07:00
James WamplerandClaude Sonnet 4.6 cbf1aba219 Fix v-btn-toggle overlap in dialogs; add segment override icon to features grid
Replace v-btn-toggle with manual button pairs in RuleGroupEditor and
FeatureValueEditor — VSlideGroup (used internally) measures zero width
inside teleported dialogs, causing buttons to overlap and show scroll arrows.

Add donut chart icon next to feature names in the features grid when segment
overrides exist; clicking opens FeatureDetail directly on the Segments tab.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 10:25:50 -07:00
James WamplerandClaude Sonnet 4.6 d555e3b2d2 Wrap long method signatures and remove unused using to comply with 220-char line limit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 11:31:03 -07:00
James WamplerandClaude Sonnet 4.6 c0a1f4d194 Persist and restore selected project and environment across page reloads
- Add refreshOrganization/refreshProject/refreshEnvironment to context store — update value and localStorage without clearing child selections
- OrgSelector: use refreshOrganization when same org is already stored, preventing the chain that was clearing project and environment
- ProjectSelector: watch org ID (not object ref) so refresh doesn't retrigger; add autoSelectProject to restore stored project or auto-select single project
- EnvironmentTabBar: watch project ID; skip env-clear on initial mount; add autoSelectEnvironment to restore stored env or fall back to first
- Fix test fixtures missing isPrimary field; update EnvironmentTabBar tests to match v-select implementation; add tests for restore behavior

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 11:26:19 -07:00
James WamplerandClaude Sonnet 4.6 0531e1943f Add primary organization flag with auto-selection on dashboard
Adds IsPrimary to OrganizationUser (per-user flag, one primary per user).
First org created is automatically set as primary. Selecting a different
org via the UI calls PUT /organisations/{id}/primary to persist the choice
server-side. Dashboard auto-selects: localStorage org (refreshed) →
primary org → single org when no explicit selection exists.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 10:00:09 -07:00
James WamplerandClaude Sonnet 4.6 671c041764 Fix register form layout and validation shift
Fix first/last name field overlap by using no-gutters row with
responsive padding. Override global hideDetails:'auto' Vuetify default
with :hide-details="false" so the details area is always rendered,
preventing 22px layout shift when validation messages appear.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 22:14:31 -07:00
James WamplerandClaude Sonnet 4.6 e51e28d411 Add admin Vite app to Aspire AppHost
Registers the Vue admin as an Aspire resource via AddViteApp, wired to
the API so Aspire injects service discovery env vars that the existing
Vite proxy config already reads.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 21:46:52 -07:00
James WamplerandClaude Sonnet 4.6 e3b8cd9067 Fix build errors and enable TreatWarningsAsErrors across all projects
Remove duplicate source files from old ApiKeys/, Authentication/, and
Authorization/ folders that were already migrated to Common/Security/.
Update test namespace usings to match. Pin EFC Relational 10.0.5 to
resolve MSB3277 version conflict with Npgsql's transitive dependency.
Add LangVersion and TreatWarningsAsErrors to AppHost and ServiceDefaults.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 13:19:59 -07:00
James Wampler 570ab363c2 WIP 2026-06-10 13:06:55 -07:00
James WamplerandClaude Opus 4.7 4621e8380b Add MicCheck.Api.Tests.Integration project
NUnit integration tests that target a running API by URL and seed/clean
data directly in Postgres. Settings (BaseUrl, DbConnectionString) come
from .runsettings or environment variables so tests can be pointed at
any environment. HTTP requests live in HttpFiles/*.http; assertion
failures include a fresh DB snapshot of the relevant rows. First test
covers the flag-enabled path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-03 19:12:47 -07:00
James Wampler d3b36956e4 New project file, added Aspire, moved security 2026-06-03 18:44:48 -07:00
James Wampler 4c6df1f037 WIP 2026-04-18 19:45:16 -07:00
James Wampler 7545441a3e UX consistancy changes. 2026-04-16 18:41:01 -07:00
James Wampler 8ff071c69b UX tweaks, traits bug fix, adding member info 2026-04-16 11:50:11 -07:00
James Wampler 7b624b3238 Fixing segment create error, adding environment to feature dialog 2026-04-16 08:59:54 -07:00
James Wampler b75f5f602e Adding Organiztion, environment and project. Segment fix, tag fix 2026-04-14 14:10:37 -07:00
James Wampler 4195d384d0 Adding Audit and Webhooks 2026-04-13 19:43:58 -07:00
James Wampler fc62ea634a Adding Identities 2026-04-13 19:37:56 -07:00
James Wampler 3fff7e3158 Adding Segments 2026-04-13 19:32:20 -07:00
James Wampler 8dfcb107d0 Adding Feature flag management 2026-04-13 16:04:23 -07:00
James Wampler f2816b6900 Building out navigation in the admin site 2026-04-13 15:27:09 -07:00
James Wampler 334b6cf3e1 Auth tweaks, Audit implementation, Webhooks 2026-04-13 14:17:45 -07:00
James Wampler b9a04df861 Adding Admin API 2026-04-08 14:25:10 -07:00
James Wampler 0ba076b650 Adding Flags API 2026-04-07 15:30:40 -07:00
James Wampler 7b15086fe5 Initial commit, project structure and domain models 2026-04-07 09:14:06 -07:00