mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-01-23 10:45:27 +00:00
54 lines
2 KiB
Python
54 lines
2 KiB
Python
# core/api_views.py
|
|
|
|
from rest_framework import viewsets, status
|
|
from rest_framework.response import Response
|
|
from django.shortcuts import get_object_or_404
|
|
from .models import UserAgent, StreamProfile, CoreSettings
|
|
from .serializers import UserAgentSerializer, StreamProfileSerializer, CoreSettingsSerializer
|
|
from rest_framework.permissions import IsAuthenticated
|
|
|
|
class UserAgentViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows user agents to be viewed, created, edited, or deleted.
|
|
"""
|
|
queryset = UserAgent.objects.all()
|
|
serializer_class = UserAgentSerializer
|
|
|
|
class StreamProfileViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows stream profiles to be viewed, created, edited, or deleted.
|
|
"""
|
|
queryset = StreamProfile.objects.all()
|
|
serializer_class = StreamProfileSerializer
|
|
|
|
class CoreSettingsViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint for editing core settings.
|
|
This is treated as a singleton: only one instance should exist.
|
|
"""
|
|
queryset = CoreSettings.objects.all()
|
|
serializer_class = CoreSettingsSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
if CoreSettings.objects.exists():
|
|
return Response(
|
|
{"detail": "Core settings already exist. Use PUT to update."},
|
|
status=status.HTTP_400_BAD_REQUEST
|
|
)
|
|
return super().create(request, *args, **kwargs)
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
# Always return the singleton instance (creating it if needed)
|
|
settings_instance, created = CoreSettings.objects.get_or_create(pk=1)
|
|
serializer = self.get_serializer(settings_instance)
|
|
return Response([serializer.data]) # Return as a list for DRF router compatibility
|
|
|
|
def retrieve(self, request, *args, **kwargs):
|
|
# Retrieve the singleton instance
|
|
settings_instance = get_object_or_404(CoreSettings, pk=1)
|
|
serializer = self.get_serializer(settings_instance)
|
|
return Response(serializer.data)
|
|
|
|
|
|
|