adding details
This commit is contained in:
125
backend/api/serializers.py
Normal file
125
backend/api/serializers.py
Normal file
@@ -0,0 +1,125 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import (
|
||||
BlogPost,
|
||||
ContactSubmission,
|
||||
Founder,
|
||||
JobApplication,
|
||||
JobOpening,
|
||||
NewsletterSignup,
|
||||
Product,
|
||||
)
|
||||
|
||||
|
||||
class ProductSerializer(serializers.ModelSerializer):
|
||||
category_label = serializers.CharField(source="get_category_display", read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Product
|
||||
fields = [
|
||||
"slug",
|
||||
"name",
|
||||
"category",
|
||||
"category_label",
|
||||
"tagline",
|
||||
"summary",
|
||||
"description",
|
||||
"benefits",
|
||||
"features",
|
||||
"spec_table",
|
||||
"primary_cta_label",
|
||||
]
|
||||
|
||||
|
||||
class FounderSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Founder
|
||||
fields = ["name", "role", "domain", "bio", "photo_url", "linkedin_url"]
|
||||
|
||||
|
||||
class BlogPostListSerializer(serializers.ModelSerializer):
|
||||
category_label = serializers.CharField(source="get_category_display", read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = BlogPost
|
||||
fields = [
|
||||
"slug",
|
||||
"title",
|
||||
"excerpt",
|
||||
"category",
|
||||
"category_label",
|
||||
"author_name",
|
||||
"read_time_minutes",
|
||||
"cover_image_url",
|
||||
"published_at",
|
||||
]
|
||||
|
||||
|
||||
class BlogPostDetailSerializer(BlogPostListSerializer):
|
||||
class Meta(BlogPostListSerializer.Meta):
|
||||
fields = BlogPostListSerializer.Meta.fields + ["body"]
|
||||
|
||||
|
||||
class JobOpeningSerializer(serializers.ModelSerializer):
|
||||
location_label = serializers.CharField(source="get_location_display", read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = JobOpening
|
||||
fields = [
|
||||
"slug",
|
||||
"title",
|
||||
"location",
|
||||
"location_label",
|
||||
"employment_type",
|
||||
"description",
|
||||
"posted_at",
|
||||
]
|
||||
|
||||
|
||||
class ContactSubmissionSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ContactSubmission
|
||||
fields = [
|
||||
"name",
|
||||
"email",
|
||||
"company",
|
||||
"role",
|
||||
"country",
|
||||
"interest",
|
||||
"message",
|
||||
"referrer",
|
||||
]
|
||||
extra_kwargs = {
|
||||
"name": {"required": True, "allow_blank": False},
|
||||
"email": {"required": True},
|
||||
"message": {"required": True, "allow_blank": False},
|
||||
}
|
||||
|
||||
def validate_message(self, value: str) -> str:
|
||||
if len(value.strip()) < 10:
|
||||
raise serializers.ValidationError(
|
||||
"Please write a few words about what you're looking for."
|
||||
)
|
||||
return value.strip()
|
||||
|
||||
|
||||
class NewsletterSignupSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = NewsletterSignup
|
||||
fields = ["email", "source"]
|
||||
|
||||
def create(self, validated_data):
|
||||
email = validated_data["email"].lower().strip()
|
||||
obj, _ = NewsletterSignup.objects.get_or_create(
|
||||
email=email,
|
||||
defaults={"source": validated_data.get("source", "")},
|
||||
)
|
||||
return obj
|
||||
|
||||
|
||||
class JobApplicationSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = JobApplication
|
||||
fields = ["name", "email", "role_applied_for", "portfolio_url", "message", "cv"]
|
||||
Reference in New Issue
Block a user