Add stubs for more transaction API endpoints.

This commit is contained in:
Andrew Lalis 2025-08-11 07:04:37 -04:00
parent 4b9e859c85
commit 277a6dc591
3 changed files with 54 additions and 0 deletions

View File

@ -64,6 +64,10 @@ HttpRequestHandler mapApiHandlers(string webOrigin) {
a.map(HttpMethod.DELETE, PROFILE_PATH ~ "/vendors/:vendorId:ulong", &handleDeleteVendor); a.map(HttpMethod.DELETE, PROFILE_PATH ~ "/vendors/:vendorId:ulong", &handleDeleteVendor);
a.map(HttpMethod.GET, PROFILE_PATH ~ "/transactions", &handleGetTransactions); a.map(HttpMethod.GET, PROFILE_PATH ~ "/transactions", &handleGetTransactions);
a.map(HttpMethod.GET, PROFILE_PATH ~ "/transactions/:transactionId:ulong", &handleGetTransaction);
a.map(HttpMethod.POST, PROFILE_PATH ~ "/transactions", &handleAddTransaction);
a.map(HttpMethod.PUT, PROFILE_PATH ~ "/transactions/:transactionId:ulong", &handleUpdateTransaction);
a.map(HttpMethod.DELETE, PROFILE_PATH ~ "/transactions/:transactionId:ulong", &handleDeleteTransaction);
import data_api; import data_api;
// Various other data endpoints: // Various other data endpoints:

View File

@ -4,6 +4,7 @@ import handy_http_primitives;
import handy_http_data.json; import handy_http_data.json;
import handy_http_handlers.path_handler; import handy_http_handlers.path_handler;
import slf4d; import slf4d;
import std.typecons;
import transaction.model; import transaction.model;
import transaction.data; import transaction.data;
@ -15,6 +16,8 @@ import util.money;
import util.pagination; import util.pagination;
import util.data; import util.data;
// Transactions API
immutable DEFAULT_TRANSACTION_PAGE = PageRequest(1, 10, [Sort("timestamp", SortDir.DESC)]); immutable DEFAULT_TRANSACTION_PAGE = PageRequest(1, 10, [Sort("timestamp", SortDir.DESC)]);
struct TransactionsListItemAccount { struct TransactionsListItemAccount {
@ -65,6 +68,49 @@ void handleGetTransactions(ref ServerHttpRequest request, ref ServerHttpResponse
writeJsonBody(response, responsePage); writeJsonBody(response, responsePage);
} }
void handleGetTransaction(ref ServerHttpRequest request, ref ServerHttpResponse response) {
// TODO
}
struct AddTransactionPayloadLineItem {
long valuePerItem;
ulong quantity;
string description;
Nullable!ulong categoryId;
}
struct AddTransactionPayload {
string timestamp;
ulong amount;
string currencyCode;
string description;
Nullable!ulong vendorId;
Nullable!ulong categoryId;
Nullable!ulong creditedAccountId;
Nullable!ulong debitedAccountId;
string[] tags;
AddTransactionPayloadLineItem[] lineItems;
}
void handleAddTransaction(ref ServerHttpRequest request, ref ServerHttpResponse response) {
ProfileDataSource ds = getProfileDataSource(request);
auto payload = readJsonBodyAs!AddTransactionPayload(request);
addTransaction2(ds, payload);
}
void handleUpdateTransaction(ref ServerHttpRequest request, ref ServerHttpResponse response) {
// TODO
}
void handleDeleteTransaction(ref ServerHttpRequest request, ref ServerHttpResponse response) {
ProfileDataSource ds = getProfileDataSource(request);
// TODO
}
private ulong getTransactionIdOrThrow(in ServerHttpRequest request) {
return getPathParamOrThrow(request, "transactionId");
}
// Vendors API // Vendors API
void handleGetVendors(ref ServerHttpRequest request, ref ServerHttpResponse response) { void handleGetVendors(ref ServerHttpRequest request, ref ServerHttpResponse response) {

View File

@ -19,6 +19,10 @@ Page!TransactionsListItem getTransactions(ProfileDataSource ds, in PageRequest p
return page; // Return an empty page for now! return page; // Return an empty page for now!
} }
void addTransaction2(ProfileDataSource ds, in AddTransactionPayload payload) {
// TODO
}
void addTransaction( void addTransaction(
ProfileDataSource ds, ProfileDataSource ds,
SysTime timestamp, SysTime timestamp,