diff --git a/apps/advertisement/migrations/0002_auto_20190917_1307.py b/apps/advertisement/migrations/0002_auto_20190917_1307.py index 178d0f3a..6604a979 100644 --- a/apps/advertisement/migrations/0002_auto_20190917_1307.py +++ b/apps/advertisement/migrations/0002_auto_20190917_1307.py @@ -4,6 +4,20 @@ from django.db import migrations, models import uuid +def fill_uuid(apps, schemaeditor): + Advertisement = apps.get_model('advertisement', 'Advertisement') + for a in Advertisement.objects.all(): + a.uuid = uuid.uuid4() + a.save() + + +def fill_block_level(apps, schemaeditor): + Advertisement = apps.get_model('advertisement', 'Advertisement') + for a in Advertisement.objects.all(): + a.block_level = '' + a.save() + + class Migration(migrations.Migration): dependencies = [ @@ -23,6 +37,12 @@ class Migration(migrations.Migration): field=models.ManyToManyField(to='translation.Language'), ), migrations.AddField( + model_name='advertisement', + name='uuid', + field=models.UUIDField(default=uuid.uuid4, editable=False), + ), + migrations.RunPython(fill_uuid, migrations.RunPython.noop), + migrations.AlterField( model_name='advertisement', name='uuid', field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True), @@ -32,8 +52,14 @@ class Migration(migrations.Migration): name='block_level', ), migrations.AddField( + model_name='advertisement', + name='block_level', + field=models.CharField(blank=True, null=True, max_length=10, verbose_name='Block level') + ), + migrations.RunPython(fill_block_level, migrations.RunPython.noop), + migrations.AlterField( model_name='advertisement', name='block_level', field=models.CharField(max_length=10, verbose_name='Block level') - ) + ), ] diff --git a/apps/authorization/serializers/common.py b/apps/authorization/serializers/common.py index 5049ada1..3e7195a5 100644 --- a/apps/authorization/serializers/common.py +++ b/apps/authorization/serializers/common.py @@ -4,7 +4,7 @@ from django.contrib.auth import authenticate from django.contrib.auth import password_validation as password_validators from django.db.models import Q from rest_framework import serializers -from rest_framework import validators as rest_validators +from rest_framework.generics import get_object_or_404 from account import models as account_models from authorization import tasks @@ -76,6 +76,39 @@ class SignupSerializer(serializers.ModelSerializer): return obj +class ReconfirmSerializer(serializers.ModelSerializer): + + class Meta: + model = account_models.User + fields = ('email',) + + def validate_email(self, value): + """Validate email""" + users = list(account_models.User.objects.filter(email=value.lower()).all()) + if not users: + raise serializers.ValidationError(detail='User with mentioned email does not exist.') + users = list(filter(lambda user: not user.email_confirmed, users)) + if not users: + raise serializers.ValidationError(detail='User with this email is confirmed.') + return value + + def create(self, validated_data): + """Override create method""" + queryset = account_models.User.objects.all() + email = validated_data.get('email').lower() + country_code = self.context.get('request').country_code + obj = get_object_or_404(queryset, email=email) + if settings.USE_CELERY: + tasks.send_confirm_email.delay( + user_id=obj.id, + country_code=country_code) + else: + tasks.send_confirm_email( + user_id=obj.id, + country_code=country_code) + return obj + + class LoginByUsernameOrEmailSerializer(SourceSerializerMixin, serializers.ModelSerializer): """Serializer for login user""" diff --git a/apps/authorization/urls/common.py b/apps/authorization/urls/common.py index 4e6e59e1..814ce836 100644 --- a/apps/authorization/urls/common.py +++ b/apps/authorization/urls/common.py @@ -29,6 +29,7 @@ urlpatterns_oauth2 = [ urlpatterns_jwt = [ path('signup/', views.SignUpView.as_view(), name='signup'), + path('signup/reconfirm/', views.ReconfirmView.as_view(), name='signup-reconfirm'), path('signup/confirm///', views.ConfirmationEmailView.as_view(), name='signup-confirm'), path('login/', views.LoginByUsernameOrEmailView.as_view(), name='login'), diff --git a/apps/authorization/views/common.py b/apps/authorization/views/common.py index 0b1a58e0..a2e3e8c9 100644 --- a/apps/authorization/views/common.py +++ b/apps/authorization/views/common.py @@ -147,6 +147,17 @@ class SignUpView(generics.GenericAPIView): return Response(status=status.HTTP_201_CREATED) +class ReconfirmView(generics.CreateAPIView): + """ Resends confirmation email whether user's still not confirmed """ + permission_classes = (permissions.AllowAny,) + serializer_class = serializers.ReconfirmSerializer + + def post(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + return Response(status=status.HTTP_201_CREATED) + + class ConfirmationEmailView(JWTGenericViewMixin): """View for confirmation email""" diff --git a/apps/main/models.py b/apps/main/models.py index 2270cbf9..fa6cf7d1 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -349,7 +349,9 @@ class Carousel(models.Model): @property def model_name(self): - return self.content_object.__class__.__name__ + if hasattr(self.content_object, 'establishment_type'): + return self.content_object.establishment_type.name_translated + class Page(models.Model): diff --git a/apps/search_indexes/views.py b/apps/search_indexes/views.py index 57228c58..a4f37006 100644 --- a/apps/search_indexes/views.py +++ b/apps/search_indexes/views.py @@ -76,9 +76,7 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet): 'slug': 'slug', 'tag': { 'field': 'tags.id', - 'lookups': [ - constants.LOOKUP_QUERY_IN, - ] + 'lookups': [constants.LOOKUP_QUERY_IN] }, 'toque_number': { 'field': 'toque_number',