finnow/finnow-api/source/transaction/dto.d

124 lines
2.7 KiB
D

module transaction.dto;
import handy_http_primitives : Optional;
import asdf : serdeTransformOut;
import std.typecons;
import util.data;
import util.money;
/// The transaction data provided when a list of transactions is requested.
struct TransactionsListItem {
ulong id;
string timestamp;
string addedAt;
ulong amount;
Currency currency;
string description;
@serdeTransformOut!serializeOptional
Optional!Vendor vendor;
@serdeTransformOut!serializeOptional
Optional!Category category;
@serdeTransformOut!serializeOptional
Optional!Account creditedAccount;
@serdeTransformOut!serializeOptional
Optional!Account debitedAccount;
string[] tags;
static struct Account {
ulong id;
string name;
string type;
string numberSuffix;
}
static struct Vendor {
ulong id;
string name;
}
static struct Category {
ulong id;
string name;
string color;
}
}
/// Transaction data provided when fetching a single transaction.
struct TransactionDetail {
ulong id;
string timestamp;
string addedAt;
ulong amount;
Currency currency;
string description;
Nullable!Vendor vendor;
Nullable!Category category;
Nullable!Account creditedAccount;
Nullable!Account debitedAccount;
string[] tags;
LineItem[] lineItems;
static struct Vendor {
ulong id;
string name;
string description;
}
static struct Category {
ulong id;
Nullable!ulong parentId;
string name;
string description;
string color;
}
static struct LineItem {
uint idx;
long valuePerItem;
ulong quantity;
string description;
Nullable!Category category;
}
static struct Account {
ulong id;
string name;
string type;
string numberSuffix;
}
}
/// Data provided when a new transaction is added by a user.
struct AddTransactionPayload {
string timestamp;
ulong amount;
string currencyCode;
string description;
Nullable!ulong vendorId;
Nullable!ulong categoryId;
Nullable!ulong creditedAccountId;
Nullable!ulong debitedAccountId;
string[] tags;
LineItem[] lineItems;
static struct LineItem {
long valuePerItem;
ulong quantity;
string description;
Nullable!ulong categoryId;
}
}
/// Structure for depicting an entire hierarchical tree structure of categories.
struct TransactionCategoryTree {
ulong id;
@serdeTransformOut!serializeOptional
Optional!ulong parentId;
string name;
string description;
string color;
TransactionCategoryTree[] children;
uint depth;
}