package types import ( "time" "github.com/google/uuid" ) // At the center of the application is the transaction. // // Every piece of data should be calculated based on transactions. // This means potential calculation errors can be fixed later in time. // // If it becomes necessary to precalculate snapshots for performance reasons, this can be done in the future. // But the transaction should always be the source of truth. type Transaction struct { Id uuid.UUID `db:"id"` UserId uuid.UUID `db:"user_id"` Timestamp time.Time `db:"timestamp"` Party string `db:"party"` Description string `db:"description"` AccountId *uuid.UUID `db:"account_id"` TreasureChestId *uuid.UUID `db:"treasure_chest_id"` Value int64 `db:"value"` // If an error is present, then the transaction is not valid and should not be used for calculations. Error *string `db:"error"` CreatedAt time.Time `db:"created_at"` // Either a user_id or a transaction_recurring_id CreatedBy uuid.UUID `db:"created_by"` UpdatedAt *time.Time `db:"updated_at"` UpdatedBy *uuid.UUID `db:"updated_by"` } type TransactionItemsFilter struct { AccountId string TreasureChestId string Error string }