132 lines
3.5 KiB
Python
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
|
|
|