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 UserId uuid.UUID `db:"user_id"` Timestamp time.Time Party string Description string AccountId *uuid.UUID `db:"account_id"` TreasureChestId *uuid.UUID `db:"treasure_chest_id"` Value int64 // If an error is present, then the transaction is not valid and should not be used for calculations. Error *string 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 TransactionInput struct { Id string AccountId string TreasureChestId string Value string Timestamp string Party string Description string } type TransactionItemsFilter struct { AccountId string TreasureChestId string Error string }