From d5799ca768b8dfc538bab49e2396cb2f88dc1361 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 11 Nov 2019 17:45:34 +0300 Subject: [PATCH] migrate inquiries grid --- .../migrations/0011_auto_20191111_1439.py | 18 ++++++++ .../migrations/0012_griditems_old_id.py | 18 ++++++++ apps/review/models.py | 3 +- apps/review/transfer_data.py | 45 ++++++++++--------- apps/transfer/management/commands/transfer.py | 1 - apps/transfer/models.py | 2 +- apps/transfer/serializers/grid.py | 38 ++++++++++++++++ docker-compose.mysql.yml | 1 - 8 files changed, 102 insertions(+), 24 deletions(-) create mode 100644 apps/review/migrations/0011_auto_20191111_1439.py create mode 100644 apps/review/migrations/0012_griditems_old_id.py create mode 100644 apps/transfer/serializers/grid.py diff --git a/apps/review/migrations/0011_auto_20191111_1439.py b/apps/review/migrations/0011_auto_20191111_1439.py new file mode 100644 index 00000000..f9fb5d57 --- /dev/null +++ b/apps/review/migrations/0011_auto_20191111_1439.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-11-11 14:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('review', '0010_inquiries_published'), + ] + + operations = [ + migrations.RenameField( + model_name='griditems', + old_name='decs', + new_name='desc', + ), + ] diff --git a/apps/review/migrations/0012_griditems_old_id.py b/apps/review/migrations/0012_griditems_old_id.py new file mode 100644 index 00000000..96cc9c02 --- /dev/null +++ b/apps/review/migrations/0012_griditems_old_id.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-11-11 14:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('review', '0011_auto_20191111_1439'), + ] + + operations = [ + migrations.AddField( + model_name='griditems', + name='old_id', + field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id'), + ), + ] diff --git a/apps/review/models.py b/apps/review/models.py index 1952cc5f..b1a3870d 100644 --- a/apps/review/models.py +++ b/apps/review/models.py @@ -116,11 +116,12 @@ class Inquiries(ProjectBaseMixin): class GridItems(ProjectBaseMixin): + old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) inquiry = models.ForeignKey(Inquiries, verbose_name=_('inquiry'), on_delete=models.CASCADE, related_name='grids') sub_name = models.CharField(_('sub name'), max_length=255, blank=True, null=True) name = models.CharField(_('name'), max_length=255, blank=True, null=True) value = models.FloatField(_('value'), blank=True, null=True) - decs = models.TextField(_('description'), blank=True, null=True) + desc = models.TextField(_('description'), blank=True, null=True) dish_title = models.CharField(_('dish title'), max_length=255, blank=True, null=True) class Meta: diff --git a/apps/review/transfer_data.py b/apps/review/transfer_data.py index 50d81d61..7106de16 100644 --- a/apps/review/transfer_data.py +++ b/apps/review/transfer_data.py @@ -1,11 +1,14 @@ +import json +from pprint import pprint + from django.db.models import Q from account.transfer_data import STOP_LIST -from transfer.models import Reviews, ReviewTexts, Inquiries +from review.models import Inquiries as NewInquiries, Review +from transfer.models import Reviews, ReviewTexts, Inquiries, GridItems +from transfer.serializers.grid import GridItemsSerializer from transfer.serializers.inquiries import InquiriesSerializer from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment -from pprint import pprint -import json def transfer_languages(): @@ -98,23 +101,11 @@ def transfer_reviews(): def transfer_inquiries(): - # отфильтровать по review, account, establishment - # TODO: нужно ли переносить данные у которых нет привязки к аккаунту? .filter(account__isnull=False) + reviews = Review.objects.all().values_list('old_id', flat=True) inquiries = Inquiries.objects.exclude( - Q(review__reviewer_id__lte=0) | # + - Q(review__reviewer_id__isnull=True) | # + - Q(review__mark__isnull=True) | # + - Q(review__reviewtexts__text__isnull=True) | # + - Q(review__reviewtexts__locale__isnull=True) | # + - Q(review__establishment__type__isnull=True) | # + - Q(review__establishment__type='Wineyard') | # + - Q(review__establishment__location__timezone__isnull=True) | # + - Q(review__establishment__location__isnull=True) | # + - Q(account__confirmed_at__isnull=True) | # + - Q(account__email__in=STOP_LIST) | # + - Q(review_id__in=( - 47558, 43703, 89320, 92150, 90162, 113639, 92084, 96145, 92492, 92489, 92497, 116790, 116930, 114799)) - ) + Q(account__confirmed_at__isnull=True) | + Q(account__email__in=STOP_LIST) + ).filter(review_id__in=list(reviews)) serialized_data = InquiriesSerializer(data=list(inquiries.values()), many=True) if serialized_data.is_valid(): @@ -123,10 +114,24 @@ def transfer_inquiries(): pprint(f"Inquiries serializer errors: {serialized_data.errors}") +def transfer_grid(): + inquiries = NewInquiries.objects.all().values_list('old_id', flat=True) + grids = GridItems.objects.filter(inquiry_id__in=list(inquiries)) + + serialized_data = GridItemsSerializer(data=list(grids.values()), many=True) + if serialized_data.is_valid(): + serialized_data.save() + else: + pprint(f"GridItems serializer errors: {serialized_data.errors}") + + data_types = { "overlook": [ transfer_languages, transfer_reviews ], - 'inquiries': [transfer_inquiries] + 'inquiries': [ + transfer_inquiries, + transfer_grid, + ] } diff --git a/apps/transfer/management/commands/transfer.py b/apps/transfer/management/commands/transfer.py index e24bc28c..a18cb09b 100644 --- a/apps/transfer/management/commands/transfer.py +++ b/apps/transfer/management/commands/transfer.py @@ -32,7 +32,6 @@ class Command(BaseCommand): 'inquiries', # №6 - перенос запросов оценок 'wine_characteristics', 'product', - 'comment', ] def handle(self, *args, **options): diff --git a/apps/transfer/models.py b/apps/transfer/models.py index 026f7a27..bfc764da 100644 --- a/apps/transfer/models.py +++ b/apps/transfer/models.py @@ -1123,7 +1123,7 @@ class GridItems(MigrateMixin): sub_item_name = models.CharField(max_length=255, blank=True, null=True) item_name = models.CharField(max_length=255, blank=True, null=True) value = models.FloatField(blank=True, null=True) - decs = models.TextField(blank=True, null=True) + desc = models.TextField(blank=True, null=True) dish_title = models.CharField(max_length=255, blank=True, null=True) class Meta: diff --git a/apps/transfer/serializers/grid.py b/apps/transfer/serializers/grid.py new file mode 100644 index 00000000..2abc183e --- /dev/null +++ b/apps/transfer/serializers/grid.py @@ -0,0 +1,38 @@ +from rest_framework import serializers + +from review.models import Inquiries, GridItems + + +class GridItemsSerializer(serializers.Serializer): + id = serializers.IntegerField() + created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') + inquiry_id = serializers.IntegerField() + sub_item_name = serializers.CharField(allow_null=True, allow_blank=True) + item_name = serializers.CharField(allow_null=True, allow_blank=True) + value = serializers.FloatField(allow_null=True) + desc = serializers.CharField(allow_null=True, allow_blank=True) + dish_title = serializers.CharField(allow_null=True, allow_blank=True) + + def validate(self, data): + data.update({ + 'old_id': data.pop('id'), + 'created': data.pop('created_at'), + 'sub_name': data.pop('sub_item_name'), + 'name': data.pop('item_name'), + 'inquiry': self.get_inquiry(data), + }) + data.pop('inquiry_id') + return data + + def create(self, validated_data): + try: + return GridItems.objects.create(**validated_data) + except Exception as e: + raise ValueError(f"Error creating GridItems with {validated_data}: {e}") + + @staticmethod + def get_inquiry(data): + inquiry = Inquiries.objects.filter(old_id=data['inquiry_id']).first() + if not inquiry: + raise ValueError(f"Inquiries not found with old_id {data['inquiry_id']}") + return inquiry diff --git a/docker-compose.mysql.yml b/docker-compose.mysql.yml index c325fce1..bd81ecb2 100644 --- a/docker-compose.mysql.yml +++ b/docker-compose.mysql.yml @@ -12,7 +12,6 @@ services: MYSQL_PASSWORD: octosecret123 MYSQL_ROOT_PASSWORD: rootPassword volumes: - - .:/code - gm-mysql_db:/var/lib/mysql