Files
GNX-WEB/gnx-react/backend/policies/views.py
Iliyan Angelov dd8eb1c7aa update
2025-10-09 00:44:15 +03:00

53 lines
1.7 KiB
Python

from rest_framework import viewsets, status
from rest_framework.decorators import action
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
from .models import Policy, PolicySection
from .serializers import PolicySerializer, PolicyListSerializer
class PolicyViewSet(viewsets.ReadOnlyModelViewSet):
"""
ViewSet for viewing policies.
Provides list and retrieve actions.
"""
queryset = Policy.objects.filter(is_active=True)
def get_serializer_class(self):
if self.action == 'list':
return PolicyListSerializer
return PolicySerializer
def get_queryset(self):
queryset = Policy.objects.filter(is_active=True)
policy_type = self.request.query_params.get('type', None)
if policy_type:
queryset = queryset.filter(type=policy_type)
return queryset
def retrieve(self, request, pk=None):
"""
Retrieve a policy by ID or type
"""
# Try to get by ID first
if pk.isdigit():
policy = get_object_or_404(Policy, pk=pk, is_active=True)
else:
# Otherwise try by type (slug)
policy = get_object_or_404(Policy, type=pk, is_active=True)
serializer = self.get_serializer(policy)
return Response(serializer.data)
@action(detail=False, methods=['get'], url_path='by-type/(?P<policy_type>[^/.]+)')
def by_type(self, request, policy_type=None):
"""
Get a specific policy by its type
"""
policy = get_object_or_404(Policy, type=policy_type, is_active=True)
serializer = PolicySerializer(policy)
return Response(serializer.data)