first commit
This commit is contained in:
69
api/serializers.py
Normal file
69
api/serializers.py
Normal file
@@ -0,0 +1,69 @@
|
||||
from rest_framework import serializers
|
||||
from monitor.models import BitcoinPrice, MarketAnalysis
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
class BitcoinPriceSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = BitcoinPrice
|
||||
fields = ['id', 'timestamp', 'price_usd', 'volume', 'market_cap']
|
||||
|
||||
def to_representation(self, instance):
|
||||
# Convert Decimal to float for JSON
|
||||
data = super().to_representation(instance)
|
||||
data['price_usd'] = float(data['price_usd'])
|
||||
if data['volume']:
|
||||
data['volume'] = float(data['volume'])
|
||||
if data['market_cap']:
|
||||
data['market_cap'] = float(data['market_cap'])
|
||||
return data
|
||||
|
||||
|
||||
class MarketAnalysisSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = MarketAnalysis
|
||||
fields = ['id', 'timestamp', 'period', 'current_price', 'average_price',
|
||||
'min_price', 'max_price', 'status', 'threshold_percent',
|
||||
'lower_threshold', 'upper_threshold', 'is_event', 'event_type']
|
||||
|
||||
def to_representation(self, instance):
|
||||
# Convert Decimal to float for JSON
|
||||
data = super().to_representation(instance)
|
||||
decimal_fields = ['current_price', 'average_price', 'min_price', 'max_price',
|
||||
'threshold_percent', 'lower_threshold', 'upper_threshold']
|
||||
for field in decimal_fields:
|
||||
if field in data and data[field]:
|
||||
data[field] = float(data[field])
|
||||
return data
|
||||
|
||||
|
||||
class StatusResponseSerializer(serializers.Serializer):
|
||||
"""Serializer for status API endpoint."""
|
||||
current_price = serializers.FloatField()
|
||||
current_status = serializers.CharField()
|
||||
yearly_average = serializers.FloatField()
|
||||
yearly_min = serializers.FloatField()
|
||||
yearly_max = serializers.FloatField()
|
||||
threshold_percent = serializers.FloatField()
|
||||
lower_threshold = serializers.FloatField()
|
||||
upper_threshold = serializers.FloatField()
|
||||
last_yearly_update = serializers.DateTimeField(allow_null=True)
|
||||
last_hourly_update = serializers.DateTimeField(allow_null=True)
|
||||
stale_yearly = serializers.BooleanField()
|
||||
stale_hourly = serializers.BooleanField()
|
||||
fetch_error = serializers.CharField(allow_null=True, allow_blank=True)
|
||||
|
||||
|
||||
class ChartDataSerializer(serializers.Serializer):
|
||||
"""Serializer for chart data API endpoint."""
|
||||
timestamps = serializers.ListField(child=serializers.DateTimeField())
|
||||
prices = serializers.ListField(child=serializers.FloatField())
|
||||
events = MarketAnalysisSerializer(many=True)
|
||||
threshold_percent = serializers.FloatField()
|
||||
|
||||
|
||||
class HealthCheckSerializer(serializers.Serializer):
|
||||
"""Serializer for health check endpoint."""
|
||||
status = serializers.CharField()
|
||||
timestamp = serializers.DateTimeField()
|
||||
checks = serializers.DictField()
|
||||
Reference in New Issue
Block a user