mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 10:05:21 +00:00
change in update api, added method to upload and get image url
This commit is contained in:
@ -11,7 +11,7 @@ from base.constants import (ARTICLE_SURVEY_POINTS, MAX_ARTICLE_CARD, MIN_ARTICLE
|
||||
from base.messages import ERROR_CODE
|
||||
from guardian.utils import upload_image_to_alibaba
|
||||
from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey, DefaultArticleCardImage
|
||||
from web_admin.utils import pop_id
|
||||
from web_admin.utils import pop_id, get_image_url
|
||||
|
||||
USER = get_user_model()
|
||||
|
||||
@ -32,11 +32,7 @@ class ArticleCardSerializer(serializers.ModelSerializer):
|
||||
fields = ('id', 'title', 'description', 'image', 'image_url')
|
||||
|
||||
def create(self, validated_data):
|
||||
if 'image' in validated_data and validated_data['image'] is not None:
|
||||
image = validated_data.pop('image')
|
||||
filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}"
|
||||
# upload image on ali baba
|
||||
validated_data['image_url'] = upload_image_to_alibaba(image, filename)
|
||||
validated_data['image_url'] = get_image_url(validated_data)
|
||||
article_card = ArticleCard.objects.create(article_id='1', **validated_data)
|
||||
return article_card
|
||||
|
||||
@ -111,11 +107,7 @@ class ArticleSerializer(serializers.ModelSerializer):
|
||||
|
||||
for card in article_cards:
|
||||
card = pop_id(card)
|
||||
if 'image' in card and card['image'] is not None:
|
||||
image = card.pop('image')
|
||||
filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}"
|
||||
# upload image on ali baba
|
||||
card['image_url'] = upload_image_to_alibaba(image, filename)
|
||||
card['image_url'] = get_image_url(card)
|
||||
ArticleCard.objects.create(article=article, **card)
|
||||
|
||||
for survey in article_survey:
|
||||
@ -139,28 +131,22 @@ class ArticleSerializer(serializers.ModelSerializer):
|
||||
instance.title = validated_data.get('title', instance.title)
|
||||
instance.description = validated_data.get('description', instance.description)
|
||||
instance.save()
|
||||
|
||||
prev_card = list(ArticleCard.objects.filter(article=instance).values_list('id', flat=True))
|
||||
# Update or create cards
|
||||
for card_data in article_cards:
|
||||
card_id = card_data.get('id', None)
|
||||
if card_id:
|
||||
prev_card.remove(card_id)
|
||||
card = ArticleCard.objects.get(id=card_id, article=instance)
|
||||
card.title = card_data.get('title', card.title)
|
||||
card.description = card_data.get('description', card.description)
|
||||
if 'image' in card_data and card_data['image'] is not None:
|
||||
image = card_data.pop('image')
|
||||
filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}"
|
||||
# upload image on ali baba
|
||||
card.image_url = upload_image_to_alibaba(image, filename)
|
||||
card.image_url = get_image_url(card_data)
|
||||
card.save()
|
||||
else:
|
||||
card_data = pop_id(card_data)
|
||||
if 'image' in card_data and card_data['image'] is not None:
|
||||
image = card_data.pop('image')
|
||||
filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}"
|
||||
# upload image on ali baba
|
||||
card_data['image_url'] = upload_image_to_alibaba(image, filename)
|
||||
card_data['image_url'] = get_image_url(card_data)
|
||||
ArticleCard.objects.create(article=instance, **card_data)
|
||||
ArticleCard.objects.filter(id__in=prev_card, article=instance).delete()
|
||||
|
||||
# Update or create survey sections
|
||||
for survey_data in article_survey:
|
||||
@ -172,7 +158,7 @@ class ArticleSerializer(serializers.ModelSerializer):
|
||||
survey.save()
|
||||
else:
|
||||
survey_data = pop_id(survey_data)
|
||||
survey = ArticleSurvey.objects.create(article=instance, **survey_data)
|
||||
survey = ArticleSurvey.objects.create(article=instance, points=ARTICLE_SURVEY_POINTS, **survey_data)
|
||||
|
||||
# Update or create survey options
|
||||
for option_data in options_data:
|
||||
@ -210,6 +196,9 @@ class DefaultArticleCardImageSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
if 'image' not in attrs and attrs.get('image') is None:
|
||||
raise serializers.ValidationError({'details': ERROR_CODE['2061']})
|
||||
image = attrs.get('image')
|
||||
if image and image.size == NUMBER['zero']:
|
||||
raise serializers.ValidationError(ERROR_CODE['2035'])
|
||||
return attrs
|
||||
|
||||
def create(self, validated_data):
|
||||
@ -217,12 +206,7 @@ class DefaultArticleCardImageSerializer(serializers.ModelSerializer):
|
||||
to create and upload image
|
||||
:return: card_image object
|
||||
"""
|
||||
image = validated_data.pop('image')
|
||||
filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}"
|
||||
if image and image.size == NUMBER['zero']:
|
||||
raise serializers.ValidationError(ERROR_CODE['2035'])
|
||||
# upload image on ali baba
|
||||
validated_data['image_url'] = upload_image_to_alibaba(image, filename)
|
||||
validated_data['image_url'] = get_image_url(validated_data)
|
||||
|
||||
card_image = DefaultArticleCardImage.objects.create(**validated_data)
|
||||
return card_image
|
||||
|
Reference in New Issue
Block a user