infrasynth-backend-kit/infrasynth/features/views.py
2026-08-28 14:38:47 -05:00

43 lines
1.4 KiB
Python

from rest_framework import mixins, viewsets
from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from .models import FeatureFlag, FeatureFlagOverride
from .serializers import FeatureFlagOverrideSerializer, FeatureFlagSerializer
from .services import FeatureService
class FeatureFlagViewSet(viewsets.ModelViewSet):
queryset = FeatureFlag.objects.all()
serializer_class = FeatureFlagSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
return FeatureFlag.objects.all()
@action(detail=False, methods=["get"], url_path="active")
def active_flags(self, request):
fs = FeatureService()
flags = fs.get_active_flags(user=request.user)
data = {
"flags": flags,
}
return Response(data)
@action(detail=False, methods=["get"], url_path="check/(?P<slug>[^/]+)")
def check_flag(self, request, slug=None):
fs = FeatureService()
enabled = fs.is_enabled(slug, user=request.user)
return Response({"slug": slug, "is_enabled": enabled})
class FeatureFlagOverrideViewSet(
mixins.CreateModelMixin,
mixins.ListModelMixin,
mixins.DestroyModelMixin,
viewsets.GenericViewSet,
):
queryset = FeatureFlagOverride.objects.all()
serializer_class = FeatureFlagOverrideSerializer
permission_classes = [IsAuthenticated]