models

package
v0.41.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 15, 2022 License: AGPL-3.0 Imports: 6 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func TransactionsSum

func TransactionsSum(incoming, outgoing Transaction) decimal.Decimal

TransactionSums returns the sum of all transactions matching two Transaction structs

The incoming Transactions fields is used to add the amount of all matching transactions to the overall sum The outgoing Transactions fields is used to subtract the amount of all matching transactions from the overall sum.

Types

type Account

type Account struct {
	Model
	AccountCreate
	Budget            Budget          `json:"-"`
	Balance           decimal.Decimal `json:"balance" gorm:"-" example:"2735.17"`
	ReconciledBalance decimal.Decimal `json:"reconciledBalance" gorm:"-" example:"2539.57"`
}

Account represents an asset account, e.g. a bank account.

func (*Account) BeforeSave

func (a *Account) BeforeSave(tx *gorm.DB) (err error)

BeforeSave sets OnBudget to false when External is true.

func (Account) SumReconciledTransactions

func (a Account) SumReconciledTransactions() decimal.Decimal

Transactions returns all transactions for this account.

func (Account) Transactions

func (a Account) Transactions() []Transaction

Transactions returns all transactions for this account.

func (Account) WithCalculations

func (a Account) WithCalculations() Account

type AccountCreate

type AccountCreate struct {
	Name     string    `json:"name" example:"Cash" default:""`
	Note     string    `json:"note" example:"Money in my wallet" default:""`
	BudgetID uuid.UUID `json:"budgetId" example:"550dc009-cea6-4c12-b2a5-03446eb7b7cf"`
	OnBudget bool      `json:"onBudget" example:"true" default:"false"` // Always false when external: true
	External bool      `json:"external" example:"false" default:"false"`
}

type Allocation

type Allocation struct {
	Model
	AllocationCreate
	Envelope Envelope `json:"-"`
}

Allocation represents the allocation of money to an Envelope for a specific month.

type AllocationCreate

type AllocationCreate struct {
	Month  time.Time       `json:"month" gorm:"uniqueIndex:allocation_month_envelope" example:"2021-12-01T00:00:00.000000Z"` // Only year and month of this timestamp are used, everything else is ignored. This will always be set to 00:00 UTC on the first of the specified month
	Amount decimal.Decimal ``                                                                                                // The maximum value is "999999999999.99999999", swagger unfortunately rounds this.
	/* 132-byte string literal not displayed */
	EnvelopeID uuid.UUID `json:"envelopeId" gorm:"uniqueIndex:allocation_month_envelope" example:"a0909e84-e8f9-4cb6-82a5-025dff105ff2"`
}

type Budget

type Budget struct {
	Model
	BudgetCreate
	Balance decimal.Decimal `json:"balance" gorm:"-" example:"3423.42"`
}

Budget represents a budget

A budget is the highest level of organization in Envelope Zero, all other resources reference it directly or transitively.

func (Budget) WithCalculations added in v0.39.0

func (b Budget) WithCalculations() Budget

WithCalculations computes all the calculated values.

type BudgetCreate

type BudgetCreate struct {
	Name     string `json:"name" example:"Morre's Budget" default:""`
	Note     string `json:"note" example:"My personal expenses" default:""`
	Currency string `json:"currency" example:"€" default:""`
}

type BudgetMonth

type BudgetMonth struct {
	ID        uuid.UUID       `json:"id" example:"1e777d24-3f5b-4c43-8000-04f65f895578"` // The ID of the Envelope
	Name      string          `json:"name" example:"Groceries"`                          // The name of the Envelope
	Month     time.Time       `json:"month" example:"2006-05-01T00:00:00.000000Z"`       // This is always set to 00:00 UTC on the first of the month.
	Budgeted  decimal.Decimal `json:"budgeted" example:"2100"`
	Envelopes []EnvelopeMonth `json:"envelopes"`
}

type Category

type Category struct {
	Model
	CategoryCreate
	Budget Budget `json:"-"`
}

Category represents a category of envelopes.

type CategoryCreate

type CategoryCreate struct {
	Name     string    `json:"name" gorm:"uniqueIndex:category_budget_name" example:"Saving" default:""`
	BudgetID uuid.UUID `json:"budgetId" gorm:"uniqueIndex:category_budget_name" example:"52d967d3-33f4-4b04-9ba7-772e5ab9d0ce"`
	Note     string    `json:"note" example:"All envelopes for long-term saving" default:""`
}

type Envelope

type Envelope struct {
	Model
	EnvelopeCreate
	Category Category `json:"-"`
}

Envelope represents an envelope in your budget.

func (Envelope) Month

func (e Envelope) Month(t time.Time) (EnvelopeMonth, error)

Month calculates the month specific values for an envelope and returns an EnvelopeMonth for them.

func (Envelope) Spent

func (e Envelope) Spent(t time.Time) decimal.Decimal

Spent returns the amount spent for the month the time.Time instance is in.

type EnvelopeCreate

type EnvelopeCreate struct {
	Name       string    `json:"name" gorm:"uniqueIndex:envelope_category_name" example:"Groceries" default:""`
	CategoryID uuid.UUID `json:"categoryId" gorm:"uniqueIndex:envelope_category_name" example:"878c831f-af99-4a71-b3ca-80deb7d793c1"`
	Note       string    `json:"note" example:"For stuff bought at supermarkets and drugstores" default:""`
}

type EnvelopeMonth

type EnvelopeMonth struct {
	ID         uuid.UUID       `json:"id" example:"10b9705d-3356-459e-9d5a-28d42a6c4547"` // The ID of the Envelope
	Name       string          `json:"name" example:"Groceries"`                          // The name of the Envelope
	Month      time.Time       `json:"month" example:"1969-06-01T00:00:00.000000Z"`       // This is always set to 00:00 UTC on the first of the month.
	Spent      decimal.Decimal `json:"spent" example:"73.12"`
	Balance    decimal.Decimal `json:"balance" example:"12.32"`
	Allocation decimal.Decimal `json:"allocation" example:"85.44"`
}

EnvelopeMonth contains data about an Envelope for a specific month.

type Model

type Model struct {
	ID        uuid.UUID       `json:"id" example:"65392deb-5e92-4268-b114-297faad6cdce"`
	CreatedAt time.Time       `json:"createdAt" example:"2022-04-02T19:28:44.491514Z"`
	UpdatedAt time.Time       `json:"updatedAt" example:"2022-04-17T20:14:01.048145Z"`
	DeletedAt *gorm.DeletedAt `json:"deletedAt" gorm:"index" example:"2022-04-22T21:01:05.058161Z" swaggertype:"primitive,string"`
}

Model is the base model for all other models in Envelope Zero.

func (*Model) AfterFind

func (m *Model) AfterFind(tx *gorm.DB) (err error)

AfterFind updates the timestamps to use UTC as timezone, not +0000. Yes, this is different.

We already store them in UTC, but somehow reading them from the database returns them as +0000.

func (*Model) BeforeCreate

func (m *Model) BeforeCreate(tx *gorm.DB) (err error)

BeforeCreate is set to generate a UUID for the resource.

type Transaction

type Transaction struct {
	Model
	TransactionCreate
	Budget             Budget   `json:"-"`
	SourceAccount      Account  `json:"-"`
	DestinationAccount Account  `json:"-"`
	Envelope           Envelope `json:"-"`
}

Transaction represents a transaction between two accounts.

func (*Transaction) AfterFind

func (t *Transaction) AfterFind(tx *gorm.DB) (err error)

AfterFind updates the timestamps to use UTC as timezone, not +0000. Yes, this is different.

We already store them in UTC, but somehow reading them from the database returns them as +0000.

func (*Transaction) BeforeSave

func (t *Transaction) BeforeSave(tx *gorm.DB) (err error)

BeforeSave sets the timezone for the Date for UTC.

type TransactionCreate

type TransactionCreate struct {
	Date   time.Time       `json:"date" example:"1815-12-10T18:43:00.271152Z"`
	Amount decimal.Decimal `` // The maximum value is "999999999999.99999999", swagger unfortunately rounds this.
	/* 132-byte string literal not displayed */
	Note                 string     `json:"note" example:"Lunch" default:""`
	BudgetID             uuid.UUID  `json:"budgetId" example:"55eecbd8-7c46-4b06-ada9-f287802fb05e"`
	SourceAccountID      uuid.UUID  `` /* 155-byte string literal not displayed */
	DestinationAccountID uuid.UUID  `json:"destinationAccountId" example:"8e16b456-a719-48ce-9fec-e115cfa7cbcc"`
	EnvelopeID           *uuid.UUID `json:"envelopeId" example:"2649c965-7999-4873-ae16-89d5d5fa972e"`
	Reconciled           bool       `json:"reconciled" example:"true" default:"false"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL