Phase 4: Income API and page

- Add FrequencyCalculator static utility (all 9 frequency multipliers)
- Add IncomesController: list, create, update, delete, reorder
- Add Income DTOs with computed Monthly/Annually fields
- Add shared TypeScript types (IncomeDto, OutgoDto, BudgetDto, ShareDto, SummaryDto)
- Add API client with Bearer token injection via setTokenProvider
- Add FrequencySelect, MoneyDisplay, BudgetNav shared components
- Add Income page: sortable table with inline editing, add/delete rows, drag-to-reorder via dnd-kit
- Wire TokenWirer in App.tsx to keep API client in sync with auth state

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Spencer Twaddle
2026-04-25 07:56:42 -05:00
parent 963e511287
commit f429a747d8
13 changed files with 543 additions and 31 deletions
+19
View File
@@ -0,0 +1,19 @@
using Budget.Api.Models;
namespace Budget.Api.DTOs;
public record IncomeDto(
Guid Id,
Guid BudgetId,
string Name,
Frequency Frequency,
decimal Amount,
decimal Monthly,
decimal Annually,
int SortOrder);
public record CreateIncomeRequest(string Name, Frequency Frequency, decimal Amount);
public record UpdateIncomeRequest(string Name, Frequency Frequency, decimal Amount);
public record ReorderIncomesRequest(List<Guid> OrderedIds);