from django.core.serializers import serialize from .models import Location, Location_line, Location_polygon, JpnAdminMainPerf, JpnAdminPerf, JpnSubPerf, Useractions, GifuAreas, RogUser, CustomUser, UserTracks from rest_framework import viewsets from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, JPN_perfSerializer, JPN_sub_perSerializer, LocationCatSerializer, CreateUserSerializer, UserSerializer, LoginUserSerializer, UseractionsSerializer, UserDestinationSerializer, GifuAreaSerializer, LocationEventNameSerializer, RogUserSerializer, UserTracksSerializer from knox.models import AuthToken from rest_framework import viewsets, permissions, generics from rest_framework.decorators import action from rest_framework.response import Response from rest_framework.parsers import JSONParser, MultiPartParser from .serializers import LocationSerializer from django.http import JsonResponse from .serializers import TestSerialiser from .models import TestModel from django.shortcuts import get_object_or_404 from django.db.models import F from django.contrib.gis import geos from django.db.models import Q class LocationViewSet(viewsets.ModelViewSet): queryset=Location.objects.all() serializer_class=LocationSerializer filter_fields=["prefecture", "location_name"] class Location_lineViewSet(viewsets.ModelViewSet): queryset=Location_line.objects.all() serializer_class=Location_lineSerializer class Location_polygonViewSet(viewsets.ModelViewSet): queryset=Location_polygon.objects.all() serializer_class=Location_polygonSerializer class Jpn_Main_PerfViewSet(viewsets.ModelViewSet): queryset=JpnAdminMainPerf.objects.filter(id=9) serializer_class=JPN_main_perfSerializer filter_fields = ["adm1_ja"] class Jpn_PerfViewSet(viewsets.ModelViewSet): queryset=JpnAdminPerf.objects.all() serializer_class=JPN_perfSerializer class UserTracksViewSet(viewsets.ModelViewSet): queryset = UserTracks.objects.all() serializer_class = UserTracksSerializer def LocationsInPerf(request): perfecture = request.GET.get('perf') is_rog = request.GET.get('rog') cat = request.GET.get('cat') perf_geom = JpnAdminMainPerf.objects.get(id=perfecture) if(cat): if is_rog: locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat, cp__gt=0) else: locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat, cp=0) else: if is_rog: locs = Location.objects.filter(geom__within=perf_geom.geom, cp__gt=0) else: locs = Location.objects.filter(geom__within=perf_geom.geom, cp=0) serializer = LocationSerializer(locs, many=True) return JsonResponse(serializer.data, safe=False) def LocationsInSubPerf(request): subperfecture = request.GET.get('subperf') is_rog = request.GET.get('rog') cat = request.GET.get('cat') perf_geom = JpnSubPerf.objects.get(id=subperfecture) if(cat): if is_rog: locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat, cp__gt=0) else: locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat, cp=0) else: if is_rog: locs = Location.objects.filter(geom__within=perf_geom.geom, cp__gt=0) else: locs = Location.objects.filter(geom__within=perf_geom.geom, cp=0) serializer = LocationSerializer(locs, many=True) return JsonResponse(serializer.data, safe=False) def LocationInBound(request): lat1 = float(request.GET.get('la1')) lon1 = float(request.GET.get('ln1')) lat2 = float(request.GET.get('la2')) lon2 = float(request.GET.get('ln2')) lat3 = float(request.GET.get('la3')) lon3 = float(request.GET.get('ln3')) lat4 = float(request.GET.get('la4')) lon4 = float(request.GET.get('ln4')) cat = request.GET.get('cat') is_rog = request.GET.get('rog') if(lat1 != None and lon1 != None and lat2 != None and lon2 != None and lat3 != None and lon3 != None and lat4 != None and lon4 != None): pl = geos.Polygon(((lon1, lat1), (lon2, lat2), (lon3, lat3), (lon4, lat4), (lon1, lat1)), srid=4326) if(cat): if is_rog: locs = Location.objects.filter(geom__within=pl, category=cat, event_name__isnull=True, cp__gt=0) else: locs = Location.objects.filter(geom__within=pl, category=cat, event_name__isnull=True, cp=0) else: if is_rog: locs = Location.objects.filter(geom__within=pl, event_name__isnull=True, cp__gt=0) else: locs = Location.objects.filter(geom__within=pl, event_name__isnull=True, cp=0) if len(locs) > 50: return JsonResponse({"too_many_points": True}, safe=False, status=500) else: serializer = LocationSerializer(locs, many=True) return JsonResponse(serializer.data, safe=False) else: return JsonResponse({}, safe=False) def SubInPerf(request): prefecture = request.GET.get('perf') perf_geom = JpnAdminMainPerf.objects.get(id=prefecture) sub = JpnAdminPerf.objects.filter(geom__within=perf_geom.geom) serializer = JPN_perfSerializer(sub, many=True) return JsonResponse(serializer.data, safe=False) def SubPerfInMainPerf(request): area = request.GET.get('area') perf_geom = GifuAreas.objects.get(id=area) sub = JpnSubPerf.objects.filter(geom__contained=perf_geom.geom) #serializer = JPN_sub_perSerializer #sub = JpnAdminPerf.objects.filter(geom__within=perf_geom.geom) serializer = JPN_sub_perSerializer(sub, many=True) return JsonResponse(serializer.data, safe=False) def GetAllGifuAreas(request): prefecture = request.GET.get('perf') perf_geom = JpnAdminMainPerf.objects.get(id=prefecture) sub = GifuAreas.objects.filter(geom__contained=perf_geom.geom) serializer = GifuAreaSerializer(sub, many=True) return JsonResponse(serializer.data, safe=False) def ExtentForMainPerf(request): perf_id = request.GET.get('perf') perf = JpnAdminMainPerf.objects.get(id=perf_id) ext = perf.geom.extent # iata = serializers.serialize("json",ext) return JsonResponse(ext, safe=False) def ExtentForSubPerf(request): sub_perf_id = request.GET.get('sub_perf') sub_perf = JpnSubPerf.objects.get(id=sub_perf_id) ext = sub_perf.geom.extent # iata = serializers.serialize("json",ext) return JsonResponse(ext, safe=False) def CatView(request): lat1 = float(request.GET.get('la1')) lon1 = float(request.GET.get('ln1')) lat2 = float(request.GET.get('la2')) lon2 = float(request.GET.get('ln2')) lat3 = float(request.GET.get('la3')) lon3 = float(request.GET.get('ln3')) lat4 = float(request.GET.get('la4')) lon4 = float(request.GET.get('ln4')) if(lat1 != None and lon1 != None and lat2 != None and lon2 != None and lat3 != None and lon3 != None and lat4 != None and lon4 != None): pl = geos.Polygon(((lon1, lat1), (lon2, lat2), (lon3, lat3), (lon4, lat4), (lon1, lat1)), srid=4326) #locs = Location.objects.filter(geom__within=pl) c = Location.objects.filter(geom__within=pl).values('category').distinct() serializer = LocationCatSerializer(c, many=True) return JsonResponse(serializer.data, safe=False) else: return null c = Location.objects.filter().values('category').distinct() serializer = LocationCatSerializer(c, many=True) return JsonResponse(serializer.data, safe=False) def CatByCity(request): city = request.GET.get('city') if(city != None): cilt_polygon = JpnSubPerf.objects.filter(adm1_ja=city) cats = Location.objects.filter(geom__within=cilt_polygon[0].geom).values('category').distinct() serializer = LocationCatSerializer(cats, many=True) return JsonResponse(serializer.data, safe=False) else: return null class RegistrationAPI(generics.GenericAPIView): serializer_class = CreateUserSerializer def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.save() return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, "token": AuthToken.objects.create(user)[1] }) class LoginAPI(generics.GenericAPIView): serializer_class = LoginUserSerializer def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.validated_data return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, "token": AuthToken.objects.create(user)[1] }) class UserAPI(generics.RetrieveAPIView): permission_classes = [permissions.IsAuthenticated, ] serializer_class = UserSerializer def get_object(self): return self.request.user def userDetials(request): user_id = request.GET.get('user_id') user = CustomUser.objects.get(id=user_id) rogUser = RogUser.objects.filter(user=user) serializer = RogUserSerializer(rogUser, many=True) return JsonResponse(serializer.data, safe=False) def UserActionViewset(request): user_id = request.GET.get('user_id') location_id = request.GET.get('location_id') location = Location.objects.get(location_id=location_id) user = CustomUser.objects.get(id=user_id) action = Useractions.objects.filter(location=location, user=user) serializer = UseractionsSerializer(action, many=True) return JsonResponse(serializer.data, safe=False) def UserMakeActionViewset(request): user_id = request.GET.get('user_id') location_id = request.GET.get('location_id') wanttogo = True if request.GET.get('wanttogo') == "true" else False like = True if request.GET.get('like') == "true" else False checkin = True if request.GET.get('checkin') == "true" else False location = Location.objects.get(location_id=location_id) user = CustomUser.objects.get(id=user_id) #action = Useractions.objects.filter(location__id=location_id, user__id=user_id) rec = Useractions.objects.filter(user=user, location=location) if(rec): obj = rec.update(wanttogo=wanttogo, like=like, checkin=checkin) else: obj, created = Useractions.objects.update_or_create(user=user, location=location, wanttogo=wanttogo, like=like, checkin=checkin) serializer = UseractionsSerializer(obj, many=False) return JsonResponse(serializer.data, safe=False) def UserDestinations(request): user_id = request.GET.get('user_id') user = CustomUser.objects.get(id=user_id) #action = Useractions.objects.filter(location__id=location_id, user__id=user_id) rec = Useractions.objects.filter(user=user, wanttogo=True).order_by('order') serializer = UserDestinationSerializer(rec, many=True) return JsonResponse(serializer.data, safe=False) def UpdateOrder(request): dir = request.GET.get('dir') user_action_id = int(request.GET.get('user_action_id')) order = int(request.GET.get('order')) aorder = int(request.GET.get('order')) oorder = int(request.GET.get('order')) if(user_action_id): #updated = Useractions.objects.filter(order__gte=order).update(order = F('order')+1) #res = Useractions.objects.filter(id=user_action_id).update(order=order) index = 0 if dir == "up": for id in Useractions.objects.all().order_by('order').values_list('id', flat=True): print(id) print("----",user_action_id) if index == order : index += 1 print("index increated .....") if user_action_id == id: Useractions.objects.filter(id=id).update(order=order) print("updated .....") continue Useractions.objects.filter(id=id).update(order=index) index += 1 else : for id in Useractions.objects.all().order_by('order').values_list('id', flat=True): print(id) print("----",user_action_id) if index == order : index -= 1 print("index increated .....") if user_action_id == id: Useractions.objects.filter(id=id).update(order=order) print("updated .....") continue Useractions.objects.filter(id=id).update(order=index) index += 1 # for id in Useractions.objects.values_list('order', flat=True): # aorder -= 1 # Useractions.objects.filter(order__lt=id).update(order=aorder) # res = Useractions.objects.filter(id=user_action_id).update(order=oorder) return JsonResponse(1, safe=False) else: return JsonResponse({}, safe=False) def DeleteDestination(request): dest_id = int(request.GET.get('dest_id')) print("###### dest ") print(dest_id) if(dest_id != None): Useractions.objects.filter(id=dest_id).delete() return JsonResponse({"success":1}, safe=False) else: return JsonResponse({"success":0}, safe=False) def CustomAreaLocations(request): cat = request.GET.get('cat') name = request.GET.get('name') is_rog = request.GET.get('rog') if(cat != None): if is_rog: locs = Location.objects.filter(event_name__isnull=False, category=cat, event_name=name, cp__gt=0) else: locs = Location.objects.filter(event_name__isnull=False, category=cat, event_name=name, cp=0) else: if is_rog: locs = Location.objects.filter(event_name__isnull=False, event_name=name, cp__gt=0) else: locs = Location.objects.filter(event_name__isnull=False, event_name=name, cp=0) serializer = LocationSerializer(locs, many=True) return JsonResponse(serializer.data, safe=False) def CustomAreaNames(request): locs = Location.objects.filter(event_name__isnull=False).values('event_name').distinct() serializer = LocationEventNameSerializer(locs, many=True) return JsonResponse(serializer.data, safe=False) class TestActionViewSet(viewsets.ModelViewSet): serializer_class = TestSerialiser queryset = TestModel.objects.all()