-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserializers.py
More file actions
145 lines (110 loc) · 4.4 KB
/
serializers.py
File metadata and controls
145 lines (110 loc) · 4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
from rest_framework import serializers
from rest_framework_dataclasses.serializers import DataclassSerializer
from courses.mapping import SWAGGER_API_HINTS
from courses.models import Skill
from courses.typing import (PopupSerializerData,
TaskOfSkillProgressSerializerData,
TaskResponseSerializerData, TaskResultData)
class StepSerializer(serializers.Serializer):
id = serializers.IntegerField()
type = serializers.ChoiceField(choices=SWAGGER_API_HINTS)
is_done = serializers.BooleanField()
ordinal_number = serializers.IntegerField()
class TaskSerializer(serializers.Serializer):
skill_name = serializers.CharField(allow_null=True)
skill_preview = serializers.CharField(allow_null=True)
skill_point_logo = serializers.CharField(allow_null=True)
count = serializers.IntegerField(
help_text="количество вопросов и информационных слайдов у задания"
)
free_access = serializers.BooleanField(allow_null=True)
step_data = StepSerializer(many=True)
class TaskResponseSerializer(DataclassSerializer):
class Meta:
dataclass = TaskResponseSerializerData
class CoursesResponseSerializer(TaskSerializer):
current_level = serializers.IntegerField()
next_level = serializers.IntegerField(required=False, allow_null=True)
progress = serializers.IntegerField()
tasks = TaskResponseSerializer(many=True)
class TaskOfSkillProgressSerializer(DataclassSerializer):
class Meta:
dataclass = TaskOfSkillProgressSerializerData
class SkillsBasicSerializer(serializers.ModelSerializer):
# Access the link field from the related FileModel
file_link = serializers.SerializerMethodField()
# Просьба захардкодить, статичный 1 уровень для всех навыков
quantity_of_levels = serializers.SerializerMethodField()
class Meta:
model = Skill
fields = (
"id",
"name",
"who_created",
"file_link",
"quantity_of_levels",
"description",
"free_access",
)
def get_quantity_of_levels(self, obj) -> int:
# Просьба захардкодить, статичный 1 уровень для всех навыков
return 1
def get_file_link(self, obj):
if obj.file and obj.file.link:
return obj.file.link
return None
class SkillsDoneSerializer(SkillsBasicSerializer):
is_done = serializers.BooleanField()
class Meta:
model = Skill
fields = (
"id",
"name",
"who_created",
"file_link",
"quantity_of_levels",
"description",
"free_access",
"is_done",
)
class SkillNameAndLogoSerializer(serializers.ModelSerializer):
file_link = serializers.URLField(source="file.link", default=None)
class Meta:
model = Skill
fields = ("name", "file_link")
class TaskResult(DataclassSerializer):
class Meta:
dataclass = TaskResultData
class PopupSerializer(DataclassSerializer):
class Meta:
dataclass = PopupSerializerData
IntegerListSerializer = serializers.ListSerializer(
child=serializers.IntegerField(), allow_empty=False
)
class SkillDetailsSerializer(serializers.ModelSerializer):
name = serializers.CharField()
file_link = serializers.SerializerMethodField()
skill_preview = serializers.SerializerMethodField()
skill_point_logo = serializers.SerializerMethodField()
quantity_of_levels = serializers.SerializerMethodField()
class Meta:
model = Skill
fields = (
"id",
"name",
"file_link",
"skill_preview",
"skill_point_logo",
"description",
"quantity_of_levels",
"free_access",
)
def get_quantity_of_levels(self, obj) -> int:
# Просьба захардкодить на 1 уровень везде.
return 1
def get_file_link(self, obj) -> str | None:
return obj.file.link if obj.file else None
def get_skill_preview(self, obj) -> str | None:
return obj.skill_preview.link if obj.skill_preview else None
def get_skill_point_logo(self, obj) -> str | None:
return obj.skill_point_logo.link if obj.skill_point_logo else None