Files
GNX-WEB/backEnd/career/serializers.py
Iliyan Angelov 366f28677a update
2025-11-24 03:52:08 +02:00

132 lines
3.5 KiB
Python

from rest_framework import serializers
from .models import JobPosition, JobApplication
class JobPositionListSerializer(serializers.ModelSerializer):
"""Serializer for job position list view"""
class Meta:
model = JobPosition
fields = [
'id',
'title',
'slug',
'department',
'employment_type',
'location_type',
'location',
'open_positions',
'short_description',
'salary_min',
'salary_max',
'salary_currency',
'salary_period',
'posted_date',
'status',
'featured',
]
class JobPositionDetailSerializer(serializers.ModelSerializer):
"""Serializer for job position detail view"""
class Meta:
model = JobPosition
fields = [
'id',
'title',
'slug',
'department',
'employment_type',
'location_type',
'location',
'open_positions',
'experience_required',
'salary_min',
'salary_max',
'salary_currency',
'salary_period',
'salary_additional',
'short_description',
'about_role',
'requirements',
'responsibilities',
'qualifications',
'bonus_points',
'benefits',
'start_date',
'posted_date',
'updated_date',
'deadline',
'status',
]
class JobApplicationSerializer(serializers.ModelSerializer):
"""Serializer for job application submission"""
job_title = serializers.CharField(source='job.title', read_only=True)
class Meta:
model = JobApplication
fields = [
'id',
'job',
'job_title',
'first_name',
'last_name',
'email',
'phone',
'current_position',
'current_company',
'years_of_experience',
'cover_letter',
'resume',
'portfolio_url',
'linkedin_url',
'github_url',
'website_url',
'available_from',
'notice_period',
'expected_salary',
'salary_currency',
'consent',
'applied_date',
]
read_only_fields = ['id', 'applied_date', 'job_title']
def validate_resume(self, value):
"""Validate resume file size"""
if value.size > 5 * 1024 * 1024: # 5MB
raise serializers.ValidationError("Resume file size cannot exceed 5MB")
return value
def validate_consent(self, value):
"""Ensure user has given consent"""
if not value:
raise serializers.ValidationError("You must consent to data processing to apply")
return value
class JobApplicationListSerializer(serializers.ModelSerializer):
"""Serializer for listing job applications (admin view)"""
job_title = serializers.CharField(source='job.title', read_only=True)
full_name = serializers.CharField(read_only=True)
class Meta:
model = JobApplication
fields = [
'id',
'job',
'job_title',
'full_name',
'email',
'phone',
'status',
'applied_date',
'resume',
]
read_only_fields = fields