From 980520b5902c5a47813485aea239e4987d593cd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 29 Mar 2024 14:17:07 +0100 Subject: [PATCH] add stats endpoint --- src/c3nav/api/schema.py | 7 +++++++ src/c3nav/api/stats.py | 20 ++++++++++++++++++++ src/c3nav/api/urls.py | 2 ++ 3 files changed, 29 insertions(+) create mode 100644 src/c3nav/api/stats.py diff --git a/src/c3nav/api/schema.py b/src/c3nav/api/schema.py index 301bcca9..22e407ba 100644 --- a/src/c3nav/api/schema.py +++ b/src/c3nav/api/schema.py @@ -130,3 +130,10 @@ class AnyGeometrySchema(BaseSchema): """ type: NonEmptyStr coordinates: Any + + +class StatsSchema(BaseSchema): + users_total: int + reports_total: int + reports_today: int + reports_open: int \ No newline at end of file diff --git a/src/c3nav/api/stats.py b/src/c3nav/api/stats.py new file mode 100644 index 00000000..003191cd --- /dev/null +++ b/src/c3nav/api/stats.py @@ -0,0 +1,20 @@ +from datetime import datetime + +from django.contrib.auth import get_user_model +from django.core.handlers.wsgi import WSGIRequest +from ninja import Router as APIRouter + +from c3nav.api.schema import StatsSchema +from c3nav.mapdata.models.report import Report + +stats_api_router = APIRouter(tags=["stats"]) + + +@stats_api_router.get('/stats/', auth=None, summary="get stats") +def stats(request: WSGIRequest) -> StatsSchema: + return StatsSchema( + users_total=get_user_model().objects.count(), + reports_total=Report.objects.count(), + reports_open=Report.objects.filter(open=True).count(), + reports_today=Report.objects.filter(created__date=datetime.today().date()).count(), + ) diff --git a/src/c3nav/api/urls.py b/src/c3nav/api/urls.py index cd3a1246..1d735c04 100644 --- a/src/c3nav/api/urls.py +++ b/src/c3nav/api/urls.py @@ -5,6 +5,7 @@ from django.views.generic.base import RedirectView from c3nav.api.api import auth_api_router from c3nav.api.ninja import ninja_api from c3nav.api.settings import settings_api_router +from c3nav.api.stats import stats_api_router from c3nav.editor.api.endpoints import editor_api_router from c3nav.mapdata.api.map import map_api_router from c3nav.mapdata.api.mapdata import mapdata_api_router @@ -23,6 +24,7 @@ ninja_api.add_router("/positioning/", positioning_api_router) ninja_api.add_router("/mapdata/", mapdata_api_router) ninja_api.add_router("/editor/", editor_api_router) ninja_api.add_router("/settings/", settings_api_router) +ninja_api.add_router("/stats/", stats_api_router) if settings.ENABLE_MESH: from c3nav.mesh.api import mesh_api_router ninja_api.add_router("/mesh/", mesh_api_router)