gault-millau/apps/transfer/serializers/inquiries.py
2019-11-11 14:45:33 +03:00

76 lines
2.9 KiB
Python

from rest_framework import serializers
from account.models import User
from review.models import Inquiries, Review
class InquiriesSerializer(serializers.Serializer):
id = serializers.IntegerField()
comment = serializers.CharField(allow_null=True, allow_blank=True)
final_comment = serializers.CharField(allow_null=True, allow_blank=True)
mark = serializers.FloatField(allow_null=True)
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
review_id = serializers.IntegerField()
attachment_content_type = serializers.CharField(allow_null=True, allow_blank=True)
attachment_suffix_url = serializers.CharField(allow_null=True, allow_blank=True)
account_id = serializers.IntegerField(allow_null=True)
bill_content_type = serializers.CharField(allow_null=True, allow_blank=True)
bill_suffix_url = serializers.CharField(allow_null=True, allow_blank=True)
price = serializers.DecimalField(max_digits=7, decimal_places=2, allow_null=True)
moment = serializers.CharField(allow_null=True, allow_blank=True)
published = serializers.IntegerField(allow_null=True)
decibels = serializers.CharField(allow_null=True, allow_blank=True)
nomination = serializers.CharField(allow_null=True, allow_blank=True)
nominee = serializers.CharField(allow_null=True, allow_blank=True)
def validate(self, data):
data.update({
'old_id': data.pop('id'),
'review': self.get_review(data),
'created': data.pop('created_at'),
'published': bool(data['published']),
'moment': self.get_moment(data),
'author': self.get_author(data),
'attachment_file': data['attachment_suffix_url'] if data['attachment_content_type'] else '',
'bill_file': data['bill_suffix_url'] if data['bill_content_type'] else '',
})
data.pop('review_id')
data.pop('account_id')
data.pop('attachment_suffix_url')
data.pop('bill_suffix_url')
return data
def create(self, validated_data):
try:
return Inquiries.objects.create(**validated_data)
except Exception as e:
raise ValueError(f"Error creating Inquiries with {validated_data}: {e}")
@staticmethod
def get_review(data):
review = Review.objects.filter(old_id=data['review_id']).first()
if not review:
raise ValueError(f"Review not found with old_id {data['review_id']}")
return review
@staticmethod
def get_moment(data):
moments = {
'lanch': Inquiries.LUNCH,
'diner': Inquiries.DINER,
}
moment = data['moment']
return moments.get(moment, Inquiries.NONE)
@staticmethod
def get_author(data):
user = User.objects.filter(old_id=data['account_id']).first()
if not user:
raise ValueError(f"User account not found with old_id {data['account_id']}")
return user