Fix review published_at

Add old_id
Add description to establishment
This commit is contained in:
littlewolf 2019-10-31 10:04:49 +03:00
parent fea93f50f7
commit c8554772f1
4 changed files with 76 additions and 9 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.4 on 2019-10-31 06:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('review', '0004_review_country'),
]
operations = [
migrations.AddField(
model_name='review',
name='old_id',
field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id'),
),
]

View File

@ -68,6 +68,9 @@ class Review(BaseAttributes, TranslatedFieldsMixin):
country = models.ForeignKey('location.Country', on_delete=models.CASCADE, country = models.ForeignKey('location.Country', on_delete=models.CASCADE,
related_name='country', verbose_name=_('Country'), related_name='country', verbose_name=_('Country'),
null=True) null=True)
old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None)
objects = ReviewQuerySet.as_manager() objects = ReviewQuerySet.as_manager()
class Meta: class Meta:

View File

@ -1,6 +1,7 @@
from transfer.models import Reviews, ReviewTexts from transfer.models import Reviews, ReviewTexts
from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment
from pprint import pprint from pprint import pprint
import json
def transfer_languages(): def transfer_languages():
@ -20,14 +21,16 @@ def transfer_languages():
def transfer_reviews(): def transfer_reviews():
queryset = Reviews.objects.raw("""SELECT reviews.id, reviews.vintage, reviews.establishment_id, queryset = Reviews.objects.raw("""SELECT reviews.id, reviews.vintage, reviews.establishment_id,
reviews.reviewer_id, review_texts.text AS text, reviews.mark, reviews.reviewer_id, review_texts.text AS text, reviews.mark, reviews.published_at,
review_texts.created_at AS published, review_texts.locale AS locale review_texts.created_at AS published, review_texts.locale AS locale,
reviews.aasm_state
FROM reviews FROM reviews
LEFT OUTER JOIN review_texts LEFT OUTER JOIN review_texts
ON (reviews.id = review_texts.review_id) ON (reviews.id = review_texts.review_id)
WHERE reviews.reviewer_id > 0 WHERE reviews.reviewer_id > 0
AND reviews.reviewer_id IS NOT NULL AND reviews.reviewer_id IS NOT NULL
AND review_texts.text IS NOT NULL AND review_texts.text IS NOT NULL
AND review_texts.locale IS NOT NULL
AND reviews.mark IS NOT NULL AND reviews.mark IS NOT NULL
AND reviews.reviewer_id IN ( AND reviews.reviewer_id IN (
SELECT accounts.id SELECT accounts.id
@ -40,8 +43,19 @@ def transfer_reviews():
"d.sadykova@id-east.ru", "d.sadykova@id-east.ru",
"d.sadykova@octopod.ru", "d.sadykova@octopod.ru",
"n.yurchenko@id-east.ru" "n.yurchenko@id-east.ru"
) ))
) ORDER BY review_texts.created_at DESC AND reviews.establishment_id IN (
SELECT establishments.id
FROM establishments
INNER JOIN locations
ON (establishments.location_id = locations.id)
INNER JOIN cities
ON (locations.city_id = cities.id)
WHERE UPPER(cities.name) LIKE UPPER("%%paris%%")
AND NOT establishments.type = "Wineyard"
AND establishments.type IS NOT NULL AND locations.timezone IS NOT NULL
)
ORDER BY review_texts.created_at DESC
""") """)
queryset_result = [] queryset_result = []
@ -50,7 +64,13 @@ def transfer_reviews():
for query in queryset: for query in queryset:
query = vars(query) query = vars(query)
if query['establishment_id'] not in establishments_mark_list.keys(): if query['establishment_id'] not in establishments_mark_list.keys():
establishments_mark_list[query['establishment_id']] = int(query['mark']) if "aasm_state" in query and query['aasm_state'] is not None and query['aasm_state'] == "published":
establishments_mark_list[query['establishment_id']] = [
int(query['mark']),
json.dumps({query['locale']: query['text']})
]
else:
establishments_mark_list[query['establishment_id']] = int(query['mark'])
del(query['mark']) del(query['mark'])
queryset_result.append(query) queryset_result.append(query)
@ -58,11 +78,15 @@ def transfer_reviews():
if serialized_data.is_valid(): if serialized_data.is_valid():
serialized_data.save() serialized_data.save()
for establishment_id, mark in establishments_mark_list.items(): for establishment_id, mark in establishments_mark_list.items():
try: try:
establishment = Establishment.objects.get(old_id=establishment_id) establishment = Establishment.objects.get(old_id=establishment_id)
except Establishment.DoesNotExist: except Establishment.DoesNotExist:
continue continue
if isinstance(mark, list):
mark, review_text = mark
establishment.public_mark = mark establishment.public_mark = mark
establishment.save() establishment.save()
else: else:
@ -71,7 +95,7 @@ def transfer_reviews():
data_types = { data_types = {
"overlook": [ "overlook": [
transfer_languages, # transfer_languages,
transfer_reviews transfer_reviews
] ]
} }

View File

@ -10,23 +10,35 @@ class ReviewSerializer(serializers.ModelSerializer):
reviewer_id = serializers.IntegerField() reviewer_id = serializers.IntegerField()
vintage = serializers.IntegerField() vintage = serializers.IntegerField()
published = serializers.DateTimeField() published = serializers.DateTimeField()
published_at = serializers.DateTimeField(allow_null=True)
establishment_id = serializers.IntegerField() establishment_id = serializers.IntegerField()
text = serializers.CharField() text = serializers.CharField()
locale = serializers.CharField() locale = serializers.CharField()
aasm_state = serializers.CharField(allow_null=True)
class Meta: class Meta:
model = Review model = Review
fields = ( fields = (
"id", "reviewer_id", "published", "vintage", "establishment_id", "text", "locale" "id", "reviewer_id", "published", "vintage",
"establishment_id", "text", "locale",
"published_at", "aasm_state"
) )
def validate(self, data): def validate(self, data):
data = self.set_old_id(data) data = self.set_old_id(data)
data = self.set_published_at(data)
data = self.set_reviewer(data) data = self.set_reviewer(data)
data = self.set_establishment(data) data = self.set_establishment(data)
data = self.set_language(data) data = self.set_language(data)
data = self.set_published(data)
return data return data
def create(self, validated_data):
try:
return Review.objects.create(**validated_data)
except Exception as e:
raise ValueError(f"Error creating review with {validated_data}: {e}")
def set_old_id(self, data): def set_old_id(self, data):
data['old_id'] = data.pop("id") data['old_id'] = data.pop("id")
return data return data
@ -41,9 +53,9 @@ class ReviewSerializer(serializers.ModelSerializer):
def set_establishment(self, data): def set_establishment(self, data):
try: try:
data['establishment'] = Establishment.objects.get(old_id=data.pop('old_id')) data['content_object'] = Establishment.objects.get(old_id=data.pop('establishment_id'))
except Establishment.DoesNotExist as e: except Establishment.DoesNotExist as e:
raise ValueError(f"Cannot find establishment with {data}: {e}") raise ValueError(f"Cannot find review establishment with {data}: {e}")
return data return data
def set_language(self, data): def set_language(self, data):
@ -56,6 +68,16 @@ class ReviewSerializer(serializers.ModelSerializer):
return data return data
def set_published(self, data):
data['published_at'] = data.pop("published")
return data
def set_published_at(self, data):
if "aasm_state" in data and data['aasm_state'] is not None and data['aasm_state'] == "published":
data['status'] = Review.READY
del(data['aasm_state'])
return data
class LanguageSerializer(serializers.ModelSerializer): class LanguageSerializer(serializers.ModelSerializer):