package models import ( "time" "github.com/google/uuid" "github.com/shopspring/decimal" ) type CategoryType string const ( CategoryBill CategoryType = "bill" CategoryVariableExpense CategoryType = "variable_expense" CategoryDebt CategoryType = "debt" CategorySaving CategoryType = "saving" CategoryInvestment CategoryType = "investment" CategoryIncome CategoryType = "income" ) type User struct { ID uuid.UUID `json:"id"` Email string `json:"email"` PasswordHash string `json:"-"` OIDCSubject *string `json:"oidc_subject,omitempty"` DisplayName string `json:"display_name"` PreferredLocale string `json:"preferred_locale"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type Category struct { ID uuid.UUID `json:"id"` UserID uuid.UUID `json:"user_id"` Name string `json:"name"` Type CategoryType `json:"type"` Icon string `json:"icon"` SortOrder int `json:"sort_order"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type Budget struct { ID uuid.UUID `json:"id"` UserID uuid.UUID `json:"user_id"` Name string `json:"name"` StartDate time.Time `json:"start_date"` EndDate time.Time `json:"end_date"` Currency string `json:"currency"` CarryoverAmount decimal.Decimal `json:"carryover_amount"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type BudgetItem struct { ID uuid.UUID `json:"id"` BudgetID uuid.UUID `json:"budget_id"` CategoryID uuid.UUID `json:"category_id"` CategoryName string `json:"category_name,omitempty"` CategoryType CategoryType `json:"category_type,omitempty"` BudgetedAmount decimal.Decimal `json:"budgeted_amount"` ActualAmount decimal.Decimal `json:"actual_amount"` Notes string `json:"notes"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type BudgetTotals struct { IncomeBudget decimal.Decimal `json:"income_budget"` IncomeActual decimal.Decimal `json:"income_actual"` BillsBudget decimal.Decimal `json:"bills_budget"` BillsActual decimal.Decimal `json:"bills_actual"` ExpensesBudget decimal.Decimal `json:"expenses_budget"` ExpensesActual decimal.Decimal `json:"expenses_actual"` DebtsBudget decimal.Decimal `json:"debts_budget"` DebtsActual decimal.Decimal `json:"debts_actual"` SavingsBudget decimal.Decimal `json:"savings_budget"` SavingsActual decimal.Decimal `json:"savings_actual"` InvestmentsBudget decimal.Decimal `json:"investments_budget"` InvestmentsActual decimal.Decimal `json:"investments_actual"` Available decimal.Decimal `json:"available"` } type BudgetDetail struct { Budget Items []BudgetItem `json:"items"` Totals BudgetTotals `json:"totals"` }