From b5c255f7fbc15261cd11e85c280225e625fc087e Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 12 Nov 2019 08:40:42 +0300 Subject: [PATCH] migrate inquiry photos --- .../0013_inquiriesgallery_old_id.py | 18 ++++++++ .../migrations/0014_auto_20191112_0538.py | 17 +++++++ apps/review/models.py | 2 +- apps/review/transfer_data.py | 15 ++++++- apps/transfer/serializers/inquiry_gallery.py | 45 +++++++++++++++++++ 5 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 apps/review/migrations/0013_inquiriesgallery_old_id.py create mode 100644 apps/review/migrations/0014_auto_20191112_0538.py create mode 100644 apps/transfer/serializers/inquiry_gallery.py diff --git a/apps/review/migrations/0013_inquiriesgallery_old_id.py b/apps/review/migrations/0013_inquiriesgallery_old_id.py new file mode 100644 index 00000000..589fe740 --- /dev/null +++ b/apps/review/migrations/0013_inquiriesgallery_old_id.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.7 on 2019-11-12 05:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('review', '0012_griditems_old_id'), + ] + + operations = [ + migrations.AddField( + model_name='inquiriesgallery', + name='old_id', + field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id'), + ), + ] diff --git a/apps/review/migrations/0014_auto_20191112_0538.py b/apps/review/migrations/0014_auto_20191112_0538.py new file mode 100644 index 00000000..ffd9401a --- /dev/null +++ b/apps/review/migrations/0014_auto_20191112_0538.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.7 on 2019-11-12 05:38 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('review', '0013_inquiriesgallery_old_id'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='inquiriesgallery', + unique_together=set(), + ), + ] diff --git a/apps/review/models.py b/apps/review/models.py index b1a3870d..8f9dc0db 100644 --- a/apps/review/models.py +++ b/apps/review/models.py @@ -141,6 +141,7 @@ class InquiriesGalleryQuerySet(models.QuerySet): class InquiriesGallery(models.Model): + old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) inquiry = models.ForeignKey( Inquiries, null=True, @@ -162,4 +163,3 @@ class InquiriesGallery(models.Model): class Meta: verbose_name = _('inquiry gallery') verbose_name_plural = _('inquiry galleries') - unique_together = (('inquiry', 'is_main'), ('inquiry', 'image')) diff --git a/apps/review/transfer_data.py b/apps/review/transfer_data.py index 7106de16..cde55efe 100644 --- a/apps/review/transfer_data.py +++ b/apps/review/transfer_data.py @@ -5,9 +5,10 @@ from django.db.models import Q from account.transfer_data import STOP_LIST from review.models import Inquiries as NewInquiries, Review -from transfer.models import Reviews, ReviewTexts, Inquiries, GridItems +from transfer.models import Reviews, ReviewTexts, Inquiries, GridItems, InquiryPhotos from transfer.serializers.grid import GridItemsSerializer from transfer.serializers.inquiries import InquiriesSerializer +from transfer.serializers.inquiry_gallery import InquiryGallerySerializer from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment @@ -125,6 +126,17 @@ def transfer_grid(): pprint(f"GridItems serializer errors: {serialized_data.errors}") +def transfer_inquiry_photos(): + inquiries = NewInquiries.objects.all().values_list('old_id', flat=True) + grids = InquiryPhotos.objects.filter(inquiry_id__in=list(inquiries), attachment_suffix_url__isnull=False) + + serialized_data = InquiryGallerySerializer(data=list(grids.values()), many=True) + if serialized_data.is_valid(): + serialized_data.save() + else: + pprint(f"InquiryGallery serializer errors: {serialized_data.errors}") + + data_types = { "overlook": [ transfer_languages, @@ -133,5 +145,6 @@ data_types = { 'inquiries': [ transfer_inquiries, transfer_grid, + transfer_inquiry_photos, ] } diff --git a/apps/transfer/serializers/inquiry_gallery.py b/apps/transfer/serializers/inquiry_gallery.py new file mode 100644 index 00000000..7543927f --- /dev/null +++ b/apps/transfer/serializers/inquiry_gallery.py @@ -0,0 +1,45 @@ +from django.db import transaction +from rest_framework import serializers + +from gallery.models import Image +from review.models import Inquiries, InquiriesGallery + + +class InquiryGallerySerializer(serializers.Serializer): + id = serializers.IntegerField() + inquiry_id = serializers.IntegerField() + created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S') + attachment_file_name = serializers.CharField() + attachment_suffix_url = serializers.CharField() + + def validate(self, data): + data.update({ + 'image': { + 'image': data.pop('attachment_suffix_url'), + 'title': data.pop('attachment_file_name'), + 'created': data.pop('created_at'), + }, + 'gallery': { + 'old_id': data.pop('id'), + 'inquiry': self.get_inquiry(data), + }, + }) + data.pop('inquiry_id') + return data + + def create(self, validated_data): + try: + with transaction.atomic(): + img = Image.objects.create(**validated_data['image']) + gal = InquiriesGallery.objects.create(image=img, **validated_data['gallery']) + except Exception as e: + raise ValueError(f"Error creating InquiriesGallery with {validated_data}: {e}") + else: + return gal + + @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