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_staff = models.BooleanField(_('staff status'), default=False)
|
||||||
is_active = models.BooleanField(_('active'), default=True)
|
is_active = models.BooleanField(_('active'), default=True)
|
||||||
company_name = models.CharField(_('company name'), max_length=100)
|
company_name = models.CharField(_('company name'), max_length=100)
|
||||||
|
is_company = models.BooleanField(_('company'), default=False)
|
||||||
|
|
||||||
objects = MyUserManager()
|
objects = MyUserManager()
|
||||||
USERNAME_FIELD = 'username'
|
USERNAME_FIELD = 'username'
|
||||||
|
|||||||
@ -7,30 +7,34 @@ from datetime import timedelta
|
|||||||
|
|
||||||
from .helpers import rename_file
|
from .helpers import rename_file
|
||||||
|
|
||||||
class JobListing(models.Model):
|
class JobOffer(models.Model):
|
||||||
|
|
||||||
posting_options = [
|
posting_options = [
|
||||||
('M', 'Minimal'),
|
('M', 'Minimal'),
|
||||||
('S', 'Standard'),
|
('S', 'Standard'),
|
||||||
('P', 'Premium'),
|
('P', 'Premium'),
|
||||||
]
|
]
|
||||||
|
|
||||||
status_choices = [
|
status_choices = [
|
||||||
('A', 'Aktywna'),
|
('A', 'Aktywna'),
|
||||||
('C', 'Zakończona'),
|
('C', 'Zakończona'),
|
||||||
('W', 'Oczekująca na sprawdzenie'),
|
('W', 'Oczekująca na sprawdzenie'),
|
||||||
('R', 'Zarchiwizowana'),
|
('R', 'Zarchiwizowana'),
|
||||||
]
|
]
|
||||||
|
|
||||||
paid_status = [
|
paid_status = [
|
||||||
('P', 'Oplacona'),
|
('P', 'Oplacona'),
|
||||||
('N', 'Nieoplacona'),
|
('N', 'Nieoplacona'),
|
||||||
('D', 'Inny status')
|
('D', 'Inny status')
|
||||||
]
|
]
|
||||||
|
|
||||||
posting_option = models.CharField(max_length=1, choices=posting_options)
|
posting_option = models.CharField(max_length=1, choices=posting_options)
|
||||||
company_name = models.CharField(max_length=255)
|
company_name = models.CharField(max_length=255)
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
minsalary = models.IntegerField()
|
min_salary = models.IntegerField()
|
||||||
maxsalary = models.IntegerField()
|
max_salary = models.IntegerField()
|
||||||
requiresalary = models.BooleanField(null=True, default=False)
|
require_salary = models.BooleanField(null=True, default=False)
|
||||||
webpage = models.CharField(max_length=255)
|
webpage = models.CharField(max_length=255)
|
||||||
localization = models.CharField(max_length=255)
|
localization = models.CharField(max_length=255)
|
||||||
vat_number = models.CharField(max_length=10)
|
vat_number = models.CharField(max_length=10)
|
||||||
|
|||||||
@ -1,25 +1,26 @@
|
|||||||
from rest_framework import serializers
|
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
|
from core.models import MyUser, AnonymousUserData
|
||||||
|
|
||||||
|
|
||||||
class MyUserSerializer(serializers.ModelSerializer):
|
class MyUserSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MyUser
|
model = MyUser
|
||||||
fields = ['id', 'email', 'first_name', 'last_name']
|
fields = ['id', 'email', 'first_name', 'last_name']
|
||||||
|
|
||||||
|
|
||||||
class AnonymousUserDataSerializer(serializers.ModelSerializer):
|
class AnonymousUserDataSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = AnonymousUserData
|
model = AnonymousUserData
|
||||||
fields = ['id', 'contact_email', 'first_name', 'last_name']
|
fields = ['id', 'contact_email', 'first_name', 'last_name']
|
||||||
|
|
||||||
|
|
||||||
|
class JobOfferSerializer(serializers.ModelSerializer):
|
||||||
class JobListingSerializer(serializers.ModelSerializer):
|
|
||||||
created_by = MyUserSerializer(read_only=True)
|
created_by = MyUserSerializer(read_only=True)
|
||||||
anonymous_user_data = AnonymousUserDataSerializer(read_only=True)
|
anonymous_user_data = AnonymousUserDataSerializer(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = JobListing
|
model = JobOffer
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'posting_option',
|
'id', 'posting_option',
|
||||||
'company_name', 'name', 'content', 'minsalary', 'maxsalary',
|
'company_name', 'name', 'content', 'minsalary', 'maxsalary',
|
||||||
@ -30,12 +31,20 @@ class JobListingSerializer(serializers.ModelSerializer):
|
|||||||
'category', 'webpage', 'image', 'requiresalary', 'vat_number'
|
'category', 'webpage', 'image', 'requiresalary', 'vat_number'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class CompanyLogoSerializer(serializers.ModelSerializer):
|
class CompanyLogoSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CompanyLogo
|
model = CompanyLogo
|
||||||
fields = ['id', 'company_name','company_logo']
|
fields = ['id', 'company_name','company_logo']
|
||||||
|
|
||||||
|
|
||||||
class SkillSerializer(serializers.ModelSerializer):
|
class SkillSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Skill
|
model = Skill
|
||||||
fields = ['id', 'skill_name']
|
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 = DefaultRouter()
|
||||||
router.register(r'users', views.MyUserViewSet)
|
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'companylogo', views.CompanyLogoViewSet)
|
||||||
router.register(r'skills', views.SkillViewset)
|
router.register(r'skills', views.SkillViewset)
|
||||||
|
|
||||||
|
app_name = 'jobposting'
|
||||||
|
|
||||||
# Twoje urlpatterns
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
# ...
|
path('', include(router.urls)), # test only
|
||||||
path('', include(router.urls)),
|
|
||||||
path('skill/', views.SkillMainView.as_view(), name='skill-list'),
|
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 import viewsets, permissions, authentication
|
||||||
from rest_framework.response import Response
|
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 core.models import MyUser, AnonymousUserData
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from jobposting.permissions import ClientCredentialPermission
|
|
||||||
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope, OAuth2Authentication
|
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope, OAuth2Authentication
|
||||||
from .auth import OAuth2ClientCredentialAuthentication
|
from .auth import OAuth2ClientCredentialAuthentication
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
import requests
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
import base64
|
|
||||||
|
|
||||||
|
|
||||||
from jobposting.serializers import (
|
from jobposting.serializers import (
|
||||||
JobListingSerializer,
|
JobOfferSerializer,
|
||||||
MyUserSerializer,
|
MyUserSerializer,
|
||||||
CompanyLogoSerializer,
|
CompanyLogoSerializer,
|
||||||
SkillSerializer
|
SkillSerializer,
|
||||||
|
SlimJobOffersSerializer
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -30,11 +32,11 @@ class MyUserViewSet(viewsets.ModelViewSet):
|
|||||||
# # permission_classes = [permissions.IsAuthenticated]
|
# # permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
|
||||||
class JobListingViewSet(viewsets.ModelViewSet):
|
class JobOfferViewSet(viewsets.ModelViewSet):
|
||||||
# authentication_classes = [OAuth2Authentication, authentication.SessionAuthentication]
|
# authentication_classes = [OAuth2Authentication, authentication.SessionAuthentication]
|
||||||
# permission_classes = [permissions.IsAuthenticated|TokenHasReadWriteScope] # test only
|
# permission_classes = [permissions.IsAuthenticated|TokenHasReadWriteScope] # test only
|
||||||
queryset = JobListing.objects.all()
|
queryset = JobOffer.objects.all()
|
||||||
serializer_class = JobListingSerializer
|
serializer_class = JobOfferSerializer
|
||||||
required_scope = ['main']
|
required_scope = ['main']
|
||||||
authentication_classes = []
|
authentication_classes = []
|
||||||
permission_classes = []
|
permission_classes = []
|
||||||
@ -69,6 +71,18 @@ class CompanyLogoViewSet(viewsets.ModelViewSet):
|
|||||||
permission_classes = []
|
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):
|
class SkillViewset(viewsets.ModelViewSet):
|
||||||
# authentication_classes = [OAuth2Authentication, authentication.SessionAuthentication]
|
# authentication_classes = [OAuth2Authentication, authentication.SessionAuthentication]
|
||||||
# permission_classes = [permissions.IsAuthenticated|TokenHasReadWriteScope]
|
# permission_classes = [permissions.IsAuthenticated|TokenHasReadWriteScope]
|
||||||
@ -77,34 +91,95 @@ class SkillViewset(viewsets.ModelViewSet):
|
|||||||
required_scope = ['main']
|
required_scope = ['main']
|
||||||
authentication_classes = []
|
authentication_classes = []
|
||||||
permission_classes = []
|
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):
|
class SkillMainView(APIView):
|
||||||
authentication_classes = []
|
authentication_classes = []
|
||||||
permission_classes = []
|
permission_classes = []
|
||||||
|
|
||||||
def get(self, request, format=None):
|
def get_object(self, pk):
|
||||||
num_of_skills = request.query_params.get('num_of_skills')
|
|
||||||
try:
|
try:
|
||||||
num_of_skills = int(num_of_skills)
|
return Skill.objects.get(pk=pk)
|
||||||
except ValueError:
|
except Skill.DoesNotExist:
|
||||||
return Response({'error': 'Invalid number format'},
|
return Response({'error': 'Not Found'}, status=status.HTTP_404_NOT_FOUND)
|
||||||
status=status.HTTP_400_BAD_REQUEST)
|
|
||||||
skills = Skill.objects.all()[:num_of_skills]
|
def get(self, request, pk=None, format=None):
|
||||||
serializer = SkillSerializer(skills, many=True)
|
if pk:
|
||||||
|
skill = self.get_object(pk)
|
||||||
|
serializer = SkillSerializer(skill)
|
||||||
|
else:
|
||||||
|
skill = Skill.objects.all()
|
||||||
|
serializer = SkillSerializer(skill, many=True)
|
||||||
return Response(serializer.data)
|
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