From 42a42d4c5ca0f1128c7096906844492cbe212c7a Mon Sep 17 00:00:00 2001 From: Joshua Casey <joshua.caseyd@gmail.com> Date: Tue, 28 Mar 2017 20:35:11 +0700 Subject: [PATCH] [#140654507] #16 Added endpoint for company to create new user --- core/serializers/accounts.py | 7 ++++++ core/views/accounts.py | 42 +++++++++++++++++++++++++++++++++++- kape/urls.py | 3 ++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index 1451d962..f3aa41bb 100644 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -46,3 +46,10 @@ class LoginSerializer(serializers.HyperlinkedModelSerializer): model = User fields = ('url', 'username', 'email', 'is_staff', 'company', 'supervisor', 'student') +class RegisterSerializer(serializers.HyperlinkedModelSerializer): + company = CompanySerializer() + + class Meta: + model = User + fields = ('url', 'username', 'email', 'is_staff', 'company') + diff --git a/core/views/accounts.py b/core/views/accounts.py index 43036c47..cda848b4 100644 --- a/core/views/accounts.py +++ b/core/views/accounts.py @@ -6,11 +6,12 @@ from rest_framework.decorators import list_route from rest_framework.permissions import AllowAny from rest_framework.permissions import IsAdminUser, IsAuthenticated from rest_framework.response import Response +from rest_framework.parsers import FormParser,MultiPartParser from core.lib.permissions import IsAdminOrStudent, IsAdminOrSelfOrReadOnly, IsAdminOrCompany, IsAdminOrSupervisor from core.models.accounts import Student, Company, Supervisor from core.serializers.accounts import UserSerializer, StudentSerializer, CompanySerializer, SupervisorSerializer, \ - LoginSerializer + LoginSerializer, RegisterSerializer class UserViewSet(viewsets.ModelViewSet): @@ -129,3 +130,42 @@ class LoginViewSet(viewsets.GenericViewSet): return Response(status=status.HTTP_401_UNAUTHORIZED) else: return Response(status=status.HTTP_400_BAD_REQUEST) + + +class CompanyRegisterViewSet(viewsets.GenericViewSet): + permission_classes = (AllowAny,) + serializer_class = RegisterSerializer + queryset = Company.objects.all() + parser_classes = (MultiPartParser, FormParser,) + + def create(self, request): + username = request.data.get('username') + password = request.data.get('password') + email = request.data.get('email') + company_name = request.data.get('name') + description = request.data.get('description') + logo = request.data.get('logo') + address = request.data.get('address') + + if username is not None and password is not None and email is not None and company_name is not None and description is not None: + user, created = User.objects.get_or_create( + username=username, + email=email, + first_name=company_name, + last_name="" + ) + if created: + user.set_password(password) + company = Company.objects.create( + user=user, + description=description, + logo=logo, + address=address + ) + user.save() + company.save() + serializer = RegisterSerializer(user, context={'request': request}) + return Response(serializer.data, status=status.HTTP_201_CREATED) + return Response(status=status.HTTP_409_CONFLICT) + + return Response(status=status.HTTP_400_BAD_REQUEST) \ No newline at end of file diff --git a/kape/urls.py b/kape/urls.py index fa7a1942..a6e641fd 100755 --- a/kape/urls.py +++ b/kape/urls.py @@ -22,7 +22,7 @@ from rest_framework import routers from rest_framework_swagger.views import get_swagger_view from core import apps -from core.views.accounts import StudentViewSet, CompanyViewSet, SupervisorViewSet, UserViewSet, LoginViewSet +from core.views.accounts import StudentViewSet, CompanyViewSet, SupervisorViewSet, UserViewSet, LoginViewSet, CompanyRegisterViewSet from core.views.vacancies import VacancyViewSet, BookmarkedVacancyByStudentViewSet, ApplicationViewSet schema_view = get_swagger_view() @@ -32,6 +32,7 @@ router.register(r'students', StudentViewSet) router.register(r'companies', CompanyViewSet) router.register(r'supervisors', SupervisorViewSet) router.register(r'login', LoginViewSet) +router.register(r'register', CompanyRegisterViewSet) router.register(r'vacancies', VacancyViewSet) router.register(r'students/(?P<student_id>\d+)/bookmarked-vacancies', BookmarkedVacancyByStudentViewSet, base_name='bookmarked-vacancy-list') -- GitLab