Changelog

Hold dig opdateret med seneste ændringer og funktioner

Trello
  • ...

Viser 1-25 af 357 elementer

Minor
v1.5.0 - 2026-02-19, kl. 10:45
Order Backfill UI: Detaljeret ordre-oversigt efter preview/execution

Tilføjet 'Updated Orders Detail' tabel i Execution Results sektionen på Order Backfill side (/admin/backfill). Efter at køre 'Preview Changes' (dry run) eller 'Execute Backfill' vises nu en detaljeret liste over alle opdaterede ordrer med: Order ID, Current Seconds (original værdi), New Seconds (opdateret værdi), Difference (visuel sammenligning af ændringer), og Reason (forklaring på hvorfor). Tabel kun vises hvis der er ordrer at vise. Forbedrer transparens ved at tillad admin at verificere præcist hvilke ordrer bliver opdateret og med hvor meget.

chore
v1.4.30 - 2026-02-19, kl. 10:30
Code cleanup: Fjernet delta-relateret logik fra backfill-analyse

Fjernet alt delta-relateret koncepter fra Order Backfill analyse-logik. Fremfor tracking af 'matched-but-no-delta' status, forenklet til kun at vise ordrer der faktisk SKAL opdateres. Status-værdier opdateret: 'MATCHED_AND_NEEDS_UPDATE' → 'NEEDS_UPDATE', 'MATCHED_BUT_NO_DELTA' → 'CURRENT', samt 'NO_MATCH' og 'ERROR'. Simplificering reducerer kognitiv belastning og gør backfill-værktøjet mere fokuseret på at identificere ordrer der behøver fixing.

Bugfix
v1.4.29 - 2026-02-17, kl. 16:15
FIX: Cosmos DB ugyldig parameter-navngivning i brugeropslag

Rettet kritisk Cosmos DB query-fejl i UserCrudService.GetUserByStripeCustomerIdAsync: Entity Framework Core genererede ugyldigt parameter-navn '@8__locals1_lookup_UserEmail' ved direkte brug af 'lookup.UserEmail' i LINQ query. Cosmos DB afviser parameter-navne med '__' (double underscore). Fix: Ekstraheret lookup.UserEmail til lokal variabel 'userEmail' før query-brug, så EF Core genererer gyldigt parameter-navn '@userEmail'. Dette sikrer korrekt brugeropslag fra Stripe webhook processing.

Bugfix
v1.4.28 - 2026-02-17, kl. 16:10
KRITISK FIX: RawJObject 'object' wrapper i Stripe webhook parsing

Rettet den EGENTLIGE root cause: EventUtility.ParseEvent() wrapper invoice-data i en 'object' nøgle i RawJObject. Webhook-koden søgte efter 'parent.subscription_details.subscription' direkte på root-niveau, men det korrekte path er 'object.parent.subscription_details.subscription'. Logging viste at RawJObject kun havde én nøgle: 'object' (ikke 'parent'). Opdateret både legacy format (object.subscription) og Basil format (object.parent.subscription_details.subscription) paths med 'object.' prefix. Dette fix gør at subscription ID nu kan findes korrekt i Basil API webhooks.

Bugfix
v1.4.27 - 2026-02-17, kl. 15:30
Debug logging: Stripe Basil API subscription ID extraction

Tilføjet omfattende debug-logging til HandleInvoicePaymentSucceededAsync for at identificere hvorfor subscription ID ikke blev fundet: Logger RawJObject.Properties() keys, checker både legacy format (subscription) og Basil format (parent.subscription_details.subscription), logger succes/fejl for hver check med ✅/❌ emojis, dumper fuldt RawJObject JSON hvis subscription ID ikke findes. Denne logging afslørede at RawJObject wrapper alt i en 'object' nøgle, hvilket førte til det egentlige fix.

feature
v1.4.26 - 2026-02-17, kl. 15:00
Webhook Reprocessing: 'Process Webhook for Real' funktion

Implementeret fuld webhook-reprocessing funktionalitet som supplement til simulation tool. Efter simulation kan admin nu klikke 'Process Webhook for Real' knap for at køre samme webhook-event igen men DENNE gang med faktisk database-persistering. Bruger DRY-princip: Begge funktioner (simulation og real) kalder SAMME StripeWebhookService.ReprocessExistingWebhookAsync(webhookId, simulationMode) metode - forskellen er kun flagget 'simulationMode: true/false' som styrer om database-writes udføres. Real processing viser detaljeret success-besked med link til oprettet ordre. Omfatter customer-link i simulation modal så admin kan navigere direkte til kundedetaljer fra webhook-siden.

feature
v1.4.25 - 2026-02-17, kl. 14:30
STEP-by-STEP logging i UpdateOrCreateRenewalOrderAsync

Tilføjet detaljeret STEP 1-7 logging gennem hele renewal order creation flow for at kunne tracke præcist hvor webhook processing fejler: STEP 1: Fetch customer fra Stripe, STEP 2: Fetch user fra database, STEP 3: Calculate order fra subscription + invoice, STEP 4: Extract plan info for BillingUnit, STEP 5: Create BillingUnit (fejler gently - fortsætter hvis det fejler), STEP 6: Check for existing order, STEP 7: Create/update order. Alle tidligere 'silent null returns' erstattet med exceptions der indeholder klare fejlbeskeder. Omfatter også SimulationMode early-return logging. Dette gjorde det muligt at identificere at webhook processing aldrig kom til STEP 1 pga. subscription ID ikke blev fundet.

feature
v1.4.24 - 2026-02-17, kl. 14:00
Webhook Simulation Tool på /admin/webhooks side

Tilføjet komplet simulation-funktionalitet til admin webhook-siden for at debugge webhook-processing uden at skulle vente på rigtige Stripe events. Features: 1) Simulation-knap (PlayArrow ikon) på invoice.payment_succeeded webhooks som kører PRÆCIST samme logik som real processing men springer database-skriv over, 2) Detaljeret modal med beregnet ordre (seconds, datoer, partition key, stripe order ID), 3) Processing steps timeline der viser hvert trin i webhook-flowet, 4) Omfattende debug-sektion med raw webhook JSON og 'Copy Debug Data as JSON' knap til clipboard, 5) Intelligent error handling med TryGetProperty i stedet for GetProperty for at give præcise fejlbeskeder når JSON properties mangler. Dette værktøj var kritisk til at identificere Stripe Basil API problemet.

Patch
v1.4.23 - 2026-02-17, kl. 12:00
Store arkitektur: IServiceScopeFactory pattern for Singleton stores

Refaktoreret ProductStore og SpeakerStore til korrekt best-practice arkitektur for Singleton stores der bruger Scoped database services. Problem: Stores skulle være Singleton (delt cache på tværs af alle brugere), men ProductCrudService/SpeakerCrudService skulle være Scoped (per-request database isolation) - direkte DI mellem disse lifetimes er forbudt. Løsning: Stores injicerer nu IServiceScopeFactory og opretter manually scopes når de skal bruge CRUD services via 'using var scope = _serviceScopeFactory.CreateScope()'. Dette giver: 1) Singleton stores = effektiv global cache, 2) Scoped CRUD services = sikker database concurrency, 3) Ingen DI validation errors, 4) Industry-standard pattern. Omfatter alle metoder i begge stores inkl. LoadProductsAsync, RefreshCacheAsync, MoveSpeakerUp/Down.

feature
v1.4.22 - 2026-02-16, kl. 13:45
Admin Dashboard: Session Monitor med 4 key performance metrics

Integreret Session Monitor på Admin Dashboard viser 4 nøgle-metriker i real-time: Aktive sessioner (antal brugere online), Peak sessioner (højeste antal concurrent brugere), I alt startet (historisk samlet antal sessions siden app-start), I alt afsluttet (historisk samlet antal afsluttede sessions). Hver metrik vises som SessionMetricsCard med ikon og farvekodning for hurtig visuell genkendelse (Cloud, TrendingUp, CheckCircle, PowerSettingsNew ikoner). Dashboard auto-refresher hvert 10. sekund via Timer-baseret polling med InvokeAsync for Blazor thread-safety. Viser sidste opdateringstid under metriksne. Kode-basis bruger ISessionMonitorService fra TheNerdCollective.Blazor.SessionMonitor til at hente metrics data.

feature
v1.4.21 - 2026-02-16, kl. 13:00
Admin Dashboard: Session Monitor MudComponents integreret

Tilføjet TheNerdCollective.MudComponents.SessionMonitor (v1.0.0) til Admin Dashboard for visuel og interaktiv overvågning af aktive brugsessioner. Komponenten viser: 1) Live metrics med antal aktive sessioner, peak-sessioner og total-statistikker, 2) Aktuelle sessioner liste med circuit IDs, 3) Deployment windows calculator - foreslår optimale tidspunkter til deployments når minimalt antal brugere er online, 4) Session history chart - visuel trend af brugeraktivitet over tid. Sessions opdateres automatisk hvert 5. sekund. Admin kan nu hurtigt se systembelastning og planlægge safe deployments uden user-impact.

feature
v1.4.20 - 2026-02-16, kl. 12:00
Session Monitoring - real-time overvågning af aktive Blazor-sessioner

Tilføjet TheNerdCollective.Blazor.SessionMonitor (v1.0.0) til real-time tracking og historisk analyse af aktive Blazor Server circuits. Funktioner inkluderer: 1) Real-time session tracking med aktuelle belastningens metrics, 2) Historisk data for de sidste 10.000 snapshots, 3) Optimal deployment window detection - find tidspunkter med minimal/ingen brugeraktivitet til sikre deployments, 4) REST API endpoints til integration med monitoring dashboards, 5) Zero-configuration setup med sensible defaults og minimal performance overhead. Session metrics tilgængelige via ISessionMonitorService injection i komponenter og API endpoints på /api/session-monitor.

Patch
v1.4.19 - 2026-02-16, kl. 11:30
Store arkitektur refaktorering: HostedService + automatisk cache invalidation

Omfattende refaktorering af ProductStore og SpeakerStore til professionel enterprise-arkitektur. 1) StoreInitializationService (HostedService) initialiserer stores ved app-start og blokerer startup indtil klar - garanterer ProductStore altid er loadet før webhooks ankommer. 2) CacheInvalidationService (Singleton) med event-based pattern til central cache-styring - stores subscriber til invalidation events og refresher automatisk. 3) ProductCrudService og SpeakerCrudService kalder automatisk cache invalidation efter Add/Update/Delete - admin-ændringer reflekteres øjeblikkeligt i hele applikationen uden manuel refresh. 4) Fjernet manuel store initialization fra Program.cs - lifecycle håndteres nu af DI og HostedService. Denne arkitektur sikrer konsistent cache, reducerer fejlrisiko og gør systemet mere vedligeholdelsesvenligt.

Bugfix
v1.4.18 - 2026-02-16, kl. 11:00
KRITISK FIX: Webhook-fejl forhindrede ordre-oprettelse

Rettet kritisk bug hvor nye kundeordrer ikke blev oprettet når webhooks ankom fra Stripe, fordi ProductStore ikke blev initialiseret ved opstart (kun SpeakerStore blev). Dette medførte at produktopslag fejlede og ordre-oprettelse blev sprunget over, men webhooks blev stadig markeret som 'Processed', hvilket skjulte problemet. Fikset ved: 1) ProductStore initialiseres nu garanteret ved app-start (før webhooks kan ankomme), 2) Webhooks markeres nu som 'Failed' hvis ordre-oprettelse mislykkes i stedet for 'Processed', 3) GetAllProductsAsync thrower nu exceptions i stedet for at returnere tomme lister ved fejl, hvilket gør problemer synlige. Denne fejl kunne have forårsaget data-tab for betalende kunder hvis webhooks ankom før ProductStore var klar.

Patch
v1.4.17 - 2026-02-15, kl. 10:38
Omfattende optimering af Stripe-integration og database-arkitektur

Omfattende opgradering af betalings-pipelinen for at sikre maksimal performance og fremtidssikring. 1) Ny arkitektur til lynhurtige Stripe-opslag via en dedikeret lookup-tabel (Materialized View) i Cosmos DB, hvilket fjerner cross-partition scans og muliggør O(1) Point-Reads. 2) Proaktiv håndtering af Stripe 'Basil' API (Thin Events) ved at hente fulde objekter direkte fra API'et, hvilket sikrer 100% data-integritet for abonnementsperioder. 3) Styrket webhook-sikkerhed med idempotens-tjek og automatisk blokering af korrupte 'Zombie'-ordrer. 4) Forbedret metadata-validering til korrekt adskillelse af abonnement- og engangsbetalinger samt præcis extraction af subscriptionId. 5) Lagring af komplet rå-JSON payload fra Stripe for bedre sporbarhed. Inkluderer desuden nye administrative værktøjer til bulk-oprydning af data og webhooks.

Patch
v1.4.16 - 2026-02-11, kl. 13:25
Styling

Små styling rettelser på bla. SpeakPage og SpeaksComponent.

feature
v1.4.15 - 2026-02-09, kl. 14:30
Support for WAV og PCM download formater

Udvidet download-formater til at inkludere WAV (Lossless) og PCM (Raw) audio-formater ud over det eksisterende MP3 (192 kbps). Brugere kan nu vælge deres præfererede audio-format direkte i SpeaksComponent via en intuitiv ButtonGroup-interface. WAV-format giver professionel lossless kvalitet til arkivering og post-processing. PCM-format tilbyder rå audio-data til avancerede brugere. UI-redesign inkluderer også: forbedret filter-præsentation med MudCard-wrapper, visnings-toggle (Alle/Downloadet) som MudButtonGroup med ikonner, og klare sektion-labels. Variant.Text/Variant.Filled buttons giver visuelt feedback for valgt format. Alt implementeret udelukkende med MudBlazor-komponenter for konsistent design og fuld responsivitet.

feature
v1.4.14 - 2026-02-08, kl. 15:00
Styrket Stripe webhook-integration og fejlhåndtering

Betydelige forbedringer af Stripe webhook-integrationens robusthed og datakvalitet. Implementeret håndtering af ufuldstændige Stripe event-data ved at tilføje validering og fallback-logik for pålidelig data-processing. Rettet kritisk bug hvor subscription zero-period registreringer blev oprettet ved subscription create - systemet validerer nu periode-data inden oprettelse. Implementeret håndtering af udløbne betalinger med retry-logik og status-tracking. Webhook-processering styrket med bedre fejl-recovery mekanismer, detaljeret logging af edge cases, og garanteret data-konsistens mellem Stripe og systemet. Disse forbedringer sikrer at payment flows, subscription lifecycle, og ordre-oprettelse fungerer stabil selv ved usikre netværksforhold og Stripe API variabilitet.

Bugfix
v1.4.13 - 2026-02-07, kl. 17:30
Ydeevneoptimering af webhook overvågning

Fixede kritiske ydeevne- og indlæsningsproblemer på admin webhook-siden (/admin/webhooks). Implementerede 'fiktiv paginering' for at undgå tunge database-optællinger af store tabeller, og flyttede sekund-beregninger til asynkron baggrundsindlæsning. Rettede desuden en fejl hvor tabellen i visse tilfælde ikke indlæste data, samt fjernede midlertidig debug-logging for en renere oplevelse.

feature
v1.4.12 - 2026-02-07, kl. 16:45
Forbedret webhook-overvågning med relationsvisning

Admin webhook-side (/admin/webhooks) er kraftigt forbedret med detaljeret drill-down funktionalitet. Nye features: 1) Vis relaterede ordrer for hver webhook - systemet finder automatisk tilknyttede ordre baseret på faktura-ID, abonnements-ID, eller tidsmæssig sammenhæng, 2) Vis event trigger detaljer - udtrækker og viser nøgledata fra webhook payload (faktura-ID, abonnements-ID, beløb, periodedata, status), 3) Vis relateret bruger med direkte link til kundedetaljer, 4) Forbedret visning af rå event-data med formateret JSON i dark mode editor, 5) Side-by-side layout med generel info, trigger-detaljer og relaterede ressourcer. Dette gør det muligt at overvåge hele flowet fra webhook til ordre-oprettelse og sikre alt fungerer korrekt.

feature
v1.4.11 - 2026-02-07, kl. 14:30
Admin abonnements-ordredata søgning og reparation

Ny SubscriptionOrderService samt admin-funktioner til simulering og reparation af ordredata. Funktioner inkluderer: 1) Data Fix Simulation i CustomerDetail - simuler rettelser for en enkelt kunde før udførelse, 2) Bulk Order Fix i ListCustomers - simuler og ret ordrer for alle kunder med abonnementer samtidigt. Systemet matchar Stripe fakturaer til Cosmos-ordrer, identificerer zombie-ordrer (korrupt data fra gamle webhook-fejl), og foreslår CREATE/UPDATE/DELETE-operationer. SubscriptionOrderService håndterer periode-beregning: Created = invoice.Created, Expires = invoice.Created + 1 måned, og matcher fakturabeløb til produkter ved hjælp af historiske priser.

feature
v1.4.10 - 2026-02-06, kl. 08:49
Ny platform introduktion sektion

Tilføjet IntroPlatformSection på forsiden for at præsentere platformens værdiopskrift tydeligere. Sektionen er bygget udelukkende med MudBlazor komponenter for at sikre konsistent design og fuld responsivitet.

feature
v1.4.9 - 2026-02-02, kl. 16:54
Rettelser og forbedringer

Diverse styling og layout rettelser på tværs af sider

feature
v1.4.8 - 2026-01-30, kl. 16:45
MudSwiper implementeret på TestimonialsSection

Testimonials vises nu i en carousel med MudSwiper komponent, svarende til VoicesSection. Tilføjet responsive breakpoints: 1 testimonial på mobil, 2 på tablet, 3-4 på desktop. Autoplay aktiveret (5 sekunder mellem slides) for bedre brugeroplevelse. Grid layout erstattet med swiper for mere dynamisk præsentation.

feature
v1.4.7 - 2026-01-30, kl. 16:30
Standarder sektion med baggrundsbillede og CSS isolation

Ny StandardSection komponent oprettet med 5 centered feature items. Implementeret Blazor CSS isolation (StandardSection.razor.css) for scoped styling. Baggrundsbillede (/images/frontpage/Standarden.jpg) indsat med cover sizing. MudBlazor komponenter brugt eksklusivt (MudStack, MudAvatar, MudIcon, MudText) for konsistent design og centering.

  • ...

Viser 1-25 af 357 elementer

An unhandled error has occurred. Reload 🗙
An error has occurred. This application may no longer respond until reloaded. Reload 🗙