138 lines
4.8 KiB
D
138 lines
4.8 KiB
D
module transaction.api;
|
|
|
|
import handy_http_primitives;
|
|
import handy_http_data.json;
|
|
import handy_http_handlers.path_handler;
|
|
import slf4d;
|
|
import std.typecons;
|
|
|
|
import transaction.model;
|
|
import transaction.data;
|
|
import transaction.service;
|
|
import transaction.dto;
|
|
import profile.data;
|
|
import profile.service;
|
|
import account.api;
|
|
import util.money;
|
|
import util.pagination;
|
|
import util.data;
|
|
|
|
// Transactions API
|
|
|
|
immutable DEFAULT_TRANSACTION_PAGE = PageRequest(1, 10, [Sort("timestamp", SortDir.DESC)]);
|
|
|
|
void handleGetTransactions(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
PageRequest pr = PageRequest.parse(request, DEFAULT_TRANSACTION_PAGE);
|
|
auto responsePage = getTransactions(ds, pr);
|
|
writeJsonBody(response, responsePage);
|
|
}
|
|
|
|
void handleGetTransaction(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
TransactionDetail txn = getTransaction(ds, getTransactionIdOrThrow(request));
|
|
import asdf : serializeToJson;
|
|
string jsonStr = serializeToJson(txn);
|
|
response.writeBodyString(jsonStr, "application/json");
|
|
}
|
|
|
|
void handleAddTransaction(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
auto payload = readJsonBodyAs!AddTransactionPayload(request);
|
|
TransactionDetail txn = addTransaction(ds, payload);
|
|
import asdf : serializeToJson;
|
|
string jsonStr = serializeToJson(txn);
|
|
response.writeBodyString(jsonStr, "application/json");
|
|
}
|
|
|
|
void handleUpdateTransaction(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
ulong txnId = getTransactionIdOrThrow(request);
|
|
auto payload = readJsonBodyAs!AddTransactionPayload(request);
|
|
TransactionDetail txn = updateTransaction(ds, txnId, payload);
|
|
import asdf : serializeToJson;
|
|
string jsonStr = serializeToJson(txn);
|
|
response.writeBodyString(jsonStr, "application/json");
|
|
}
|
|
|
|
void handleDeleteTransaction(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
ulong txnId = getTransactionIdOrThrow(request);
|
|
deleteTransaction(ds, txnId);
|
|
}
|
|
|
|
void handleGetAllTags(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
string[] tags = ds.getTransactionTagRepository().findAll();
|
|
writeJsonBody(response, tags);
|
|
}
|
|
|
|
private ulong getTransactionIdOrThrow(in ServerHttpRequest request) {
|
|
return getPathParamOrThrow(request, "transactionId");
|
|
}
|
|
|
|
// Vendors API
|
|
|
|
void handleGetVendors(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
TransactionVendor[] vendors = getAllVendors(ds);
|
|
writeJsonBody(response, vendors);
|
|
}
|
|
|
|
void handleGetVendor(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
TransactionVendor vendor = getVendor(ds, getVendorId(request));
|
|
writeJsonBody(response, vendor);
|
|
}
|
|
|
|
struct VendorPayload {
|
|
string name;
|
|
string description;
|
|
}
|
|
|
|
void handleCreateVendor(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
VendorPayload payload = readJsonBodyAs!VendorPayload(request);
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
TransactionVendor vendor = createVendor(ds, payload);
|
|
writeJsonBody(response, vendor);
|
|
}
|
|
|
|
void handleUpdateVendor(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
VendorPayload payload = readJsonBodyAs!VendorPayload(request);
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
TransactionVendor updated = updateVendor(ds, getVendorId(request), payload);
|
|
writeJsonBody(response, updated);
|
|
}
|
|
|
|
void handleDeleteVendor(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
ProfileDataSource ds = getProfileDataSource(request);
|
|
deleteVendor(ds, getVendorId(request));
|
|
}
|
|
|
|
private ulong getVendorId(in ServerHttpRequest request) {
|
|
return getPathParamOrThrow(request, "vendorId");
|
|
}
|
|
|
|
// Categories API
|
|
|
|
void handleGetCategories(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
TransactionCategoryTree[] categories = getCategories(getProfileDataSource(request));
|
|
writeJsonBody(response, categories);
|
|
}
|
|
|
|
void handleGetCategory(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
// TODO
|
|
}
|
|
|
|
void handleCreateCategory(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
// TODO
|
|
}
|
|
|
|
void handleUpdateCategory(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
// TODO
|
|
}
|
|
|
|
void handleDeleteCategory(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
// TODO
|
|
}
|