126 lines
3.2 KiB
Python
Executable File
126 lines
3.2 KiB
Python
Executable File
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"]
|