from osinacore.api.utils import * from osichat.models import * from rest_framework.decorators import api_view from .serializers import * from django.shortcuts import get_object_or_404 from django.db.models import Q from django.utils.dateparse import parse_date @api_view(['GET']) def get_chat_rooms(request): chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent')).order_by('-last_update', '-date_created') chat_rooms_serializer = ChatRoomSerializer(chat_rooms, many=True) return successRes(chat_rooms_serializer.data) @api_view(['GET']) def get_visitors(request): start_date = request.query_params.get("start_date") end_date = request.query_params.get("end_date") if start_date: start_date = parse_date(start_date) if end_date: end_date = parse_date(end_date) if start_date and end_date: # Range of time visitors = Visitor.objects.filter(Q(visitorlog__visit_date__date__range=[start_date, end_date]) | Q(visitorlog__left_date__date__range=[start_date, end_date])).distinct() elif start_date and not end_date: # Specific date visitors = Visitor.objects.filter(Q(visitorlog__visit_date__date=start_date) | Q(visitorlog__left_date__date=start_date)).distinct() else: # Active visitors visitors = Visitor.objects.filter(visitorlog__left_date__isnull=True).distinct() visitors_count = visitors.count() visitors_data = [] for visitor in visitors: visitor_data = { "id": visitor.id, "ip": visitor.ip_address, "flag": visitor.flag_image_url, "is_online": visitor.is_online, "duration": visitor.total_duration, "last_log": VisitorLog.objects.filter(visitor=visitor).last().title } visitors_data.append(visitor_data) response_data = { "count": visitors_count, "visitors": visitors_data } return successRes(response_data)