86 lines
2.8 KiB
Python
86 lines
2.8 KiB
Python
from rest_framework import generics, permissions, status
|
|
from rest_framework.response import Response
|
|
from rest_framework.decorators import api_view
|
|
from .models import Job, Application, JobCategory
|
|
from .serializers import JobSerializer, ApplicationSerializer, JobCategorySerializer
|
|
|
|
|
|
class JobListView(generics.ListCreateAPIView):
|
|
"""
|
|
API view to retrieve list of jobs or create a new job.
|
|
"""
|
|
queryset = Job.objects.all()
|
|
serializer_class = JobSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
queryset = Job.objects.all()
|
|
tenant_id = self.request.query_params.get('tenant', None)
|
|
if tenant_id is not None:
|
|
queryset = queryset.filter(tenant_id=tenant_id)
|
|
return queryset
|
|
|
|
|
|
class JobDetailView(generics.RetrieveUpdateDestroyAPIView):
|
|
"""
|
|
API view to retrieve, update or delete a single job.
|
|
"""
|
|
queryset = Job.objects.all()
|
|
serializer_class = JobSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
|
|
class ApplicationListView(generics.ListCreateAPIView):
|
|
"""
|
|
API view to retrieve list of applications or create a new application.
|
|
"""
|
|
queryset = Application.objects.all()
|
|
serializer_class = ApplicationSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
def perform_create(self, serializer):
|
|
# Set the applicant to the current user
|
|
serializer.save(applicant=self.request.user)
|
|
|
|
|
|
class ApplicationDetailView(generics.RetrieveUpdateDestroyAPIView):
|
|
"""
|
|
API view to retrieve, update or delete a single application.
|
|
"""
|
|
queryset = Application.objects.all()
|
|
serializer_class = ApplicationSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
|
|
class JobCategoryListView(generics.ListCreateAPIView):
|
|
"""
|
|
API view to retrieve list of job categories or create a new category.
|
|
"""
|
|
queryset = JobCategory.objects.all()
|
|
serializer_class = JobCategorySerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
|
|
@api_view(['POST'])
|
|
def apply_to_job(request, job_id):
|
|
"""
|
|
API endpoint to apply to a specific job.
|
|
"""
|
|
try:
|
|
job = Job.objects.get(pk=job_id)
|
|
except Job.DoesNotExist:
|
|
return Response({'error': 'Job not found'}, status=status.HTTP_404_NOT_FOUND)
|
|
|
|
# Check if user has already applied
|
|
if Application.objects.filter(job=job, applicant=request.user).exists():
|
|
return Response({'error': 'Already applied to this job'}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
application = Application.objects.create(
|
|
job=job,
|
|
applicant=request.user,
|
|
cover_letter=request.data.get('cover_letter', ''),
|
|
status='submitted'
|
|
)
|
|
|
|
serializer = ApplicationSerializer(application)
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED) |