This commit is contained in:
parent
f38cf6ce0f
commit
24aa7f6d18
@ -33,6 +33,7 @@ class MyUser(AbstractBaseUser, PermissionsMixin):
|
||||
is_staff = models.BooleanField(_('staff status'), default=False)
|
||||
is_active = models.BooleanField(_('active'), default=True)
|
||||
company_name = models.CharField(_('company name'), max_length=100)
|
||||
is_company = models.BooleanField(_('company'), default=False)
|
||||
|
||||
objects = MyUserManager()
|
||||
USERNAME_FIELD = 'username'
|
||||
|
||||
@ -7,30 +7,34 @@ from datetime import timedelta
|
||||
|
||||
from .helpers import rename_file
|
||||
|
||||
class JobListing(models.Model):
|
||||
class JobOffer(models.Model):
|
||||
|
||||
posting_options = [
|
||||
('M', 'Minimal'),
|
||||
('S', 'Standard'),
|
||||
('P', 'Premium'),
|
||||
]
|
||||
|
||||
status_choices = [
|
||||
('A', 'Aktywna'),
|
||||
('C', 'Zakończona'),
|
||||
('W', 'Oczekująca na sprawdzenie'),
|
||||
('R', 'Zarchiwizowana'),
|
||||
]
|
||||
|
||||
paid_status = [
|
||||
('P', 'Oplacona'),
|
||||
('N', 'Nieoplacona'),
|
||||
('D', 'Inny status')
|
||||
]
|
||||
|
||||
posting_option = models.CharField(max_length=1, choices=posting_options)
|
||||
company_name = models.CharField(max_length=255)
|
||||
name = models.CharField(max_length=255)
|
||||
content = models.TextField()
|
||||
minsalary = models.IntegerField()
|
||||
maxsalary = models.IntegerField()
|
||||
requiresalary = models.BooleanField(null=True, default=False)
|
||||
min_salary = models.IntegerField()
|
||||
max_salary = models.IntegerField()
|
||||
require_salary = models.BooleanField(null=True, default=False)
|
||||
webpage = models.CharField(max_length=255)
|
||||
localization = models.CharField(max_length=255)
|
||||
vat_number = models.CharField(max_length=10)
|
||||
|
||||
@ -1,25 +1,26 @@
|
||||
from rest_framework import serializers
|
||||
from jobposting.models import JobListing, CompanyLogo, Skill
|
||||
from jobposting.models import JobOffer, CompanyLogo, Skill
|
||||
from core.models import MyUser, AnonymousUserData
|
||||
|
||||
|
||||
class MyUserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = MyUser
|
||||
fields = ['id', 'email', 'first_name', 'last_name']
|
||||
|
||||
|
||||
class AnonymousUserDataSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = AnonymousUserData
|
||||
fields = ['id', 'contact_email', 'first_name', 'last_name']
|
||||
|
||||
|
||||
|
||||
class JobListingSerializer(serializers.ModelSerializer):
|
||||
class JobOfferSerializer(serializers.ModelSerializer):
|
||||
created_by = MyUserSerializer(read_only=True)
|
||||
anonymous_user_data = AnonymousUserDataSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = JobListing
|
||||
model = JobOffer
|
||||
fields = [
|
||||
'id', 'posting_option',
|
||||
'company_name', 'name', 'content', 'minsalary', 'maxsalary',
|
||||
@ -30,12 +31,20 @@ class JobListingSerializer(serializers.ModelSerializer):
|
||||
'category', 'webpage', 'image', 'requiresalary', 'vat_number'
|
||||
]
|
||||
|
||||
|
||||
class CompanyLogoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = CompanyLogo
|
||||
fields = ['id', 'company_name','company_logo']
|
||||
|
||||
|
||||
class SkillSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Skill
|
||||
fields = ['id', 'skill_name']
|
||||
|
||||
class SlimJobOffersSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = JobOffer
|
||||
fields = ['id', 'company_name', 'name', 'minsalary', 'maxsalary',
|
||||
'localization', 'image', 'posting_option', 'category', ]
|
||||
@ -5,14 +5,18 @@ from jobposting import views
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register(r'users', views.MyUserViewSet)
|
||||
router.register(r'joblistings', views.JobListingViewSet)
|
||||
router.register(r'joblistings', views.JobOfferViewSet)
|
||||
router.register(r'companylogo', views.CompanyLogoViewSet)
|
||||
router.register(r'skills', views.SkillViewset)
|
||||
|
||||
app_name = 'jobposting'
|
||||
|
||||
# Twoje urlpatterns
|
||||
urlpatterns = [
|
||||
# ...
|
||||
path('', include(router.urls)),
|
||||
path('', include(router.urls)), # test only
|
||||
path('skill/', views.SkillMainView.as_view(), name='skill-list'),
|
||||
path('skill/<int:pk>', views.SkillMainView.as_view(), name='skill-list'),
|
||||
path('joboffers/<int:pk>/', views.JobOfferDetailView.as_view(),
|
||||
name='joboffer-detail'),
|
||||
path('joboffers_list/', views.JobOfferListView.as_view(),
|
||||
name='joboffer-list'),
|
||||
]
|
||||
@ -1,21 +1,23 @@
|
||||
from rest_framework import viewsets, permissions, authentication
|
||||
from rest_framework.response import Response
|
||||
from jobposting.models import JobListing, CompanyLogo, Skill
|
||||
from jobposting.models import JobOffer, CompanyLogo, Skill
|
||||
from core.models import MyUser, AnonymousUserData
|
||||
from rest_framework import status
|
||||
from jobposting.permissions import ClientCredentialPermission
|
||||
|
||||
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope, OAuth2Authentication
|
||||
from .auth import OAuth2ClientCredentialAuthentication
|
||||
from rest_framework.views import APIView
|
||||
import requests
|
||||
|
||||
from django.conf import settings
|
||||
import base64
|
||||
|
||||
|
||||
|
||||
from jobposting.serializers import (
|
||||
JobListingSerializer,
|
||||
JobOfferSerializer,
|
||||
MyUserSerializer,
|
||||
CompanyLogoSerializer,
|
||||
SkillSerializer
|
||||
SkillSerializer,
|
||||
SlimJobOffersSerializer
|
||||
)
|
||||
|
||||
|
||||
@ -30,11 +32,11 @@ class MyUserViewSet(viewsets.ModelViewSet):
|
||||
# # permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class JobListingViewSet(viewsets.ModelViewSet):
|
||||
class JobOfferViewSet(viewsets.ModelViewSet):
|
||||
# authentication_classes = [OAuth2Authentication, authentication.SessionAuthentication]
|
||||
# permission_classes = [permissions.IsAuthenticated|TokenHasReadWriteScope] # test only
|
||||
queryset = JobListing.objects.all()
|
||||
serializer_class = JobListingSerializer
|
||||
queryset = JobOffer.objects.all()
|
||||
serializer_class = JobOfferSerializer
|
||||
required_scope = ['main']
|
||||
authentication_classes = []
|
||||
permission_classes = []
|
||||
@ -69,6 +71,18 @@ class CompanyLogoViewSet(viewsets.ModelViewSet):
|
||||
permission_classes = []
|
||||
|
||||
|
||||
class JobOfferListView(APIView):
|
||||
authentication_classes = []
|
||||
permission_classes = []
|
||||
|
||||
def get(self, request, format=None):
|
||||
start = request.query_params.get('start', 0)
|
||||
end = request.query_params.get('end', 12)
|
||||
job_offers = JobOffer.objects.all()[start:end]
|
||||
serializer = SlimJobOffersSerializer(job_offers, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
class SkillViewset(viewsets.ModelViewSet):
|
||||
# authentication_classes = [OAuth2Authentication, authentication.SessionAuthentication]
|
||||
# permission_classes = [permissions.IsAuthenticated|TokenHasReadWriteScope]
|
||||
@ -79,32 +93,93 @@ class SkillViewset(viewsets.ModelViewSet):
|
||||
permission_classes = []
|
||||
|
||||
|
||||
class JobLisingMainView(APIView):
|
||||
authentication_classes = []
|
||||
permission_classes = []
|
||||
|
||||
def get(self, request, format=None):
|
||||
num_of_offers = request.query_params.get('num_of_offers')
|
||||
try:
|
||||
num_of_offers = int(num_of_offers)
|
||||
except ValueError:
|
||||
return Response({'error': 'Invalid number format'},
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
job_listings = JobListing.objects.all()[:num_of_offers]
|
||||
serializer = JobListingSerializer(job_listings, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
class SkillMainView(APIView):
|
||||
authentication_classes = []
|
||||
permission_classes = []
|
||||
|
||||
def get(self, request, format=None):
|
||||
num_of_skills = request.query_params.get('num_of_skills')
|
||||
def get_object(self, pk):
|
||||
try:
|
||||
num_of_skills = int(num_of_skills)
|
||||
except ValueError:
|
||||
return Response({'error': 'Invalid number format'},
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
skills = Skill.objects.all()[:num_of_skills]
|
||||
serializer = SkillSerializer(skills, many=True)
|
||||
return Skill.objects.get(pk=pk)
|
||||
except Skill.DoesNotExist:
|
||||
return Response({'error': 'Not Found'}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
def get(self, request, pk=None, format=None):
|
||||
if pk:
|
||||
skill = self.get_object(pk)
|
||||
serializer = SkillSerializer(skill)
|
||||
else:
|
||||
skill = Skill.objects.all()
|
||||
serializer = SkillSerializer(skill, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
def post(self, request, format=None):
|
||||
serializer = SkillSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def put(self, request, pk, format=None):
|
||||
skill = self.get_object(pk)
|
||||
serializer = SkillSerializer(skill, data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def delete(self, request, pk, format=None):
|
||||
skill = self.get_object(pk)
|
||||
skill.delete()
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
|
||||
class JobOfferDetailView(APIView):
|
||||
authentication_classes = []
|
||||
permission_classes = []
|
||||
|
||||
def get_object(self, pk):
|
||||
try:
|
||||
return JobOffer.objects.get(pk=pk)
|
||||
except JobOffer.DoesNotExist:
|
||||
return Response({'error': 'Not Found'}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
def get(self, request, pk, format=None):
|
||||
job_listing = self.get_object(pk)
|
||||
serializer = JobOfferSerializer(job_listing,)
|
||||
return Response(serializer.data)
|
||||
|
||||
def put(self, request, pk, format=None):
|
||||
job_offer = self.get_object(pk)
|
||||
serializer = JobOfferSerializer(job_offer, data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def post(self, request, format=None):
|
||||
serializer = JobOfferSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
if request.user.is_authenticated:
|
||||
serializer.save(created_by=request.user)
|
||||
else:
|
||||
# Pobieranie danych z formularza
|
||||
first_name = request.data.get('first_name')
|
||||
last_name = request.data.get('last_name')
|
||||
contact_email = request.data.get('contact_email')
|
||||
|
||||
# Tworzenie rekordu AnonymousUserData
|
||||
anonymous_user_data = AnonymousUserData.objects.create(
|
||||
first_name=first_name,
|
||||
last_name=last_name,
|
||||
contact_email=contact_email
|
||||
)
|
||||
|
||||
serializer.save(anonymous_user_data=anonymous_user_data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def delete(self, request, pk, format=None):
|
||||
job_listing = self.get_object(pk)
|
||||
job_listing.delete()
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user