Skip to content
Snippets Groups Projects
Verified Commit a8fedb7f authored by Andreas Ellewsen's avatar Andreas Ellewsen
Browse files

Simplify Ou View

Separates the queryset and the serialization from each other.
parent d671948d
No related branches found
No related tags found
1 merge request!170Greg 101 verify identity
......@@ -9,10 +9,10 @@ type OuData = {
function useOus(): OuData[] {
const [ous, setOus] = useState<OuData[]>([])
const getOptions = async () => {
const response = await fetch('/api/ui/v1/ous/?format=json')
const response = await fetch('/api/ui/v1/ous?format=json')
if (response.ok) {
const ousJson = await response.json()
setOus(ousJson.ous)
setOus(ousJson)
}
}
......
from rest_framework.serializers import ModelSerializer
from rest_framework.serializers import ModelSerializer, CharField
from greg.api.serializers.ouidentifier import OuIdentifierSerializer
from greg.models import OrganizationalUnit
......@@ -20,3 +21,12 @@ class OrganizationalUnitSerializer(ModelSerializer):
"parent",
"identifiers",
]
class SponsorOrgUnitsSerializer(ModelSerializer):
nb = CharField(source="name_nb")
en = CharField(source="name_en")
class Meta:
model = OrganizationalUnit
fields = ["id", "nb", "en"]
......@@ -8,6 +8,7 @@ from gregui.api.views.invitation import (
InvitationView,
InvitedGuestView,
)
from gregui.api.views.ou import OusViewSet
from gregui.api.views.person import PersonSearchView, PersonView
from gregui.api.views.role import RoleInfoViewSet
from gregui.api.views.roletypes import RoleTypeViewSet
......@@ -16,6 +17,7 @@ from gregui.api.views.unit import UnitsViewSet
router = DefaultRouter(trailing_slash=False)
router.register(r"role", RoleInfoViewSet, basename="role")
router.register(r"identity", IdentityViewSet, basename="identity")
router.register(r"ous", OusViewSet, basename="ou")
urlpatterns = router.urls
urlpatterns += [
......
from django.http import JsonResponse
from rest_framework import mixins
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
from rest_framework.viewsets import GenericViewSet
from greg.api.serializers.organizational_unit import SponsorOrgUnitsSerializer
from greg.models import Sponsor
from greg.permissions import IsSponsor
from gregui.models import GregUserProfile
class OusView(APIView):
class OusViewSet(mixins.ListModelMixin, GenericViewSet):
"""Fetch Ous related to the authenticated sponsor."""
authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated, IsSponsor]
serializer_class = SponsorOrgUnitsSerializer
@staticmethod
# pylint: disable=W0622
def get(request, format=None):
profile = GregUserProfile.objects.get(user=request.user)
sponsor = Sponsor.objects.get(id=profile.sponsor.id)
return JsonResponse(
{
"ous": [
{"id": i.id, "nb": i.name_nb, "en": i.name_en}
for i in sponsor.units.all()
]
}
)
def get_queryset(self):
sponsor = GregUserProfile.objects.get(user=self.request.user).sponsor
return sponsor.units.all()
......@@ -5,7 +5,6 @@ from django.urls import path
from django.urls.resolvers import URLResolver
from gregui.api import urls as api_urls
from gregui.api.views.ou import OusView
from gregui.api.views.userinfo import UserInfoView
from gregui.api.views.person import GuestInfoView
from . import views
......@@ -21,6 +20,5 @@ urlpatterns: List[URLResolver] = [
path("api/ui/v1/testmail/", views.send_test_email, name="api-testmail"),
path("api/ui/v1/whoami/", views.WhoAmIView.as_view(), name="api-whoami"),
path("api/ui/v1/userinfo/", UserInfoView.as_view(), name="api-userinfo"), # type: ignore
path("api/ui/v1/ous/", OusView.as_view()),
path("api/ui/v1/guests/", GuestInfoView.as_view()),
]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment