139 lines
4.7 KiB
Python
139 lines
4.7 KiB
Python
"""
|
|
Serializers for analytics models.
|
|
"""
|
|
from rest_framework import serializers
|
|
from .models import (
|
|
Broker, Developer, Project, Land, Transaction, Valuation, Rent,
|
|
Forecast, MarketTrend
|
|
)
|
|
|
|
|
|
class BrokerSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Broker model."""
|
|
class Meta:
|
|
model = Broker
|
|
fields = '__all__'
|
|
|
|
|
|
class DeveloperSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Developer model."""
|
|
class Meta:
|
|
model = Developer
|
|
fields = '__all__'
|
|
|
|
|
|
class ProjectSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Project model."""
|
|
developer_name = serializers.CharField(source='developer.developer_name_en', read_only=True)
|
|
|
|
class Meta:
|
|
model = Project
|
|
fields = '__all__'
|
|
|
|
|
|
class LandSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Land model."""
|
|
project_name = serializers.CharField(source='project.project_name_en', read_only=True)
|
|
|
|
class Meta:
|
|
model = Land
|
|
fields = '__all__'
|
|
|
|
|
|
class TransactionSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Transaction model."""
|
|
project_name = serializers.CharField(source='project.project_name_en', read_only=True)
|
|
price_per_sqft = serializers.ReadOnlyField()
|
|
|
|
class Meta:
|
|
model = Transaction
|
|
fields = '__all__'
|
|
|
|
|
|
class ValuationSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Valuation model."""
|
|
class Meta:
|
|
model = Valuation
|
|
fields = '__all__'
|
|
|
|
|
|
class RentSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Rent model."""
|
|
project_name = serializers.CharField(source='project.project_name_en', read_only=True)
|
|
rent_per_sqft = serializers.ReadOnlyField()
|
|
|
|
class Meta:
|
|
model = Rent
|
|
fields = '__all__'
|
|
|
|
|
|
class ForecastSerializer(serializers.ModelSerializer):
|
|
"""Serializer for Forecast model."""
|
|
class Meta:
|
|
model = Forecast
|
|
fields = '__all__'
|
|
|
|
|
|
class MarketTrendSerializer(serializers.ModelSerializer):
|
|
"""Serializer for MarketTrend model."""
|
|
class Meta:
|
|
model = MarketTrend
|
|
fields = '__all__'
|
|
|
|
|
|
class TransactionSummarySerializer(serializers.Serializer):
|
|
"""Serializer for transaction summary statistics."""
|
|
total_transactions = serializers.IntegerField()
|
|
total_value = serializers.DecimalField(max_digits=15, decimal_places=2)
|
|
average_price = serializers.DecimalField(max_digits=15, decimal_places=2)
|
|
median_price = serializers.DecimalField(max_digits=15, decimal_places=2)
|
|
average_price_per_sqft = serializers.DecimalField(max_digits=10, decimal_places=2)
|
|
price_range_min = serializers.DecimalField(max_digits=15, decimal_places=2)
|
|
price_range_max = serializers.DecimalField(max_digits=15, decimal_places=2)
|
|
|
|
|
|
class AreaStatsSerializer(serializers.Serializer):
|
|
"""Serializer for area statistics."""
|
|
area = serializers.CharField()
|
|
transaction_count = serializers.IntegerField()
|
|
average_price = serializers.DecimalField(max_digits=15, decimal_places=2)
|
|
average_price_per_sqft = serializers.DecimalField(max_digits=10, decimal_places=2)
|
|
price_trend = serializers.CharField()
|
|
|
|
|
|
class PropertyTypeStatsSerializer(serializers.Serializer):
|
|
"""Serializer for property type statistics."""
|
|
property_type = serializers.CharField()
|
|
transaction_count = serializers.IntegerField()
|
|
average_price = serializers.DecimalField(max_digits=15, decimal_places=2)
|
|
average_price_per_sqft = serializers.DecimalField(max_digits=10, decimal_places=2)
|
|
market_share = serializers.DecimalField(max_digits=5, decimal_places=2)
|
|
|
|
|
|
class TimeSeriesDataSerializer(serializers.Serializer):
|
|
"""Serializer for time series data."""
|
|
date = serializers.DateTimeField()
|
|
value = serializers.DecimalField(max_digits=15, decimal_places=2)
|
|
count = serializers.IntegerField()
|
|
|
|
|
|
class ForecastRequestSerializer(serializers.Serializer):
|
|
"""Serializer for forecast requests."""
|
|
area_en = serializers.CharField(max_length=100)
|
|
property_type = serializers.CharField(max_length=50)
|
|
property_sub_type = serializers.CharField(max_length=50, required=False, allow_blank=True)
|
|
forecast_periods = serializers.IntegerField(default=12, min_value=1, max_value=60)
|
|
confidence_level = serializers.DecimalField(default=0.95, max_digits=3, decimal_places=2)
|
|
|
|
|
|
class MarketAnalysisSerializer(serializers.Serializer):
|
|
"""Serializer for market analysis results."""
|
|
area = serializers.CharField()
|
|
property_type = serializers.CharField()
|
|
analysis_period = serializers.CharField()
|
|
key_metrics = serializers.DictField()
|
|
trends = serializers.ListField()
|
|
recommendations = serializers.ListField()
|
|
forecast_accuracy = serializers.DecimalField(max_digits=5, decimal_places=2, allow_null=True)
|
|
|