summaryrefslogtreecommitdiff
path: root/talerbank/app/views.py
diff options
context:
space:
mode:
authorMarcello Stanisci <stanisci.m@gmail.com>2019-04-02 20:21:43 +0200
committerMarcello Stanisci <stanisci.m@gmail.com>2019-04-02 20:21:43 +0200
commit6f7415a2d2c612bf91aa7a73449ef1a141790386 (patch)
tree8f55636e9b00182ff1cd085815ec70e573056512 /talerbank/app/views.py
parentd865e0df3de8165e01b145b927d224b763991a95 (diff)
downloadbank-6f7415a2d2c612bf91aa7a73449ef1a141790386.tar.gz
bank-6f7415a2d2c612bf91aa7a73449ef1a141790386.tar.bz2
bank-6f7415a2d2c612bf91aa7a73449ef1a141790386.zip
HTTP-Serving date-range based history query.
Diffstat (limited to 'talerbank/app/views.py')
-rw-r--r--talerbank/app/views.py47
1 files changed, 40 insertions, 7 deletions
diff --git a/talerbank/app/views.py b/talerbank/app/views.py
index 5002e08..b21b2fe 100644
--- a/talerbank/app/views.py
+++ b/talerbank/app/views.py
@@ -40,6 +40,7 @@ from django.contrib.auth.models import User
from django.db.models import Q
from django.http import JsonResponse, HttpResponse
from django.shortcuts import render, redirect
+from datetime import datetime
from .models import BankAccount, BankTransaction
from .amount import Amount
from .schemas import validate_data
@@ -693,6 +694,43 @@ def build_history_response(qs, cancelled, user_account):
return history
##
+# Serve a request of /history-range.
+#
+# @param request Django-specific HTTP request.
+# @param user_account the account whose history should be gotten.
+# @return Django-specific HTTP response object.
+@require_GET
+@login_via_headers
+def serve_history_range(request, user_account):
+ validate_data(request, request.GET.dict())
+
+ # Ordering.
+ ordering = request.GET.get("ordering", "descending")
+
+ # Note: those values got sanity-checked by "validate_data()"
+ start = int(request.GET.get("start"))
+ end = int(request.GET.get("end"))
+
+ start_td = datetime.fromtimestamp(start)
+ end_td = datetime.fromtimestamp(end)
+
+ qs = query_history_range(user_account.bankaccount,
+ request.GET.get("direction"),
+ start_td,
+ end_td,
+ "descending" == ordering)
+
+ history = build_history_response(qs,
+ request.GET.get("cancelled",
+ "show"),
+ user_account)
+ if not history:
+ return HttpResponse(status=204)
+ return JsonResponse(dict(data=history), status=200)
+
+
+
+##
# Serve a request of /history.
#
# @param request Django-specific HTTP request.
@@ -717,12 +755,6 @@ def serve_history(request, user_account):
if not start:
start = 0 if "+" == sign else UINT64_MAX
- # query_history_range (bank_account,
- # direction,
- # start,
- # end,
- # ordering)
-
qs = query_history(user_account.bankaccount,
request.GET.get("direction"),
int(parsed_delta.group(2)),
@@ -731,7 +763,8 @@ def serve_history(request, user_account):
"descending" == ordering)
history = build_history_response(qs,
- request.GET.get("cancelled", "show"),
+ request.GET.get("cancelled",
+ "show"),
user_account)
if not history:
return HttpResponse(status=204)