furry/mobile/serializers.py

205 lines
6.6 KiB
Python

"""
Mobile API Serializers für React Native
"""
from rest_framework import serializers
from .models import MobileDevice, PushNotification, OfflineSync, MobileAnalytics, MobileSession, MobileError, MobileCache
class MobileDeviceSerializer(serializers.ModelSerializer):
"""Mobile Device Serializer"""
class Meta:
model = MobileDevice
fields = [
'id', 'device_token', 'device_type', 'device_name',
'device_model', 'os_version', 'app_version', 'is_active',
'last_seen', 'created_at'
]
read_only_fields = ['id', 'created_at']
class PushNotificationSerializer(serializers.ModelSerializer):
"""Push Notification Serializer"""
class Meta:
model = PushNotification
fields = [
'id', 'notification_type', 'title', 'message', 'data',
'sent_at', 'delivered_at', 'opened_at', 'is_sent',
'is_delivered', 'is_opened'
]
read_only_fields = ['id', 'sent_at']
class OfflineSyncSerializer(serializers.ModelSerializer):
"""Offline Sync Serializer"""
class Meta:
model = OfflineSync
fields = [
'id', 'sync_type', 'data', 'status', 'error_message',
'created_at', 'synced_at'
]
read_only_fields = ['id', 'created_at']
class MobileAnalyticsSerializer(serializers.ModelSerializer):
"""Mobile Analytics Serializer"""
class Meta:
model = MobileAnalytics
fields = [
'id', 'event_type', 'event_data', 'session_id',
'screen_name', 'timestamp'
]
read_only_fields = ['id', 'timestamp']
class MobileSessionSerializer(serializers.ModelSerializer):
"""Mobile Session Serializer"""
class Meta:
model = MobileSession
fields = [
'id', 'session_id', 'started_at', 'ended_at',
'duration', 'is_active'
]
read_only_fields = ['id', 'started_at']
class MobileErrorSerializer(serializers.ModelSerializer):
"""Mobile Error Serializer"""
class Meta:
model = MobileError
fields = [
'id', 'error_level', 'error_type', 'error_message',
'stack_trace', 'app_version', 'os_version', 'device_info',
'created_at', 'is_resolved'
]
read_only_fields = ['id', 'created_at']
class MobileCacheSerializer(serializers.ModelSerializer):
"""Mobile Cache Serializer"""
class Meta:
model = MobileCache
fields = [
'id', 'cache_type', 'cache_key', 'cache_data',
'expires_at', 'created_at', 'updated_at'
]
read_only_fields = ['id', 'created_at', 'updated_at']
# Mobile-optimierte Produkt Serializer
class MobileProductSerializer(serializers.Serializer):
"""Mobile-optimierter Produkt Serializer"""
id = serializers.UUIDField()
name = serializers.CharField()
description = serializers.CharField()
price = serializers.DecimalField(max_digits=10, decimal_places=2)
image_url = serializers.CharField()
category = serializers.CharField()
fursuit_type = serializers.CharField()
featured = serializers.BooleanField()
created_at = serializers.DateTimeField()
# Mobile-spezifische Felder
is_favorite = serializers.BooleanField(default=False)
in_cart = serializers.BooleanField(default=False)
cart_quantity = serializers.IntegerField(default=0)
# Mobile-optimierter Auction Serializer
class MobileAuctionSerializer(serializers.Serializer):
"""Mobile-optimierter Auction Serializer"""
id = serializers.UUIDField()
title = serializers.CharField()
description = serializers.CharField()
fursuit_type = serializers.CharField()
starting_bid = serializers.DecimalField(max_digits=10, decimal_places=2)
current_bid = serializers.DecimalField(max_digits=10, decimal_places=2)
status = serializers.CharField()
end_time = serializers.DateTimeField()
time_remaining = serializers.CharField()
total_bids = serializers.IntegerField()
is_watching = serializers.BooleanField(default=False)
created_at = serializers.DateTimeField()
# Mobile API Response Serializer
class MobileApiResponseSerializer(serializers.Serializer):
"""Standard Mobile API Response"""
success = serializers.BooleanField()
data = serializers.JSONField()
message = serializers.CharField(required=False)
error = serializers.CharField(required=False)
timestamp = serializers.DateTimeField()
# Mobile Push Notification Payload Serializer
class PushNotificationPayloadSerializer(serializers.Serializer):
"""Push Notification Payload für Firebase/APNS"""
notification = serializers.DictField()
data = serializers.DictField()
android = serializers.DictField(required=False)
apns = serializers.DictField(required=False)
webpush = serializers.DictField(required=False)
# Mobile Analytics Event Serializer
class MobileAnalyticsEventSerializer(serializers.Serializer):
"""Mobile Analytics Event"""
event_type = serializers.CharField()
event_data = serializers.DictField()
session_id = serializers.CharField(required=False)
screen_name = serializers.CharField(required=False)
timestamp = serializers.DateTimeField()
device_info = serializers.DictField(required=False)
# Mobile Cache Request Serializer
class MobileCacheRequestSerializer(serializers.Serializer):
"""Mobile Cache Request"""
cache_type = serializers.CharField()
cache_key = serializers.CharField()
data = serializers.DictField()
expires_in = serializers.IntegerField(required=False, default=3600)
# Mobile Session Request Serializer
class MobileSessionRequestSerializer(serializers.Serializer):
"""Mobile Session Request"""
session_id = serializers.CharField()
device_token = serializers.CharField()
app_version = serializers.CharField(required=False)
device_info = serializers.DictField(required=False)
# Mobile Error Report Serializer
class MobileErrorReportSerializer(serializers.Serializer):
"""Mobile Error Report"""
error_level = serializers.ChoiceField(choices=[
('debug', 'Debug'),
('info', 'Info'),
('warning', 'Warning'),
('error', 'Error'),
('critical', 'Critical'),
])
error_type = serializers.CharField()
error_message = serializers.CharField()
stack_trace = serializers.CharField(required=False)
app_version = serializers.CharField(required=False)
os_version = serializers.CharField(required=False)
device_info = serializers.DictField(required=False)
session_id = serializers.CharField(required=False)