feat: add a /stats endpoint

This commit is contained in:
Alexis Métaireau 2024-04-13 19:52:48 +02:00 committed by Bastien Roy
parent d67bbc7d8c
commit a1c179f612
4 changed files with 69 additions and 1 deletions

View 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",
)

View 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,
}

View file

@ -25,6 +25,7 @@ from django.views.generic.base import TemplateView
from la_chariotte import settings
from la_chariotte.order.views import JoinGroupedOrderView
from la_chariotte.order.views.stats import stats
urlpatterns = [
path("admin/", admin.site.urls),
@ -83,4 +84,5 @@ urlpatterns = [
),
name="about_chariotte",
),
path("stats/", stats, name="stats"),
]

View file

@ -15,7 +15,7 @@ dependencies = [
"icalendar>=5.0.7,<6",
"base36>=0.1.1,<1",
"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",
"django-crispy-forms>=2.0,<3",
"crispy-bulma>=0.11.0,<1",