This commit is contained in:
2026-03-06 19:42:15 +00:00
parent abcbe3e1e5
commit 04cbb846d1
99 changed files with 11724 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
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"`
}