158 lines
3.6 KiB
D
158 lines
3.6 KiB
D
module transaction.dto;
|
|
|
|
import handy_http_primitives : Optional;
|
|
import asdf : serdeTransformOut;
|
|
import std.typecons;
|
|
|
|
import transaction.model : TransactionCategory;
|
|
import attachment.dto;
|
|
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;
|
|
bool internalTransfer;
|
|
@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;
|
|
bool internalTransfer;
|
|
Nullable!Vendor vendor;
|
|
Nullable!Category category;
|
|
Nullable!Account creditedAccount;
|
|
Nullable!Account debitedAccount;
|
|
string[] tags;
|
|
LineItem[] lineItems;
|
|
AttachmentResponse[] attachments;
|
|
|
|
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;
|
|
bool internalTransfer;
|
|
Nullable!ulong vendorId;
|
|
Nullable!ulong categoryId;
|
|
Nullable!ulong creditedAccountId;
|
|
Nullable!ulong debitedAccountId;
|
|
string[] tags;
|
|
LineItem[] lineItems;
|
|
ulong[] attachmentIdsToRemove;
|
|
|
|
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;
|
|
}
|
|
|
|
struct TransactionCategoryResponse {
|
|
ulong id;
|
|
@serdeTransformOut!serializeOptional
|
|
Optional!ulong parentId;
|
|
string name;
|
|
string description;
|
|
string color;
|
|
|
|
static TransactionCategoryResponse of(in TransactionCategory category) {
|
|
return TransactionCategoryResponse(
|
|
category.id,
|
|
category.parentId,
|
|
category.name,
|
|
category.description,
|
|
category.color
|
|
);
|
|
}
|
|
}
|
|
|
|
/// Structure representing the balance information for a category, for a given currency.
|
|
struct TransactionCategoryBalance {
|
|
ulong credits;
|
|
ulong debits;
|
|
long balance;
|
|
Currency currency;
|
|
}
|