102 lines
2.5 KiB
D
102 lines
2.5 KiB
D
module account.dto;
|
|
|
|
import handy_http_primitives : Optional;
|
|
import account.model;
|
|
import attachment.data;
|
|
import attachment.dto;
|
|
import util.money;
|
|
import util.data : serializeOptional;
|
|
|
|
/// The data the API provides for an Account entity.
|
|
struct AccountResponse {
|
|
import asdf : serdeTransformOut;
|
|
|
|
ulong id;
|
|
string createdAt;
|
|
bool archived;
|
|
string type;
|
|
string numberSuffix;
|
|
string name;
|
|
Currency currency;
|
|
string description;
|
|
@serdeTransformOut!serializeOptional
|
|
Optional!long currentBalance;
|
|
|
|
static AccountResponse of(in Account account, Optional!long currentBalance) {
|
|
AccountResponse r;
|
|
r.id = account.id;
|
|
r.createdAt = account.createdAt.toISOExtString();
|
|
r.archived = account.archived;
|
|
r.type = account.type.id;
|
|
r.numberSuffix = account.numberSuffix;
|
|
r.name = account.name;
|
|
r.currency = account.currency;
|
|
r.description = account.description;
|
|
r.currentBalance = currentBalance;
|
|
return r;
|
|
}
|
|
}
|
|
|
|
// The data provided by a user to create a new account.
|
|
struct AccountCreationPayload {
|
|
string type;
|
|
string numberSuffix;
|
|
string name;
|
|
string currency;
|
|
string description;
|
|
}
|
|
|
|
struct AccountValueRecordResponse {
|
|
ulong id;
|
|
string timestamp;
|
|
ulong accountId;
|
|
string type;
|
|
long value;
|
|
Currency currency;
|
|
AttachmentResponse[] attachments;
|
|
|
|
static AccountValueRecordResponse of(in AccountValueRecord vr, AttachmentRepository attachmentRepo) {
|
|
import std.algorithm : map;
|
|
import std.array : array;
|
|
return AccountValueRecordResponse(
|
|
vr.id,
|
|
vr.timestamp.toISOExtString(),
|
|
vr.accountId,
|
|
vr.type,
|
|
vr.value,
|
|
vr.currency,
|
|
attachmentRepo.findAllByValueRecordId(vr.id)
|
|
.map!(AttachmentResponse.of)
|
|
.array
|
|
);
|
|
}
|
|
}
|
|
|
|
struct ValueRecordCreationPayload {
|
|
string timestamp;
|
|
string type;
|
|
long value;
|
|
}
|
|
|
|
// Class-based inheritance structure for history item response format.
|
|
|
|
class AccountHistoryItemResponse {
|
|
string timestamp;
|
|
string type;
|
|
}
|
|
|
|
class AccountHistoryValueRecordItemResponse : AccountHistoryItemResponse {
|
|
ulong valueRecordId;
|
|
string valueRecordType;
|
|
long value;
|
|
Currency currency;
|
|
}
|
|
|
|
class AccountHistoryJournalEntryItemResponse : AccountHistoryItemResponse {
|
|
string journalEntryType;
|
|
ulong amount;
|
|
Currency currency;
|
|
ulong transactionId;
|
|
string transactionDescription;
|
|
}
|