From 428d0072adb08724dc0feea0622e92c881288cd4 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 28 Oct 2020 20:52:53 +0000 Subject: [PATCH] update member and job api --- fet2020/fet2020/urls.py | 5 ++- fet2020/members/models.py | 6 ++++ fet2020/members/serializers.py | 59 +++++++++++++++++++++++++++++++++- fet2020/members/views.py | 30 +++++++++++++++-- fet2020/posts/models.py | 50 +++++++++++++++++++++------- 5 files changed, 135 insertions(+), 15 deletions(-) diff --git a/fet2020/fet2020/urls.py b/fet2020/fet2020/urls.py index 32459f82..f447a461 100644 --- a/fet2020/fet2020/urls.py +++ b/fet2020/fet2020/urls.py @@ -20,12 +20,15 @@ from django.conf import settings from django.views.generic import RedirectView from . import views from posts.views import PostViewSet -from members.views import MemberViewSet +from members.views import MemberViewSet, JobViewSet, JobGroupViewSet, JobMemberViewSet from rest_framework import routers router = routers.DefaultRouter() router.register(r'posts', PostViewSet) router.register(r'members', MemberViewSet) +router.register(r'jobgroups', JobGroupViewSet) +router.register(r'jobs', JobViewSet) +router.register(r'jobmembers', JobMemberViewSet) urlpatterns = [ path('posts/', include('posts.urls')), diff --git a/fet2020/members/models.py b/fet2020/members/models.py index 485ee602..546fc11a 100644 --- a/fet2020/members/models.py +++ b/fet2020/members/models.py @@ -119,6 +119,7 @@ class Member(models.Model): date_created = models.DateTimeField(auto_now_add=True) # Managers + objects = models.Manager() all_members = MemberManager() class Meta: @@ -149,6 +150,7 @@ class JobGroup(models.Model): is_pinned = models.BooleanField(verbose_name="ANGEHEFTET", default=False) # Managers + objects = models.Manager() all_jobgroups = JobGroupManager() class Meta: @@ -177,6 +179,9 @@ class Job(models.Model): verbose_name="Job Gruppe", ) + # Managers + objects = models.Manager() + class Meta: verbose_name = "Tätigkeit" verbose_name_plural = "Tätigkeiten" @@ -216,6 +221,7 @@ class JobMember(models.Model): job_role = models.CharField(max_length=2, choices=JobRole.choices, default=JobRole.MEMBER) + objects = models.Manager() members = JobMemberManager() active_member = ActiveJobMemberManager() inactive_member = InactiveJobMemberManager() diff --git a/fet2020/members/serializers.py b/fet2020/members/serializers.py index 2dbdc43b..1d2d8665 100644 --- a/fet2020/members/serializers.py +++ b/fet2020/members/serializers.py @@ -1,4 +1,4 @@ -from .models import Member +from .models import Member, Job, JobGroup, JobMember from rest_framework import serializers @@ -14,4 +14,61 @@ class MemberSerializer(serializers.HyperlinkedModelSerializer): 'role', 'description', 'image', + 'birthday', ] + +class JobGroupSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = JobGroup + fields = [ + 'name', + 'shortterm', + ] + +class JobSerializer(serializers.HyperlinkedModelSerializer): + job_group = JobGroupSerializer() + + class Meta: + model = Job + fields = [ + 'name', + 'shortterm', + 'job_group', + ] + + def create(self, validated_data): + job_groups_data = validated_data.pop('job_group') + + jobgroup = JobGroup.objects.get(**job_groups_data) + if not jobgroup: + jobgroup = JobGroup.objects.create(**job_groups_data) + + job = Job.objects.create(job_group=jobgroup, **validated_data) + + return job + +class JobMemberSerializer(serializers.HyperlinkedModelSerializer): + member = MemberSerializer() + job = JobSerializer() + + class Meta: + model = JobMember + fields = [ + 'job_start', + 'job_end', + 'member', + 'job', + ] + + def create(self, validated_data): + member_data = validated_data.pop('member') + print(member_data) + member = Member.objects.get(firstname=member_data['firstname'], surname=member_data['surname']) + + job_data = validated_data.pop('job') + print(job_data) + job = Job.objects.get(name=job_data['name']) + + jobmember = JobMember.objects.create(member=member, job=job, **validated_data) + + return jobmember diff --git a/fet2020/members/views.py b/fet2020/members/views.py index 1d267e55..caf1355b 100644 --- a/fet2020/members/views.py +++ b/fet2020/members/views.py @@ -3,8 +3,8 @@ from django.shortcuts import render from collections import deque -from .models import Member, JobMember, JobGroup -from .serializers import MemberSerializer +from .models import Member, JobMember, JobGroup, Job +from .serializers import MemberSerializer, JobSerializer, JobGroupSerializer, JobMemberSerializer from rest_framework import viewsets #from rest_framework import permissions @@ -103,3 +103,29 @@ class MemberViewSet(viewsets.ModelViewSet): def pre_save(self, obj): obj.image = self.request.FILES.get('image') + + +class JobGroupViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows users to be viewed or edited. + """ + queryset = JobGroup.all_jobgroups.all() + serializer_class = JobGroupSerializer + + lookup_field = 'name' + + +class JobViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows users to be viewed or edited. + """ + queryset = Job.objects.all() + serializer_class = JobSerializer + + +class JobMemberViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows users to be viewed or edited. + """ + queryset = JobMember.objects.all() + serializer_class = JobMemberSerializer diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index 27a54749..7e04c020 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -121,7 +121,11 @@ class Post(models.Model): request_logger.info("AGENDA KEY: %s " % self.agenda_key) request_logger.info("VALUE: %s " % value) if self.agenda_key: - setPadHTML(self.agenda_key, value) + try: + setPadHTML(self.agenda_key, value) + except Exception as e: + request_logger.info("Es konnte kein Pad von der Agenda '{}' erzeugt werden. Error: {}".format(self.agenda_key, e)) + request_logger.info("set etherpad!") return value @@ -132,10 +136,7 @@ class Post(models.Model): try: agenda_key = createPadifNotExists(self.slug + "-agenda") except Exception as e: - raise ValidationError( - _('Die Agenda konnte nicht erstellt werden. Error: %(error)s'), - params={'error': str(e)}, - ) + request_logger.info("Die Agenda konnte von dem Slug '{}' nicht erstellt werden. Error: {}".format(self.slug, e)) return None return agenda_key @@ -147,10 +148,7 @@ class Post(models.Model): try: protocol_key = createPadifNotExists(self.slug + "-protocol") except Exception as e: - raise ValidationError( - _('Das Protokoll konnte nicht erstellt werden. Error: %(error)s'), - params={'error': str(e)}, - ) + request_logger.info("Das Protokoll konnte von dem Slug '{}' nicht erstellt werden. Error: {}".format(self.slug, e)) return None return protocol_key @@ -272,6 +270,36 @@ class FetMeeting(Event): return slug + def __get_agenda_key(self): + if not self.slug: + return None + + try: + agenda_key = createPadifNotExists(self.slug + "-agenda") + except Exception as e: + raise ValidationError( + _('Die Agenda konnte nicht erstellt werden. Error: %(error)s'), + params={'error': str(e)}, + ) + return None + + return agenda_key + + def __get_protocol_key(self): + if not self.slug: + return None + + try: + protocol_key = createPadifNotExists(self.slug + "-protocol") + except Exception as e: + raise ValidationError( + _('Das Protokoll konnte nicht erstellt werden. Error: %(error)s'), + params={'error': str(e)}, + ) + return None + + return protocol_key + def clean(self): if self.event_start is None: raise ValidationError(_('Das Datum des Events fehlt.')) @@ -282,10 +310,10 @@ class FetMeeting(Event): self.slug = self.__get_slug() if self.has_agenda: - self.agenda_key = self.get_agenda_key() + self.agenda_key = self.__get_agenda_key() if self.has_protocol: - self.protocol_key = self.get_protocol_key() + self.protocol_key = self.__get_protocol_key() def save(self, *args, **kwargs): self.title = "Fachschaftssitzung"