129 lines
5.7 KiB
Python
129 lines
5.7 KiB
Python
from django.db.models import Q
|
||
|
||
from account.transfer_data import STOP_LIST
|
||
from transfer.models import Reviews, ReviewTexts, Inquiries
|
||
from transfer.serializers.inquiries import InquiriesSerializer
|
||
from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, Establishment
|
||
from pprint import pprint
|
||
import json
|
||
|
||
|
||
def transfer_languages():
|
||
queryset = ReviewTexts.objects.raw("""SELECT id, locale
|
||
FROM review_texts
|
||
WHERE CHAR_LENGTH(locale) = 5
|
||
AND review_texts.locale IS NOT NULL GROUP BY locale""")
|
||
|
||
queryset = [vars(query) for query in queryset]
|
||
|
||
serialized_data = LanguageSerializer(data=queryset, many=True)
|
||
if serialized_data.is_valid():
|
||
serialized_data.save()
|
||
else:
|
||
pprint(f"Language serializer errors: {serialized_data.errors}")
|
||
|
||
|
||
def transfer_reviews():
|
||
queryset = Reviews.objects.raw("""SELECT reviews.id, reviews.vintage, reviews.establishment_id,
|
||
reviews.reviewer_id, review_texts.text AS text, reviews.mark, reviews.published_at,
|
||
review_texts.created_at AS published, review_texts.locale AS locale,
|
||
reviews.aasm_state
|
||
FROM reviews
|
||
LEFT OUTER JOIN review_texts
|
||
ON (reviews.id = review_texts.review_id)
|
||
WHERE reviews.reviewer_id > 0
|
||
AND reviews.reviewer_id 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.reviewer_id IN (
|
||
SELECT accounts.id
|
||
FROM accounts
|
||
WHERE accounts.confirmed_at IS NOT NULL
|
||
AND NOT accounts.email IN (
|
||
"cyril@tomatic.net",
|
||
"cyril2@tomatic.net",
|
||
"cyril2@tomatic.net",
|
||
"d.sadykova@id-east.ru",
|
||
"d.sadykova@octopod.ru",
|
||
"n.yurchenko@id-east.ru"
|
||
))
|
||
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 = []
|
||
establishments_mark_list = {}
|
||
|
||
for query in queryset:
|
||
query = vars(query)
|
||
if query['establishment_id'] not in establishments_mark_list.keys():
|
||
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'])
|
||
queryset_result.append(query)
|
||
|
||
serialized_data = ReviewSerializer(data=queryset_result, many=True)
|
||
|
||
if serialized_data.is_valid():
|
||
serialized_data.save()
|
||
|
||
for establishment_id, mark in establishments_mark_list.items():
|
||
try:
|
||
establishment = Establishment.objects.get(old_id=establishment_id)
|
||
except Establishment.DoesNotExist:
|
||
continue
|
||
if isinstance(mark, list):
|
||
mark, review_text = mark
|
||
|
||
establishment.public_mark = mark
|
||
establishment.save()
|
||
else:
|
||
pprint(serialized_data.errors)
|
||
|
||
|
||
def transfer_inquiries():
|
||
# отфильтровать по review, account, establishment
|
||
# TODO: нужно ли переносить данные у которых нет привязки к аккаунту? .filter(account__isnull=False)
|
||
inquiries = Inquiries.objects.exclude(
|
||
Q(review__reviewer_id__gt=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='Wineyard') |
|
||
Q(review__establishment__location__timezone__isnull=True) |
|
||
Q(account__confirmed_at__isnull=True) |
|
||
Q(account__email__in=STOP_LIST)
|
||
)
|
||
|
||
serialized_data = InquiriesSerializer(data=list(inquiries.values()), many=True)
|
||
if serialized_data.is_valid():
|
||
serialized_data.save()
|
||
else:
|
||
pprint(f"Inquiries serializer errors: {serialized_data.errors}")
|
||
|
||
|
||
data_types = {
|
||
"overlook": [
|
||
transfer_languages,
|
||
transfer_reviews
|
||
],
|
||
'inquiries': [transfer_inquiries]
|
||
}
|