This commit is contained in:
ThePetrovich 2025-07-02 18:59:30 +08:00
parent 2ec289f3c7
commit d7a99e915f

View file

@ -22,11 +22,9 @@ from drf_spectacular.utils import extend_schema
from .permissions import ReadOnlyOrAuthenticated, IsOwner from .permissions import ReadOnlyOrAuthenticated, IsOwner
User = get_user_model() User = get_user_model()
def get_prediction_from_tawhiri(params): def get_prediction_from_tawhiri(params):
base_url = "https://fly.stratonautica.ru/api/v2" base_url = "https://fly.stratonautica.ru/api/v2"
@ -35,15 +33,13 @@ def get_prediction_from_tawhiri(params):
if response.status_code == 200: if response.status_code == 200:
return response.json() # получаем результат предсказания return response.json() # получаем результат предсказания
else: else:
raise Exception(f"Tawhiri error: {response.status_code} {response.text}") raise Exception(
f"Tawhiri error: {response.status_code} {response.text}")
class PredictionViewSet(ViewSet): class PredictionViewSet(ViewSet):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def create(self, request): def create(self, request):
serializer = PredictionRequestSerializer(data=request.data) serializer = PredictionRequestSerializer(data=request.data)
@ -58,7 +54,8 @@ class PredictionViewSet(ViewSet):
except requests.RequestException as e: except requests.RequestException as e:
return Response({"error": f"Tawhiri error: {str(e)}"}, status=status.HTTP_502_BAD_GATEWAY) return Response({"error": f"Tawhiri error: {str(e)}"}, status=status.HTTP_502_BAD_GATEWAY)
prediction = Prediction.objects.create(result=prediction_result, user=request.user, request=request.data) prediction = Prediction.objects.create(
result=prediction_result, user=request.user, request=request.data)
return Response({ return Response({
"id": prediction.id, "id": prediction.id,
@ -66,8 +63,6 @@ class PredictionViewSet(ViewSet):
"result": prediction_result "result": prediction_result
}, status=status.HTTP_201_CREATED) }, status=status.HTTP_201_CREATED)
@action(detail=False, methods=['get']) @action(detail=False, methods=['get'])
def list_user(self, request): def list_user(self, request):
user = request.user user = request.user
@ -95,34 +90,29 @@ class PredictionViewSet(ViewSet):
queryset = Prediction.objects.filter(**filters) queryset = Prediction.objects.filter(**filters)
return Response(PredictionSerializer(queryset, many=True).data) return Response(PredictionSerializer(queryset, many=True).data)
@action(detail=False, methods=["get"]) @action(detail=False, methods=["get"])
def history(self, request): def history(self, request):
queryset = Prediction.objects.filter(user=request.user) queryset = Prediction.objects.filter(user=request.user)
return Response(PredictionListSerializer(queryset, many=True).data) return Response(PredictionListSerializer(queryset, many=True).data)
@action(detail=True, methods=["get"]) @action(detail=True, methods=["get"])
def detail(self, request, pk=None): def detail(self, request, pk=None):
prediction = Prediction.objects.filter(user=request.user, pk=pk).first() prediction = Prediction.objects.filter(
user=request.user, pk=pk).first()
if not prediction: if not prediction:
return Response({'detail': 'Not found'}, status=404) return Response({'detail': 'Not found'}, status=404)
return Response(PredictionDetailSerializer(prediction).data) return Response(PredictionDetailSerializer(prediction).data)
@action(detail=True, methods=["delete"]) @action(detail=True, methods=["delete"])
def delete(self, request, pk=None): def delete(self, request, pk=None):
prediction = Prediction.objects.filter(user=request.user, pk=pk).first() prediction = Prediction.objects.filter(
user=request.user, pk=pk).first()
if not prediction: if not prediction:
return Response({'detail': 'Not found'}, status=404) return Response({'detail': 'Not found'}, status=404)
prediction.delete() prediction.delete()
return Response(status=204) return Response(status=204)
class TelemetryListCreateView(generics.ListCreateAPIView): class TelemetryListCreateView(generics.ListCreateAPIView):
serializer_class = TelemetryPacketSerializer serializer_class = TelemetryPacketSerializer
permission_classes = [permissions.AllowAny] permission_classes = [permissions.AllowAny]
@ -140,8 +130,6 @@ class TelemetryListCreateView(generics.ListCreateAPIView):
return qs.order_by("-timestamp") return qs.order_by("-timestamp")
def post(self, request, pk): def post(self, request, pk):
serializer = TelemetryPacketSerializer(data=request.data) serializer = TelemetryPacketSerializer(data=request.data)
if not serializer.is_valid(): if not serializer.is_valid():
@ -149,17 +137,16 @@ class TelemetryListCreateView(generics.ListCreateAPIView):
validated_data = serializer.validated_data validated_data = serializer.validated_data
TelemetryPacket.objects.create(timestamp = time.time(), TelemetryPacket.objects.create(timestamp=time.time(),
satellite=Satellite.objects.get(id=pk), satellite=Satellite.objects.get(id=pk),
lat=validated_data["lat"], lat=validated_data["lat"],
lon=validated_data["lon"], lon=validated_data["lon"],
alt=validated_data["alt"], alt=validated_data["alt"],
payload=validated_data['payload'], payload=validated_data['payload'],
) )
return Response(serializer.errors, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_201_CREATED)
class SessionView(APIView): class SessionView(APIView):
authentication_classes = [SessionAuthentication, BasicAuthentication] authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
@ -169,7 +156,6 @@ class SessionView(APIView):
return JsonResponse({'isAuthenticated': True}) return JsonResponse({'isAuthenticated': True})
class WhoAmIView(APIView): class WhoAmIView(APIView):
authentication_classes = [SessionAuthentication, BasicAuthentication] authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
@ -179,7 +165,6 @@ class WhoAmIView(APIView):
return JsonResponse({'username': request.user.username}) return JsonResponse({'username': request.user.username})
@extend_schema(methods=["GET"], description="Get CSRF token") @extend_schema(methods=["GET"], description="Get CSRF token")
@api_view(["GET"]) @api_view(["GET"])
@permission_classes([AllowAny]) @permission_classes([AllowAny])
@ -189,7 +174,6 @@ def get_csrf(request):
return response return response
@extend_schema(methods=["POST"], description="Login user") @extend_schema(methods=["POST"], description="Login user")
@csrf_exempt @csrf_exempt
@api_view(["POST"]) @api_view(["POST"])
@ -211,7 +195,6 @@ def login_view(request):
return JsonResponse({'detail': 'Successfully logged in.'}) return JsonResponse({'detail': 'Successfully logged in.'})
@extend_schema(methods=["POST"], description="Logout user") @extend_schema(methods=["POST"], description="Logout user")
@api_view(["POST"]) @api_view(["POST"])
@permission_classes([AllowAny]) @permission_classes([AllowAny])
@ -223,7 +206,6 @@ def logout_view(request):
return JsonResponse({'detail': 'Successfully logged out.'}) return JsonResponse({'detail': 'Successfully logged out.'})
class SavedPointViewset(ModelViewSet): class SavedPointViewset(ModelViewSet):
authentication_classes = [SessionAuthentication, BasicAuthentication] authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsOwner] permission_classes = [IsOwner]
@ -236,8 +218,8 @@ class SavedPointViewset(ModelViewSet):
def perform_create(self, serializer): def perform_create(self, serializer):
serializer.save(user=self.request.user) serializer.save(user=self.request.user)
#class PredictionCreateView(APIView): # class PredictionCreateView(APIView):
#permission_classes = [IsAuthenticated] # permission_classes = [IsAuthenticated]
# class TelemetryPacket(models.Model): # class TelemetryPacket(models.Model):
# id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)