diff --git a/apps/counter/api/mobile/urls.py b/apps/counter/api/mobile/urls.py index e69de29..c7679d7 100644 --- a/apps/counter/api/mobile/urls.py +++ b/apps/counter/api/mobile/urls.py @@ -0,0 +1,10 @@ +from django.urls import path +from .views import ( + DeviceInfoMobileListAPIView +) + + +app_name = 'counter-mobile-api' +urlpatterns = [ + path('device/', DeviceInfoMobileListAPIView.as_view(), name='logs'), +] \ No newline at end of file diff --git a/apps/counter/api/mobile/views.py b/apps/counter/api/mobile/views.py index e69de29..4faa67a 100644 --- a/apps/counter/api/mobile/views.py +++ b/apps/counter/api/mobile/views.py @@ -0,0 +1,38 @@ +from rest_framework.filters import ( + SearchFilter, + OrderingFilter +) +from rest_framework.generics import ListAPIView +from rest_framework.permissions import IsAuthenticated + +from counter.models import DeviceInfo +from .serializers import DeviceInfoMobileSerializer +from utils.pagination import DeviceInfoMobilePagination +from ...mixins.role import RoleMixin + + +class DeviceInfoMobileListAPIView(ListAPIView, RoleMixin): + serializer_class = DeviceInfoMobileSerializer + permission_classes = [IsAuthenticated] + filter_backends = [SearchFilter, OrderingFilter] + pagination_class = DeviceInfoMobilePagination + search_fields = ['device_id', 'online'] + + def get_queryset(self, *args, **kwargs): + user_roles = self.get_role() + queryset = DeviceInfo.objects.get_queryset().order_by('-last_offline_time') + if 'staff' in user_roles or 'manager' in user_roles: + child = self.request.user.get_child() + device_ids = [query.device_id + for query in queryset + if query.org == self.request.user.org or query.org.id in child] + queryset = queryset.filter(device_id__in=device_ids) + device_id = self.request.GET.get('device_id') + status = self.request.GET.get('status') + + if device_id: + queryset = queryset.filter(device_id__icontains=device_id) + + if status: + queryset = queryset.filter(online=int(status)) + return queryset diff --git a/apps/utils/__init__.py b/apps/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/utils/pagination.py b/apps/utils/pagination.py new file mode 100644 index 0000000..315665d --- /dev/null +++ b/apps/utils/pagination.py @@ -0,0 +1,8 @@ +from rest_framework.pagination import PageNumberPagination + + +class DeviceInfoMobilePagination(PageNumberPagination): + page_size = 10 + page_size_query_param = 'limit' + page_query_param = 'page' + max_page_size = 1000 diff --git a/mosqkiller/urls.py b/mosqkiller/urls.py index e1be95c..7e9b1dc 100644 --- a/mosqkiller/urls.py +++ b/mosqkiller/urls.py @@ -29,6 +29,7 @@ urlpatterns = [ path('api/users/', include("accounts.api.urls")), path('api/login/', obtain_jwt_token), # path('api/docs/', include_docs_urls("Mosq API Doc")) + path('api/mobile/counter/', include("counter.api.mobile.urls")), path('api/mobile/users/', include("accounts.api.mobile.urls")), ]