diff --git a/apps/comment/migrations/0004_comment_old_id.py b/apps/comment/migrations/0004_comment_old_id.py new file mode 100644 index 00000000..46dbb7d0 --- /dev/null +++ b/apps/comment/migrations/0004_comment_old_id.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-10-29 12:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('comment', '0003_auto_20191015_0704'), + ] + + operations = [ + migrations.AddField( + model_name='comment', + name='old_id', + field=models.IntegerField(blank=True, default=None, null=True), + ), + ] diff --git a/apps/comment/models.py b/apps/comment/models.py index 55c7802e..29021677 100644 --- a/apps/comment/models.py +++ b/apps/comment/models.py @@ -45,6 +45,8 @@ class Comment(ProjectBaseMixin): objects = CommentQuerySet.as_manager() country = models.ForeignKey(Country, verbose_name=_('Country'), on_delete=models.SET_NULL, null=True) + old_id = models.IntegerField(null=True, blank=True, default=None) + class Meta: """Meta class""" diff --git a/apps/comment/transfer_data.py b/apps/comment/transfer_data.py new file mode 100644 index 00000000..d159a045 --- /dev/null +++ b/apps/comment/transfer_data.py @@ -0,0 +1,22 @@ +from django.db.models import F +from pprint import pprint +from transfer.models import Comments, Accounts, Establishments +from transfer.serializers.comments import CommentSerializer + + +def transfer_comments(): + queryset = Comments.objects.filter(account__isnull=False, mark__isnull=False)\ + .only("id", "comment", "mark", "locale", "establishment_id", "account_id") + + serialized_data = CommentSerializer(data=list(queryset.values()), many=True) + if serialized_data.is_valid(): + serialized_data.save() + else: + pprint(serialized_data.errors) + + +data_types = { + "tmp": [ + transfer_comments + ] +} \ No newline at end of file diff --git a/apps/transfer/serializers/comments.py b/apps/transfer/serializers/comments.py new file mode 100644 index 00000000..584370e6 --- /dev/null +++ b/apps/transfer/serializers/comments.py @@ -0,0 +1,64 @@ +from rest_framework import serializers +from comment.models import Comment, User +from establishment.models import Establishment + + +class CommentSerializer(serializers.ModelSerializer): + id = serializers.IntegerField() + comment = serializers.CharField() + mark = serializers.DecimalField(max_digits=4, decimal_places=2) + locale = serializers.CharField() + account_id = serializers.IntegerField() + establishment_id = serializers.CharField() + + class Meta: + model = Comment + fields = ( + "id", + "comment", + "mark", + "locale", + "account_id", + "establishment_id" + ) + + def validate(self, data): + data = self.set_old_id(data) + data = self.set_text(data) + data = self.set_mark(data) + data = self.set_establishment(data) + data = self.set_account(data) + return data + + def set_text(self, data): + data['text'] = data.pop('comment') + return data + + def set_mark(self, data): + if data['mark'] < 0: + data['mark'] = data['mark'] * -1 + return data + + def set_account(self, data): + try: + data['account'] = User.objects.filter(old_id=data['account_id']).first() + except User.DoesNotExist as e: + raise ValueError(f"User account not found with {data}: {e}") + + del(data['account_id']) + + return data + + def set_establishment(self, data): + try: + data['establishment'] = Establishment.objects.filter(old_id=data['account_id']).first() + except Establishment.DoesNotExist as e: + raise ValueError(f"Establishment not found with {data}: {e}") + + del(data['establishment_id']) + + return data + + def set_old_id(self, data): + data['old_id'] = data.pop("id") + return data