From 887d2074dcdf3a36ea68d0f4d5299aaf200a5e25 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Fri, 14 Apr 2023 15:33:43 +0200 Subject: [PATCH 1/3] All transactions endpoint --- nummi/api/__init__.py | 0 nummi/api/admin.py | 3 +++ nummi/api/apps.py | 6 ++++++ nummi/api/migrations/__init__.py | 0 nummi/api/models.py | 3 +++ nummi/api/tests.py | 3 +++ nummi/api/urls.py | 7 +++++++ nummi/api/views.py | 13 +++++++++++++ nummi/nummi/urls.py | 1 + 9 files changed, 36 insertions(+) create mode 100644 nummi/api/__init__.py create mode 100644 nummi/api/admin.py create mode 100644 nummi/api/apps.py create mode 100644 nummi/api/migrations/__init__.py create mode 100644 nummi/api/models.py create mode 100644 nummi/api/tests.py create mode 100644 nummi/api/urls.py create mode 100644 nummi/api/views.py diff --git a/nummi/api/__init__.py b/nummi/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nummi/api/admin.py b/nummi/api/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/nummi/api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/nummi/api/apps.py b/nummi/api/apps.py new file mode 100644 index 0000000..878e7d5 --- /dev/null +++ b/nummi/api/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ApiConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "api" diff --git a/nummi/api/migrations/__init__.py b/nummi/api/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nummi/api/models.py b/nummi/api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/nummi/api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/nummi/api/tests.py b/nummi/api/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/nummi/api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/nummi/api/urls.py b/nummi/api/urls.py new file mode 100644 index 0000000..858013a --- /dev/null +++ b/nummi/api/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path("transactions", views.TransactionListView.as_view(), name="index"), +] diff --git a/nummi/api/views.py b/nummi/api/views.py new file mode 100644 index 0000000..ca7e5ad --- /dev/null +++ b/nummi/api/views.py @@ -0,0 +1,13 @@ +from django.http import JsonResponse +from django.views import View +from django.views.generic.list import MultipleObjectMixin + +from main.models import Transaction +from main.views import UserMixin + + +class TransactionListView(UserMixin, MultipleObjectMixin, View): + model = Transaction + + def get(self, request, *args, **kwargs): + return JsonResponse({"transactions": list(self.get_queryset().values())}) diff --git a/nummi/nummi/urls.py b/nummi/nummi/urls.py index 14d3517..a888c80 100644 --- a/nummi/nummi/urls.py +++ b/nummi/nummi/urls.py @@ -20,6 +20,7 @@ from django.urls import include, path urlpatterns = i18n_patterns( path("", include("main.urls")), path("plot/", include("plot.urls")), + path("api/", include("api.urls")), path("admin/", admin.site.urls), prefix_default_language=False, ) From cba2358c0b57b33705afb4ae567186bc3781e26a Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Fri, 14 Apr 2023 15:42:49 +0200 Subject: [PATCH 2/3] Add snapshot, account and category endpoints --- nummi/api/urls.py | 5 ++++- nummi/api/views.py | 23 ++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/nummi/api/urls.py b/nummi/api/urls.py index 858013a..1579b84 100644 --- a/nummi/api/urls.py +++ b/nummi/api/urls.py @@ -3,5 +3,8 @@ from django.urls import path from . import views urlpatterns = [ - path("transactions", views.TransactionListView.as_view(), name="index"), + path("transactions", views.TransactionListView.as_view(), name="transactions"), + path("categories", views.CategoryListView.as_view(), name="categories"), + path("accounts", views.AccountListView.as_view(), name="accounts"), + path("snapshots", views.SnapshotListView.as_view(), name="snapshots"), ] diff --git a/nummi/api/views.py b/nummi/api/views.py index ca7e5ad..ce1749a 100644 --- a/nummi/api/views.py +++ b/nummi/api/views.py @@ -2,7 +2,7 @@ from django.http import JsonResponse from django.views import View from django.views.generic.list import MultipleObjectMixin -from main.models import Transaction +from main.models import Account, Category, Snapshot, Transaction from main.views import UserMixin @@ -11,3 +11,24 @@ class TransactionListView(UserMixin, MultipleObjectMixin, View): def get(self, request, *args, **kwargs): return JsonResponse({"transactions": list(self.get_queryset().values())}) + + +class CategoryListView(UserMixin, MultipleObjectMixin, View): + model = Category + + def get(self, request, *args, **kwargs): + return JsonResponse({"categories": list(self.get_queryset().values())}) + + +class AccountListView(UserMixin, MultipleObjectMixin, View): + model = Account + + def get(self, request, *args, **kwargs): + return JsonResponse({"accounts": list(self.get_queryset().values())}) + + +class SnapshotListView(UserMixin, MultipleObjectMixin, View): + model = Snapshot + + def get(self, request, *args, **kwargs): + return JsonResponse({"snapshots": list(self.get_queryset().values())}) From 63908cd837482971ac39eaa9e54e7b1d36e63c77 Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Sun, 16 Apr 2023 15:58:31 +0200 Subject: [PATCH 3/3] Add quarterly api endpoint --- nummi/api/urls.py | 1 + nummi/api/views.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/nummi/api/urls.py b/nummi/api/urls.py index 1579b84..cb74a80 100644 --- a/nummi/api/urls.py +++ b/nummi/api/urls.py @@ -7,4 +7,5 @@ urlpatterns = [ path("categories", views.CategoryListView.as_view(), name="categories"), path("accounts", views.AccountListView.as_view(), name="accounts"), path("snapshots", views.SnapshotListView.as_view(), name="snapshots"), + path("history", views.HistoryView.as_view(), name="history"), ] diff --git a/nummi/api/views.py b/nummi/api/views.py index ce1749a..876d5fd 100644 --- a/nummi/api/views.py +++ b/nummi/api/views.py @@ -1,3 +1,5 @@ +from django.db.models import Sum +from django.db.models.functions import ExtractQuarter, ExtractYear from django.http import JsonResponse from django.views import View from django.views.generic.list import MultipleObjectMixin @@ -32,3 +34,18 @@ class SnapshotListView(UserMixin, MultipleObjectMixin, View): def get(self, request, *args, **kwargs): return JsonResponse({"snapshots": list(self.get_queryset().values())}) + + +class HistoryView(UserMixin, MultipleObjectMixin, View): + model = Transaction + + def get(self, request, *args, **kwargs): + return JsonResponse( + { + "data": list( + self.get_queryset() + .values("category__name", quarter=ExtractQuarter("date"), year=ExtractYear("date")) + .annotate(Sum("value")) + ) + } + )