# GoodWood App Notes ## Architecture - Blazor Server (.NET 9), Clean Architecture: Domain → Application → Infrastructure → Web - Fluxor (Redux): Store/{Feature}State/{Actions,Reducers,Effects,State}.cs pattern - AutoMapper profiles in Application/Mapping/ - EF migrations: `dotnet ef migrations add [Name] --project src/GoodWood.Infrastructure --startup-project src/GoodWood.Web --context AppDbContext --output-dir Data/Migrations` - Dual DbContext: AppDbContext (app schema), AppIdentityDbContext (auth schema) ## Code-behind pattern - Partial classes: Component.razor + Component.razor.cs - [Inject] needs `using Microsoft.AspNetCore.Components;` in .cs files (not auto-imported unlike .razor) ## SEPA Export (added 2026-02-08) - pain.008.003.02 XML generated by SepaXmlBuilder (System.Xml, no external lib) - Download via JS: `window.downloadFile` in wwwroot/js/fileDownload.js - SepaExport entity links CashBookEntries via nullable FK SepaExportId - PaymentStatus enum on CashBookEntry: Open/DirectDebitCollected/Paid - Person gets: Iban, Bic, SepaMandateReference, SepaMandateDate - Club gets: BankIban, BankBic, SepaCreditorId