mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-04-29 02:12:39 +02:00
feat: add a /stats endpoint
This commit is contained in:
parent
d67bbc7d8c
commit
a1c179f612
4 changed files with 69 additions and 1 deletions
28
la_chariotte/order/views/stats.py
Normal file
28
la_chariotte/order/views/stats.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import json
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
from django.http import HttpResponse
|
||||||
|
from django.utils.timezone import make_aware
|
||||||
|
|
||||||
|
from la_chariotte.accounts.models import CustomUser
|
||||||
|
from la_chariotte.order.models import GroupedOrder, Order
|
||||||
|
|
||||||
|
|
||||||
|
def stats(request):
|
||||||
|
last_month = make_aware(datetime.today() - timedelta(days=30))
|
||||||
|
|
||||||
|
last_month_grouped_orders = GroupedOrder.objects.filter(
|
||||||
|
deadline__gte=last_month
|
||||||
|
).count()
|
||||||
|
|
||||||
|
return HttpResponse(
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
"total_users": CustomUser.objects.count(),
|
||||||
|
"total_grouped_orders": GroupedOrder.objects.count(),
|
||||||
|
"total_orders": Order.objects.count(),
|
||||||
|
"last_month_grouped_orders": last_month_grouped_orders,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
content_type="application/json",
|
||||||
|
)
|
38
la_chariotte/tests/test_views_stats.py
Normal file
38
la_chariotte/tests/test_views_stats.py
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
from django.contrib import auth
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from .utils import create_grouped_order, order_items_in_grouped_order
|
||||||
|
|
||||||
|
|
||||||
|
def test_stats(client_log):
|
||||||
|
response = client_log.get(reverse("stats"))
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response.json() == {
|
||||||
|
"total_grouped_orders": 0,
|
||||||
|
"total_orders": 0,
|
||||||
|
"total_users": 1,
|
||||||
|
"last_month_grouped_orders": 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a new grouped-order, place an order and check that the stats changed.
|
||||||
|
grouped_order = create_grouped_order(
|
||||||
|
days_before_delivery_date=5,
|
||||||
|
days_before_deadline=2,
|
||||||
|
name="gr order test",
|
||||||
|
orga_user=auth.get_user(client_log),
|
||||||
|
)
|
||||||
|
order_items_in_grouped_order(grouped_order)
|
||||||
|
|
||||||
|
grouped_order.deadline = datetime.now() - timedelta(days=10)
|
||||||
|
grouped_order.save()
|
||||||
|
|
||||||
|
response = client_log.get(reverse("stats"))
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response.json() == {
|
||||||
|
"total_grouped_orders": 1,
|
||||||
|
"total_orders": 3,
|
||||||
|
"total_users": 1,
|
||||||
|
"last_month_grouped_orders": 1,
|
||||||
|
}
|
|
@ -25,6 +25,7 @@ from django.views.generic.base import TemplateView
|
||||||
|
|
||||||
from la_chariotte import settings
|
from la_chariotte import settings
|
||||||
from la_chariotte.order.views import JoinGroupedOrderView
|
from la_chariotte.order.views import JoinGroupedOrderView
|
||||||
|
from la_chariotte.order.views.stats import stats
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("admin/", admin.site.urls),
|
path("admin/", admin.site.urls),
|
||||||
|
@ -83,4 +84,5 @@ urlpatterns = [
|
||||||
),
|
),
|
||||||
name="about_chariotte",
|
name="about_chariotte",
|
||||||
),
|
),
|
||||||
|
path("stats/", stats, name="stats"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -15,7 +15,7 @@ dependencies = [
|
||||||
"icalendar>=5.0.7,<6",
|
"icalendar>=5.0.7,<6",
|
||||||
"base36>=0.1.1,<1",
|
"base36>=0.1.1,<1",
|
||||||
"django-weasyprint==1.1.0.post1", # see below
|
"django-weasyprint==1.1.0.post1", # see below
|
||||||
"weasyprint==52.5", # pin weasyprint to not depend on latest libpango
|
"weasyprint==52.5", # pin weasyprint to not depend on latest libpango
|
||||||
"html2text>=2020.1.16",
|
"html2text>=2020.1.16",
|
||||||
"django-crispy-forms>=2.0,<3",
|
"django-crispy-forms>=2.0,<3",
|
||||||
"crispy-bulma>=0.11.0,<1",
|
"crispy-bulma>=0.11.0,<1",
|
||||||
|
|
Loading…
Reference in a new issue