finnow/finnow-api/source/analytics/api.d

36 lines
1.3 KiB
D

module analytics.api;
import handy_http_primitives;
import profile.data;
import profile.service;
void handleGetBalanceTimeSeries(ref ServerHttpRequest request, ref ServerHttpResponse response) {
auto ds = getProfileDataSource(request);
serveJsonFromProperty(response, ds, "analytics.balanceTimeSeries");
}
void handleGetCategorySpendTimeSeries(ref ServerHttpRequest request, ref ServerHttpResponse response) {
auto ds = getProfileDataSource(request);
serveJsonFromProperty(response, ds, "analytics.categorySpendTimeSeries");
}
/**
* Helper method to serve JSON analytics data to a client by fetching it
* directly from the user's profile properties table and writing it to the
* response.
* Params:
* response = The response to write to.
* ds = The datasource to serve data from.
* key = The name of the analytics property to read data from.
*/
private void serveJsonFromProperty(ref ServerHttpResponse response, ref ProfileDataSource ds, string key) {
PropertiesRepository propsRepo = ds.getPropertiesRepository();
string jsonStr = propsRepo.findProperty(key).orElse(null);
if (jsonStr is null || jsonStr.length == 0) {
response.status = HttpStatus.NOT_FOUND;
response.writeBodyString("No data found for " ~ key);
} else {
response.writeBodyString(jsonStr, ContentTypes.APPLICATION_JSON);
}
}