Compare commits

...

2 commits

Author SHA1 Message Date
ThePetrovich
433dcef8d4 Merge branch 'main' of https://git.intra.yksa.space/afanasyev.aa/api-drf-1 2025-07-01 22:07:15 +08:00
ThePetrovich
c446ac5a1b add savedpoint views 2025-07-01 22:07:12 +08:00
4 changed files with 59 additions and 5 deletions

View file

@ -6,3 +6,11 @@ class ReadOnlyOrAuthenticated(BasePermission):
request.method in SAFE_METHODS or
request.user and request.user.is_authenticated
)
class IsOwner(BasePermission):
def has_object_permission(self, request, view, obj):
return obj.user == request.user
def has_permission(self, request, view):
return request.user and request.user.is_authenticated

View file

@ -1,5 +1,5 @@
from rest_framework import serializers
from .models import Prediction
from .models import Prediction, SavedPoint, SavedRateProfile, PreditctionTemplate
from datetime import datetime
from .validators import (
validate_custom_curve, rate_clip,
@ -12,7 +12,6 @@ class PredictionSerializer(serializers.ModelSerializer):
fields = ['id', 'created_at', 'updated_at', 'result']
PROFILE_STANDARD = "standard_profile"
PROFILE_FLOAT = "float"
PROFILE_REVERSE = "reverse"
@ -93,4 +92,37 @@ class TelemetryPacketSerializer(serializers.ModelSerializer):
class Meta:
model = TelemetryPacket
fields = ['id', 'timestamp', 'lat', 'lon', 'alt', 'payload']
read_only_fields = ['id']
class SavedPointSerializer(serializers.ModelSerializer):
user = serializers.HiddenField(
default=serializers.CurrentUserDefault()
)
class Meta:
model = SavedPoint
fields = ['user', 'id', 'name', 'lat', 'lon', 'alt']
read_only_fields = ['id']
validators = [
serializers.UniqueTogetherValidator(
queryset=SavedPoint.objects.all(),
fields=['user', 'name'],
message="A saved point with this name already exists for the user."
)
]
class SavedRateProfileSerializer(serializers.ModelSerializer):
class Meta:
model = SavedRateProfile
fields = ['id', 'name', 'rate_profile_data']
read_only_fields = ['id']
class PreditctionTemplateSerializer(serializers.ModelSerializer):
class Meta:
model = PreditctionTemplate
fields = ['id', 'name', 'template_data', 'is_default']
read_only_fields = ['id']

View file

@ -5,6 +5,7 @@ from .views import (PredictionCreateView, PredictionListView,
PredictionHistoryDeleteView,
SessionView,
WhoAmIView,
SavedPointViewset,
get_csrf,
login_view,
logout_view)
@ -18,6 +19,7 @@ urlpatterns = [
path("history/<uuid:pk>/", PredictionHistoryDetailView.as_view(), name='view_history_detail'),
path("history/<uuid:pk>/delete/", PredictionHistoryDeleteView.as_view(), name='delete_history'),
path("<uuid:pk>/telemetry/", TelemetryListCreateView.as_view(), name="create_telemetry"),
path('saved-points/', SavedPointViewset.as_view({'get': 'list', 'post': 'create', 'put': 'update', 'delete': 'destroy'}), name='saved_points'),
path('csrf/', get_csrf, name='api-csrf'),
path('login/', login_view, name='api-login'),
path('logout/', logout_view, name='api-logout'),

View file

@ -1,9 +1,10 @@
from rest_framework import status, generics, permissions
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.viewsets import ModelViewSet
from django.utils import timezone
from .models import Prediction, User
from .serializers import PredictionSerializer, PredictionRequestSerializer, PredictionListSerializer, PredictionDetailSerializer
from .models import Prediction, User, Satellite, SavedPoint, SavedRateProfile, PreditctionTemplate
from .serializers import PredictionSerializer, PredictionRequestSerializer, PredictionListSerializer, PredictionDetailSerializer, SavedPointSerializer, SavedRateProfileSerializer, PreditctionTemplateSerializer
from rest_framework.permissions import IsAuthenticated
import requests
from django.views.decorators.csrf import csrf_exempt
@ -13,7 +14,7 @@ from .services.tawhiri import TawhiriClient
from django.contrib.auth import get_user_model
from .models import Satellite, TelemetryPacket
from .serializers import TelemetryPacketSerializer
from .permissions import ReadOnlyOrAuthenticated
from .permissions import ReadOnlyOrAuthenticated, IsOwner
import time
from django.http import JsonResponse
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
@ -222,6 +223,17 @@ def logout_view(request):
return JsonResponse({'detail': 'Successfully logged out.'})
class SavedPointViewset(ModelViewSet):
authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsOwner]
serializer_class = SavedPointSerializer
pagination_class = None
def get_queryset(self):
return SavedPoint.objects.filter(user=self.request.user)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
#class PredictionCreateView(APIView):
#permission_classes = [IsAuthenticated]