Skip to content

Commit

Permalink
Merge pull request #27 from Tenth-Team/amb
Browse files Browse the repository at this point in the history
serializers for ambassador
  • Loading branch information
ragimov700 authored Mar 2, 2024
2 parents 9ee3f56 + 28d81ee commit 99f2efe
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 10 deletions.
51 changes: 44 additions & 7 deletions backend/api/v1/serializers.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,36 @@
from rest_framework import serializers

from ambassadors.choices import CONTENT_STATUS_CHOICES
from ambassadors.models import (Ambassador, AmbassadorGoal, Content,
TrainingProgram)

from .utils import format_telegram_username

from ambassadors.models import (
Ambassador,
AmbassadorGoal,
Content,
TrainingProgram,
)

from .utlis import format_telegram_username
from .utils import format_telegram_username


class TrainingProgramSerializer(serializers.ModelSerializer):
"""
Сериализатор для программ обучения.
"""

class Meta:
model = TrainingProgram
fields = ('id', 'name')


class AmbassadorGoalSerializer(serializers.ModelSerializer):
"""
Сериализатор для целей амбассадорства.
"""

class Meta:
model = AmbassadorGoal
fields = ('id', 'name')


class ChoiceField(serializers.ChoiceField):
"""
Поле для обработки выборочных данных,
Expand Down Expand Up @@ -95,7 +104,10 @@ def validate_telegram(self, value):
return format_telegram_username(value)


class AmbassadorSerializer(serializers.ModelSerializer):
class YandexFormAmbassadorCreateSerializer(serializers.ModelSerializer):
"""
Сериализатор для создания амбассадоров из Яндекс форм.
"""
ya_edu = serializers.CharField()
amb_goals = serializers.CharField()

Expand All @@ -122,16 +134,41 @@ def to_internal_value(self, data):
ya_edu_name = data.get('ya_edu')
amb_goals = data.get('amb_goals')
telegram = data.get('telegram')

goals = []
for goal in amb_goals.split(', '):
goal, created = AmbassadorGoal.objects.get_or_create(
name=goal
)
goals.append(goal)

training_program, created = TrainingProgram.objects.get_or_create(
name=ya_edu_name
)

internal_value['ya_edu'] = training_program
internal_value['amb_goals'] = goals
internal_value['telegram'] = format_telegram_username(telegram)
return internal_value


class AmbassadorCreateSerializer(serializers.ModelSerializer):
"""
Сериализатор для создания амбассадоров.
"""

class Meta:
model = Ambassador
fields = '__all__'


class AmbassadorReadSerializer(serializers.ModelSerializer):
"""
Сериализатор для чтения амбассадоров.
"""
ya_edu = TrainingProgramSerializer()
amb_goals = AmbassadorGoalSerializer(many=True)

class Meta:
model = Ambassador
fields = '__all__'
16 changes: 14 additions & 2 deletions backend/api/v1/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,24 @@
from ambassadors.models import Ambassador, Content

from .filters import ContentStatusFilter
from .serializers import AmbassadorSerializer, ContentSerializer
from .serializers import (
AmbassadorCreateSerializer,
AmbassadorReadSerializer,
ContentSerializer,
YandexFormAmbassadorCreateSerializer,
)


class AmbassadorViewSet(viewsets.ModelViewSet):
queryset = Ambassador.objects.all()
serializer_class = AmbassadorSerializer
serializer_class = AmbassadorCreateSerializer

def get_serializer_class(self):
if self.request.headers.get('X-Source') == 'YandexForm':
return YandexFormAmbassadorCreateSerializer
if self.action == 'list' or self.action == 'retrieve':
return AmbassadorReadSerializer
return super().get_serializer_class()


class ContentViewSet(viewsets.ModelViewSet):
Expand Down
2 changes: 1 addition & 1 deletion backend/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ social-auth-core==4.5.3
sqlparse==0.4.4
urllib3==2.2.1
daphne==4.1.0
django-filter-23.5
django-filter==23.5

0 comments on commit 99f2efe

Please sign in to comment.