Skip to content
Snippets Groups Projects
Commit 7178c5f3 authored by florimondmanca's avatar florimondmanca
Browse files

add edition documents endpoint

parent 4242721e
No related branches found
No related tags found
No related merge requests found
......@@ -4,7 +4,8 @@ from django.db import transaction
from rest_framework import serializers
from core.fields import MarkdownField
from dynamicforms.serializers import FormDetailSerializer, FormEntrySerializer
from dynamicforms.serializers import (FileSerializer, FormDetailSerializer,
FormEntrySerializer)
from profiles.serializers import TutorSerializer
from users.fields import UserField
from users.serializers import UserSerializer
......@@ -144,6 +145,18 @@ class EditionDetailSerializer(EditionListSerializer):
edition_form = EditionFormDetailSerializer()
class EditionDocumentsSerializer(serializers.ModelSerializer):
"""Serializer for information about an edition form's documents."""
recipient = TutorSerializer(source='edition_form.recipient')
deadline = serializers.DateField(source='edition_form.deadline')
files = FileSerializer(many=True, source='edition_form.form.files')
class Meta: # noqa
model = Edition
fields = ('recipient', 'deadline', 'files')
class ProjectDetailSerializer(ProjectSerializer):
"""Detail serializer for project objects."""
......
"""Projects views."""
from django.core.exceptions import ObjectDoesNotExist
from django.shortcuts import redirect
from django.utils.timezone import now
from django.core.exceptions import ObjectDoesNotExist
from django_filters import rest_framework as filters
from django_filters.rest_framework.backends import DjangoFilterBackend
from rest_framework import mixins, permissions, viewsets, status
from rest_framework import mixins, permissions, status, viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
......@@ -14,7 +14,7 @@ from dynamicforms.serializers import FormEntrySerializer
from .models import Edition, Participation, Project
from .serializers import (EditionDetailSerializer, EditionListSerializer,
ParticipationSerializer, ProjectDetailSerializer,
ProjectSerializer)
ProjectSerializer, EditionDocumentsSerializer)
class ProjectViewSet(viewsets.ReadOnlyModelViewSet):
......@@ -268,7 +268,7 @@ class EditionViewSet(viewsets.ReadOnlyModelViewSet):
@action(methods=['get'], detail=True)
def form(self, request, pk=None):
"""Return the edition's form.
"""Return an edition's form.
If the edition does not have a form,
returns a `404 Not Found` error response.
......@@ -282,10 +282,64 @@ class EditionViewSet(viewsets.ReadOnlyModelViewSet):
form = edition.edition_form.form
except ObjectDoesNotExist:
return Response(
{'detail': 'No form set on this edition.'}, status=404)
{'detail': 'No form set on this edition.'},
status=status.HTTP_404_NOT_FOUND)
else:
return redirect('api:form-detail', str(form.pk))
@action(methods=['get'], detail=True)
def documents(self, request, pk=None):
"""Return list of files attached an edition's form.
The recipient of the documents and the registration deadline
are returned as well.
### Example response
{
"recipient": {
"user": {
"id": 3,
"email": "john.doe@example.com",
"profile_type": null,
"first_name": "John",
"last_name": "Doe",
"gender": null,
"phone_number": "+33 6 12 34 56 78",
"date_of_birth": null,
"url": "http://localhost:8000/api/users/3/"
},
"address": {
"line1": "Rue de Rivoli",
"line2": "",
"post_code": "75001",
"city": "Paris",
"country": {
"code": "FR",
"name": "France"
}
},
"promotion": 2020,
"tutoring_groups": [1],
"url": "http://localhost:8000/api/tutors/1/"
},
"deadline": "2018-07-29",
"files": [
{
"id": 3,
"name": "Autorisation parentale",
"file": "http://...",
"form": 4
}
]
}
"""
edition = self.get_object()
serializer = EditionDocumentsSerializer(
edition, context={'request': request})
data = serializer.data
return Response(data)
class ParticipationViewSet(mixins.CreateModelMixin,
viewsets.ReadOnlyModelViewSet):
......@@ -373,4 +427,4 @@ class ParticipationViewSet(mixins.CreateModelMixin,
participation = self.get_object()
serializer = FormEntrySerializer(participation.entry)
data = serializer.data
return Response(data, status=status.HTTP_200_OK)
return Response(data)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment