Initial commit: Django backend with Campaign, ContactUs, and Composition APIs
This commit is contained in:
126
api/serializers.py
Normal file
126
api/serializers.py
Normal file
@@ -0,0 +1,126 @@
|
||||
from rest_framework import serializers
|
||||
from .models import ContactUs, Composition, Campaign
|
||||
|
||||
|
||||
class ContactUsSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
Serializer for ContactUs model.
|
||||
"""
|
||||
class Meta:
|
||||
model = ContactUs
|
||||
fields = ['id', 'name', 'email_or_phone', 'description', 'category',
|
||||
'created_at', 'updated_at']
|
||||
read_only_fields = ['id', 'created_at', 'updated_at']
|
||||
|
||||
def validate_email_or_phone(self, value):
|
||||
"""Validate that the field contains either email or phone."""
|
||||
if not value or len(value.strip()) == 0:
|
||||
raise serializers.ValidationError("Email or phone number is required.")
|
||||
return value.strip()
|
||||
|
||||
def validate_name(self, value):
|
||||
"""Validate name field."""
|
||||
if not value or len(value.strip()) == 0:
|
||||
raise serializers.ValidationError("Name is required.")
|
||||
return value.strip()
|
||||
|
||||
def validate_description(self, value):
|
||||
"""Validate description field."""
|
||||
if not value or len(value.strip()) == 0:
|
||||
raise serializers.ValidationError("Description is required.")
|
||||
return value.strip()
|
||||
|
||||
|
||||
class CompositionSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
Serializer for Composition model.
|
||||
"""
|
||||
image_url = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Composition
|
||||
fields = ['id', 'name', 'description', 'image', 'image_url',
|
||||
'created_at', 'updated_at']
|
||||
read_only_fields = ['id', 'created_at', 'updated_at', 'image_url']
|
||||
|
||||
def get_image_url(self, obj):
|
||||
"""Get the full URL of the image."""
|
||||
if obj.image:
|
||||
request = self.context.get('request')
|
||||
if request:
|
||||
return request.build_absolute_uri(obj.image.url)
|
||||
return obj.image.url
|
||||
return None
|
||||
|
||||
def validate_name(self, value):
|
||||
"""Validate name field."""
|
||||
if not value or len(value.strip()) == 0:
|
||||
raise serializers.ValidationError("Name is required.")
|
||||
return value.strip()
|
||||
|
||||
def validate_description(self, value):
|
||||
"""Validate description field."""
|
||||
if not value or len(value.strip()) == 0:
|
||||
raise serializers.ValidationError("Description is required.")
|
||||
return value.strip()
|
||||
|
||||
|
||||
class CampaignSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
Serializer for Campaign model.
|
||||
"""
|
||||
image_url = serializers.SerializerMethodField()
|
||||
is_active = serializers.SerializerMethodField()
|
||||
is_upcoming = serializers.SerializerMethodField()
|
||||
is_ended = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Campaign
|
||||
fields = ['id', 'name', 'description', 'start_time', 'end_time',
|
||||
'image', 'image_url', 'is_active', 'is_upcoming', 'is_ended',
|
||||
'created_at', 'updated_at']
|
||||
read_only_fields = ['id', 'created_at', 'updated_at', 'image_url',
|
||||
'is_active', 'is_upcoming', 'is_ended']
|
||||
|
||||
def get_image_url(self, obj):
|
||||
"""Get the full URL of the image."""
|
||||
if obj.image:
|
||||
request = self.context.get('request')
|
||||
if request:
|
||||
return request.build_absolute_uri(obj.image.url)
|
||||
return obj.image.url
|
||||
return None
|
||||
|
||||
def get_is_active(self, obj):
|
||||
"""Get campaign active status."""
|
||||
return obj.is_active()
|
||||
|
||||
def get_is_upcoming(self, obj):
|
||||
"""Get campaign upcoming status."""
|
||||
return obj.is_upcoming()
|
||||
|
||||
def get_is_ended(self, obj):
|
||||
"""Get campaign ended status."""
|
||||
return obj.is_ended()
|
||||
|
||||
def validate(self, data):
|
||||
"""Validate that end_time is after start_time."""
|
||||
if 'start_time' in data and 'end_time' in data:
|
||||
if data['end_time'] <= data['start_time']:
|
||||
raise serializers.ValidationError({
|
||||
'end_time': 'End time must be after start time.'
|
||||
})
|
||||
return data
|
||||
|
||||
def validate_name(self, value):
|
||||
"""Validate name field."""
|
||||
if not value or len(value.strip()) == 0:
|
||||
raise serializers.ValidationError("Name is required.")
|
||||
return value.strip()
|
||||
|
||||
def validate_description(self, value):
|
||||
"""Validate description field."""
|
||||
if not value or len(value.strip()) == 0:
|
||||
raise serializers.ValidationError("Description is required.")
|
||||
return value.strip()
|
||||
|
||||
Reference in New Issue
Block a user