Files
shopship/apps/telemetry/api/serializers.py
T
2026-08-31 15:11:52 +03:30

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