finnow/finnow-api/source/transaction/api.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
}