317 lines
12 KiB
Python
317 lines
12 KiB
Python
from django.core.serializers import serialize
|
|
from .models import Location, Location_line, Location_polygon, JpnAdminMainPerf, JpnAdminPerf, JpnSubPerf, Useractions, GifuAreas
|
|
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
|
|
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.all()
|
|
serializer_class=JPN_main_perfSerializer
|
|
filter_fields = ["adm1_ja"]
|
|
|
|
class Jpn_PerfViewSet(viewsets.ModelViewSet):
|
|
queryset=JpnAdminPerf.objects.all()
|
|
serializer_class=JPN_perfSerializer
|
|
|
|
|
|
def LocationsInPerf(request):
|
|
perfecture = request.GET.get('perf')
|
|
cat = request.GET.get('cat')
|
|
perf_geom = JpnAdminMainPerf.objects.get(id=perfecture)
|
|
|
|
if(cat):
|
|
locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat)
|
|
else:
|
|
locs = Location.objects.filter(geom__within=perf_geom.geom)
|
|
|
|
serializer = LocationSerializer(locs, many=True)
|
|
return JsonResponse(serializer.data, safe=False)
|
|
|
|
def LocationsInSubPerf(request):
|
|
subperfecture = request.GET.get('subperf')
|
|
cat = request.GET.get('cat')
|
|
perf_geom = JpnSubPerf.objects.get(id=subperfecture)
|
|
|
|
if(cat):
|
|
locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat)
|
|
else:
|
|
locs = Location.objects.filter(geom__within=perf_geom.geom)
|
|
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')
|
|
|
|
|
|
|
|
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):
|
|
print("----res from cat")
|
|
locs = Location.objects.filter(geom__within=pl, category=cat, event_name__isnull=True)
|
|
else:
|
|
locs = Location.objects.filter(geom__within=pl, event_name__isnull=True)
|
|
#res = Location.objects.filter(geom__within=pl)
|
|
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)
|
|
|
|
|
|
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 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, checkin=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')
|
|
if(cat != None):
|
|
print("----res from cat")
|
|
locs = Location.objects.filter(event_name__isnull=False, category=cat)
|
|
else:
|
|
locs = Location.objects.filter(event_name__isnull=False)
|
|
|
|
serializer = LocationSerializer(locs, many=True)
|
|
return JsonResponse(serializer.data, safe=False)
|
|
|
|
|
|
|
|
|
|
class TestActionViewSet(viewsets.ModelViewSet):
|
|
serializer_class = TestSerialiser
|
|
queryset = TestModel.objects.all() |