98 lines
3.4 KiB
D
98 lines
3.4 KiB
D
module transaction.api;
|
|
|
|
import handy_httpd;
|
|
|
|
import transaction.model;
|
|
import transaction.data;
|
|
import transaction.service;
|
|
import profile.data;
|
|
import profile.service;
|
|
import util.json;
|
|
import util.money;
|
|
import util.pagination;
|
|
|
|
immutable DEFAULT_TRANSACTION_PAGE = PageRequest(0, 10, [Sort("created_at", SortDir.DESC)]);
|
|
|
|
void getTransactions(ref HttpRequestContext ctx) {
|
|
ProfileDataSource ds = getProfileDataSource(ctx);
|
|
PageRequest pr = PageRequest.parse(ctx, DEFAULT_TRANSACTION_PAGE);
|
|
Page!Transaction page = searchTransactions(ds, pr);
|
|
}
|
|
|
|
void getVendors(ref HttpRequestContext ctx) {
|
|
ProfileDataSource ds = getProfileDataSource(ctx);
|
|
auto vendorRepo = ds.getTransactionVendorRepository();
|
|
TransactionVendor[] vendors = vendorRepo.findAll();
|
|
writeJsonBody(ctx, vendors);
|
|
}
|
|
|
|
void getVendor(ref HttpRequestContext ctx) {
|
|
long vendorId = ctx.request.getPathParamAs!long("vendorId", -1);
|
|
if (vendorId == -1) {
|
|
ctx.response.status = HttpStatus.NOT_FOUND;
|
|
ctx.response.writeBodyString("Missing vendorId path parameter.");
|
|
return;
|
|
}
|
|
ProfileDataSource ds = getProfileDataSource(ctx);
|
|
auto vendorRepo = ds.getTransactionVendorRepository();
|
|
TransactionVendor vendor = vendorRepo.findById(vendorId)
|
|
.orElseThrow(() => new HttpStatusException(HttpStatus.NOT_FOUND));
|
|
writeJsonBody(ctx, vendor);
|
|
}
|
|
|
|
struct VendorPayload {
|
|
string name;
|
|
string description;
|
|
}
|
|
|
|
void createVendor(ref HttpRequestContext ctx) {
|
|
VendorPayload payload = readJsonPayload!VendorPayload(ctx);
|
|
ProfileDataSource ds = getProfileDataSource(ctx);
|
|
auto vendorRepo = ds.getTransactionVendorRepository();
|
|
if (vendorRepo.existsByName(payload.name)) {
|
|
ctx.response.status = HttpStatus.BAD_REQUEST;
|
|
ctx.response.writeBodyString("Vendor name is already in use.");
|
|
return;
|
|
}
|
|
TransactionVendor vendor = vendorRepo.insert(payload.name, payload.description);
|
|
writeJsonBody(ctx, vendor);
|
|
}
|
|
|
|
void updateVendor(ref HttpRequestContext ctx) {
|
|
VendorPayload payload = readJsonPayload!VendorPayload(ctx);
|
|
long vendorId = ctx.request.getPathParamAs!long("vendorId", -1);
|
|
if (vendorId == -1) {
|
|
ctx.response.status = HttpStatus.NOT_FOUND;
|
|
ctx.response.writeBodyString("Missing vendorId path parameter.");
|
|
return;
|
|
}
|
|
ProfileDataSource ds = getProfileDataSource(ctx);
|
|
auto vendorRepo = ds.getTransactionVendorRepository();
|
|
TransactionVendor existingVendor = vendorRepo.findById(vendorId)
|
|
.orElseThrow(() => new HttpStatusException(HttpStatus.NOT_FOUND));
|
|
if (payload.name != existingVendor.name && vendorRepo.existsByName(payload.name)) {
|
|
ctx.response.status = HttpStatus.BAD_REQUEST;
|
|
ctx.response.writeBodyString("Vendor name is already in use.");
|
|
}
|
|
TransactionVendor updated = vendorRepo.updateById(
|
|
vendorId,
|
|
payload.name,
|
|
payload.description
|
|
);
|
|
writeJsonBody(ctx, updated);
|
|
}
|
|
|
|
void deleteVendor(ref HttpRequestContext ctx) {
|
|
long vendorId = ctx.request.getPathParamAs!long("vendorId", -1);
|
|
if (vendorId == -1) {
|
|
ctx.response.status = HttpStatus.NOT_FOUND;
|
|
ctx.response.writeBodyString("Missing vendorId path parameter.");
|
|
return;
|
|
}
|
|
ProfileDataSource ds = getProfileDataSource(ctx);
|
|
auto vendorRepo = ds.getTransactionVendorRepository();
|
|
vendorRepo.deleteById(vendorId);
|
|
}
|
|
|
|
|