32 lines
1.7 KiB
Python
32 lines
1.7 KiB
Python
|
|
from rest_framework import serializers
|
||
|
|
|
||
|
|
|
||
|
|
class TelemetryEventSerializer(serializers.Serializer):
|
||
|
|
"""یک رویدادِ خام از اپ — نوعاش تعیین میکند کدام فیلدها معنی دارند.
|
||
|
|
عمداً یک سریالایزرِ آزاد (نه یکی برای هر مدل) چون این اندپوینت دستهای
|
||
|
|
(batch) کار میکند و ترکیبِ چند نوع رویداد را با هم میگیرد."""
|
||
|
|
|
||
|
|
type = serializers.ChoiceField(
|
||
|
|
choices=["session_start", "session_end", "page_view", "click", "error"]
|
||
|
|
)
|
||
|
|
at = serializers.DateTimeField()
|
||
|
|
screen = serializers.CharField(max_length=150, required=False, allow_blank=True, default="")
|
||
|
|
duration_seconds = serializers.FloatField(required=False, allow_null=True, default=None)
|
||
|
|
element = serializers.CharField(max_length=150, required=False, allow_blank=True, default="")
|
||
|
|
x = serializers.FloatField(required=False, allow_null=True, default=None)
|
||
|
|
y = serializers.FloatField(required=False, allow_null=True, default=None)
|
||
|
|
message = serializers.CharField(required=False, allow_blank=True, default="")
|
||
|
|
stack = serializers.CharField(required=False, allow_blank=True, default="")
|
||
|
|
|
||
|
|
|
||
|
|
class TelemetryBatchSerializer(serializers.Serializer):
|
||
|
|
session_id = serializers.CharField(max_length=36)
|
||
|
|
platform = serializers.CharField(max_length=30, required=False, allow_blank=True, default="")
|
||
|
|
app_version = serializers.CharField(max_length=30, required=False, allow_blank=True, default="")
|
||
|
|
events = TelemetryEventSerializer(many=True)
|
||
|
|
|
||
|
|
def validate_events(self, value):
|
||
|
|
if not value:
|
||
|
|
raise serializers.ValidationError("حداقل یک رویداد لازم است.")
|
||
|
|
return value
|