diff --git a/docs/rest/dashboard.rest b/docs/rest/dashboard.rest new file mode 100644 index 0000000..0b0b127 --- /dev/null +++ b/docs/rest/dashboard.rest @@ -0,0 +1,28 @@ + +@server = http://localhost:4000/api +@token = {{login.response.body.$.token}} + +### +# @name login +POST {{server}}/auth/ +Content-Type: application/json + +{ + "username": "usuario1", + "password": "usuario1" +} + +### +# @name count_lineas_vigentes +GET {{server}}/lineas/count +Authorization: Bearer {{token}} + +### +# @name count_buses +GET {{server}}/lineas/count_buses +Authorization: Bearer {{token}} + +### +# @name count_paraderos_vigentes +GET {{server}}/paraderos/count/?vigente=1 +Authorization: Bearer {{token}} \ No newline at end of file diff --git a/project/api/views/linea.py b/project/api/views/linea.py index ca8b3d4..1e21cb8 100755 --- a/project/api/views/linea.py +++ b/project/api/views/linea.py @@ -76,7 +76,6 @@ class LineaViewSet(viewsets.ModelViewSet): return JsonResponse(buses, safe=False) - @action(detail=False, methods=['get']) def buses_proto(self, request, pk=None): pk = request.GET['id_linea'] @@ -116,3 +115,57 @@ class LineaViewSet(viewsets.ModelViewSet): detalle_buses.append(data_bus) return JsonResponse(detalle_buses, safe=False) + + + @action(detail=False, methods=['get']) + def count(self, request, pk=None): + + queryset = models.Linea.objects.all() + + if 'vigente' in request.GET and request.GET['vigente'] == '1': + queryset = queryset.filter(vigente=True) + + if 'vigente' in request.GET and request.GET['vigente'] == '0': + queryset = queryset.filter(vigente=False) + + return JsonResponse({ 'count': queryset.count() }) + + + @action(detail=False, methods=['get']) + def count_buses(self, request, pk=None): + + query = "SELECT \ + l.route_short_name, \ + (select count(distinct vehicle_license_plate) \ + from gtfs_posiciones as gp \ + where (trim(gp.route_id)||'-'||trim(gp.direction_id::varchar)) = l.id_linea \ + ) as count \ + from linea l \ + where \ + (select count(distinct vehicle_license_plate) from gtfs_posiciones as gp where \ + (trim(gp.route_id)||'-'||trim(gp.direction_id::varchar)) = l.id_linea)>0" + + with connection.cursor() as cursor: + cursor.execute(query) + result = cursor.fetchall() + + data = [] + for row in result: + data.append({ + 'route_short_name': row[0], + 'count': row[1] + }) + + return JsonResponse(data, safe=False) + + + @action(detail=False, methods=['get']) + def count_buses_recorridos(self, request, pk=None): + query = "select count(distinct vehicle_license_plate) from gtfs_posiciones" + + with connection.cursor() as cursor: + cursor.execute(query) + result = cursor.fetchone() + + return JsonResponse({ 'count': result[0] }) + diff --git a/project/api/views/paradero.py b/project/api/views/paradero.py index 94e2c57..05a415a 100755 --- a/project/api/views/paradero.py +++ b/project/api/views/paradero.py @@ -1,5 +1,6 @@ from django.http import JsonResponse from rest_framework import viewsets +from rest_framework.decorators import action from api.serializers import ParaderoSerializer from api.models import Paradero import logging @@ -9,6 +10,23 @@ class ParaderoViewSet(viewsets.ModelViewSet): serializer_class = ParaderoSerializer + @action(detail=False, methods=['get']) + def count(self, request, pk=None): + + queryset = Paradero.objects.all() + + if 'vigente' in request.GET and request.GET['vigente'] == '1': + queryset = queryset.filter(vigente=True) + + if 'vigente' in request.GET and request.GET['vigente'] == '0': + queryset = queryset.filter(vigente=False) + + if 'id_comuna' in request.GET: + pass + + return JsonResponse({ 'count': queryset.count() }) + + def info_public(request, pk): if hasattr(request.META,'HTTP_REFERER'):