add product review loader
This commit is contained in:
parent
2367fec098
commit
6b83003eac
|
|
@ -2,6 +2,7 @@ from pprint import pprint
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
|
from product.models import Product
|
||||||
from account.models import User
|
from account.models import User
|
||||||
from account.transfer_data import STOP_LIST
|
from account.transfer_data import STOP_LIST
|
||||||
from establishment.models import Establishment
|
from establishment.models import Establishment
|
||||||
|
|
@ -10,7 +11,10 @@ from transfer.models import Reviews, ReviewTexts, Inquiries, GridItems, InquiryP
|
||||||
from transfer.serializers.grid import GridItemsSerializer
|
from transfer.serializers.grid import GridItemsSerializer
|
||||||
from transfer.serializers.inquiries import InquiriesSerializer
|
from transfer.serializers.inquiries import InquiriesSerializer
|
||||||
from transfer.serializers.inquiry_gallery import InquiryGallerySerializer
|
from transfer.serializers.inquiry_gallery import InquiryGallerySerializer
|
||||||
from transfer.serializers.reviews import LanguageSerializer, ReviewSerializer, ReviewTextSerializer
|
from transfer.serializers.reviews import (
|
||||||
|
LanguageSerializer, ReviewSerializer, ReviewTextSerializer, ProductReviewSerializer
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def transfer_languages():
|
def transfer_languages():
|
||||||
|
|
@ -103,6 +107,26 @@ def transfer_inquiry_photos():
|
||||||
pprint(f"InquiryGallery serializer errors: {serialized_data.errors}")
|
pprint(f"InquiryGallery serializer errors: {serialized_data.errors}")
|
||||||
|
|
||||||
|
|
||||||
|
def transfer_product_reviews():
|
||||||
|
|
||||||
|
products = Product.objects.filter(
|
||||||
|
old_id__isnull=False).values_list('old_id', flat=True)
|
||||||
|
|
||||||
|
users = User.objects.filter(
|
||||||
|
old_id__isnull=False).values_list('old_id', flat=True)
|
||||||
|
|
||||||
|
queryset = Reviews.objects.filter(
|
||||||
|
product_id__in=list(products),
|
||||||
|
reviewer_id__in=list(users),
|
||||||
|
).values('id', 'reviewer_id', 'aasm_state', 'created_at', 'product_id', 'mark', 'vintage')
|
||||||
|
|
||||||
|
serialized_data = ProductReviewSerializer(data=list(queryset.values()), many=True)
|
||||||
|
if serialized_data.is_valid():
|
||||||
|
serialized_data.save()
|
||||||
|
else:
|
||||||
|
pprint(f"ProductReviewSerializer serializer errors: {serialized_data.errors}")
|
||||||
|
|
||||||
|
|
||||||
data_types = {
|
data_types = {
|
||||||
"overlook": [
|
"overlook": [
|
||||||
# transfer_languages,
|
# transfer_languages,
|
||||||
|
|
@ -113,5 +137,8 @@ data_types = {
|
||||||
transfer_inquiries,
|
transfer_inquiries,
|
||||||
transfer_grid,
|
transfer_grid,
|
||||||
transfer_inquiry_photos,
|
transfer_inquiry_photos,
|
||||||
|
],
|
||||||
|
"product_review": [
|
||||||
|
transfer_product_reviews,
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,11 +36,13 @@ class Command(BaseCommand):
|
||||||
'souvenir',
|
'souvenir',
|
||||||
'establishment_note',
|
'establishment_note',
|
||||||
'assemblage',
|
'assemblage',
|
||||||
'rating_count'
|
'rating_count',
|
||||||
|
'product_review',
|
||||||
]
|
]
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
"""Находим включённую опцию путём пересечения множества типов данных и множества включённых опций"""
|
"""
|
||||||
|
Находим включённую опцию путём пересечения множества типов данных и множества включённых опций"""
|
||||||
data_type = list(set(option for option in options.keys() if options[option]) & set(self.LONG_DATA_TYPES))
|
data_type = list(set(option for option in options.keys() if options[option]) & set(self.LONG_DATA_TYPES))
|
||||||
if len(data_type) != 1:
|
if len(data_type) != 1:
|
||||||
data_type = list(set(option for option in options.keys() if options[option]) & set(self.SHORT_DATA_TYPES))
|
data_type = list(set(option for option in options.keys() if options[option]) & set(self.SHORT_DATA_TYPES))
|
||||||
|
|
|
||||||
|
|
@ -711,7 +711,7 @@ class Reviews(MigrateMixin):
|
||||||
reviewer = models.ForeignKey(Accounts, models.DO_NOTHING, blank=True, null=True)
|
reviewer = models.ForeignKey(Accounts, models.DO_NOTHING, blank=True, null=True)
|
||||||
priority = models.IntegerField(blank=True, null=True)
|
priority = models.IntegerField(blank=True, null=True)
|
||||||
# TODO: модель Products в postgres закомментирована
|
# TODO: модель Products в postgres закомментирована
|
||||||
# product = models.ForeignKey("Products", models.DO_NOTHING, blank=True, null=True)
|
product = models.ForeignKey("Products", models.DO_NOTHING, blank=True, null=True)
|
||||||
received_at = models.DateTimeField(blank=True, null=True)
|
received_at = models.DateTimeField(blank=True, null=True)
|
||||||
reviewer_name = models.CharField(max_length=255, blank=True, null=True)
|
reviewer_name = models.CharField(max_length=255, blank=True, null=True)
|
||||||
type = models.CharField(max_length=255, blank=True, null=True)
|
type = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ from review.models import Review
|
||||||
from account.models import User
|
from account.models import User
|
||||||
from translation.models import Language
|
from translation.models import Language
|
||||||
from establishment.models import Establishment
|
from establishment.models import Establishment
|
||||||
|
from product.models import Product
|
||||||
|
|
||||||
|
|
||||||
class ReviewSerializer(serializers.Serializer):
|
class ReviewSerializer(serializers.Serializer):
|
||||||
|
|
@ -49,6 +50,50 @@ class ReviewSerializer(serializers.Serializer):
|
||||||
return establishment
|
return establishment
|
||||||
|
|
||||||
|
|
||||||
|
class ProductReviewSerializer(ReviewSerializer):
|
||||||
|
vintage = serializers.IntegerField()
|
||||||
|
mark = serializers.FloatField(allow_null=True)
|
||||||
|
product_id = serializers.IntegerField()
|
||||||
|
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
|
||||||
|
aasm_state = serializers.CharField(allow_null=True)
|
||||||
|
reviewer_id = serializers.IntegerField()
|
||||||
|
id = serializers.IntegerField()
|
||||||
|
|
||||||
|
def validate(self, data):
|
||||||
|
data.update({
|
||||||
|
'reviewer': self.get_reviewer(data),
|
||||||
|
'status': Review.READY if data['aasm_state'] == 'published' else Review.TO_INVESTIGATE,
|
||||||
|
'published_at': data.pop('created_at'),
|
||||||
|
'old_id': data.pop('id'),
|
||||||
|
'content_object': self.get_product(data),
|
||||||
|
})
|
||||||
|
data.pop('reviewer_id')
|
||||||
|
data.pop('product_id')
|
||||||
|
data.pop('aasm_state')
|
||||||
|
return data
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
obj, _ = Review.objects.update_or_create(
|
||||||
|
old_id=validated_data['old_id'],
|
||||||
|
defaults=validated_data,
|
||||||
|
)
|
||||||
|
return obj
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_reviewer(data):
|
||||||
|
user = User.objects.filter(old_id=data['reviewer_id']).first()
|
||||||
|
if not user:
|
||||||
|
raise ValueError(f"User account not found with old_id {data['reviewer_id']}")
|
||||||
|
return user
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_product(data):
|
||||||
|
establishment = Product.objects.filter(old_id=data['product_id']).first()
|
||||||
|
if not establishment:
|
||||||
|
raise ValueError(f"Product not found with old_id {data['product_id']}: ")
|
||||||
|
return establishment
|
||||||
|
|
||||||
|
|
||||||
class ReviewTextSerializer(serializers.Serializer):
|
class ReviewTextSerializer(serializers.Serializer):
|
||||||
review_id = serializers.IntegerField()
|
review_id = serializers.IntegerField()
|
||||||
locale = serializers.CharField(allow_null=True)
|
locale = serializers.CharField(allow_null=True)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user