From f74ebcede3b2687a3c8b9648b34243ab0e062357 Mon Sep 17 00:00:00 2001
From: Chif Gergo <chifgeri97@gmail.com>
Date: Sat, 23 Dec 2017 17:34:51 +0100
Subject: [PATCH] Jelentkezes nagyjabol megcsinalva

---
 .../migrations/0005_auto_20171223_1455.py     | 20 ++++++
 src/account/models.py                         |  6 --
 src/account/serializers.py                    | 63 +++++++++++++++----
 src/account/urls.py                           |  3 +-
 src/account/views.py                          |  6 ++
 5 files changed, 78 insertions(+), 20 deletions(-)
 create mode 100644 src/account/migrations/0005_auto_20171223_1455.py

diff --git a/src/account/migrations/0005_auto_20171223_1455.py b/src/account/migrations/0005_auto_20171223_1455.py
new file mode 100644
index 0000000..d5e5fb8
--- /dev/null
+++ b/src/account/migrations/0005_auto_20171223_1455.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.5 on 2017-12-23 13:55
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('account', '0004_profile_signed'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='profile',
+            name='join_date',
+            field=models.DateField(auto_now=True),
+        ),
+    ]
diff --git a/src/account/models.py b/src/account/models.py
index 2524e6d..86d7d41 100644
--- a/src/account/models.py
+++ b/src/account/models.py
@@ -1,7 +1,5 @@
 from django.db import models
 from django.contrib.auth.models import User
-from django.core.exceptions import ValidationError
-import datetime
 
 
 class Profile(models.Model):
@@ -22,7 +20,3 @@ class Profile(models.Model):
 
     def __str__(self):
         return self.user.username
-
-    def clean(self):
-        if self.join_date > datetime.date.today() or self.join_date < datetime.date(2015, 1, 1):
-            raise ValidationError('Invalid date')
diff --git a/src/account/serializers.py b/src/account/serializers.py
index 8921477..9dded68 100644
--- a/src/account/serializers.py
+++ b/src/account/serializers.py
@@ -1,5 +1,6 @@
 from rest_framework import serializers
 from account.models import Profile
+from django.contrib.auth.models import User
 
 
 class ProfileSerializer(serializers.ModelSerializer):
@@ -9,16 +10,17 @@ class ProfileSerializer(serializers.ModelSerializer):
 
 
 class ProfileCreateSerializer(serializers.ModelSerializer):
+    def current_user(self):
+        user = self.context['request'].user
+        return user
+
     first_name = serializers.CharField()
     last_name = serializers.CharField()
     email = serializers.EmailField()
-    # Create a custom method field
-    current_user = serializers.SerializerMethodField('_user')
 
     class Meta:
         model = Profile
         fields = [
-                'current_user',
                 'first_name',
                 'last_name',
                 'email',
@@ -27,23 +29,58 @@ class ProfileCreateSerializer(serializers.ModelSerializer):
                 'signed',
                   ]
 
-    def _user(self, obj):
+    def create(self, validated_data):
+        user = self.current_user()
+        if User.objects.filter(username=user.get_username()) is None:
+            user.first_name = validated_data['first_name']
+            user.last_name = validated_data['last_name']
+            user.email = validated_data['email']
+            user.save()
+            nick = validated_data['nick']
+            pref_group = validated_data['pref_group']
+            signed = validated_data['signed']
+            profile_obj = Profile(
+                    user=user,
+                    nick=nick,
+                    pref_group=pref_group,
+                    signed=signed,
+                    )
+            profile_obj.save()
+        else:
+            raise serializers.ValidationError("MĂĄr jelentkeztĂŠl, ha le akarsz jelentkezni hazsnĂĄld a LejelentkezĂŠs gombot!")
+        return validated_data
+
+
+class ProfileUpdateSerializer(serializers.ModelSerializer):
+    def current_user(self):
         user = self.context['request'].user
         return user
 
-    def create(self, validated_data):
-        #user.first_name = validated_data['first_name']
-        #user.last_name = validated_data['last_name']
-        #user.email = validated_data['email']
-        #user.save()
+    first_name = serializers.CharField()
+    last_name = serializers.CharField()
+    email = serializers.EmailField()
+
+    class Meta:
+        model = Profile
+        fields = [
+                'first_name',
+                'last_name',
+                'email',
+                'nick',
+                'pref_group',
+                  ]
+
+    def update(self, validated_data):
+        user = self.current_user()
+        user.first_name = validated_data['first_name']
+        user.last_name = validated_data['last_name']
+        user.email = validated_data['email']
+        user.save()
         nick = validated_data['nick']
         pref_group = validated_data['pref_group']
-        signed = validated_data['signed']
         profile_obj = Profile(
                 user=user,
                 nick=nick,
                 pref_group=pref_group,
-                signed=signed,
-        )
+                )
         profile_obj.save()
-        return validated_data
diff --git a/src/account/urls.py b/src/account/urls.py
index 1dc4f59..347aecb 100644
--- a/src/account/urls.py
+++ b/src/account/urls.py
@@ -6,6 +6,7 @@ router = routers.DefaultRouter(trailing_slash=False)
 
 router.register(r'profiles', views.ProfileViewSet)
 urlpatterns = [
-        url(r'^profiles/create', views.ProfileCreateView.as_view())
+        url(r'^profiles/create', views.ProfileCreateView.as_view()),
+        url(r'^profiles/update/<pk>', views.ProfileUpdateView.as_view())
 ]
 urlpatterns += router.urls
diff --git a/src/account/views.py b/src/account/views.py
index 348fddc..e4f226b 100644
--- a/src/account/views.py
+++ b/src/account/views.py
@@ -11,6 +11,12 @@ class ProfileCreateView(generics.CreateAPIView):
     permission_classes = [IsAuthenticated, ]
 
 
+class ProfileUpdateView(generics.RetrieveAPIView):
+    serializer_class = serializers.ProfileUpdateSerializer
+    queryset = models.Profile.objects.all()
+    permission_classes = [IsAuthenticated, ]
+
+
 class ProfileViewSet(viewsets.ModelViewSet):
     serializer_class = serializers.ProfileSerializer
     queryset = models.Profile.objects.all()
-- 
GitLab