Merge pull request #136 from KiwiTechLLC/dev

Dev
This commit is contained in:
Ankitajain-kiwi
2023-08-02 11:33:29 +05:30
committed by GitHub
6 changed files with 52 additions and 33 deletions

View File

@ -131,7 +131,6 @@ class TaskListAPIView(viewsets.ModelViewSet):
serializer_class = TaskDetailsSerializer serializer_class = TaskDetailsSerializer
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
pagination_class = PageNumberPagination pagination_class = PageNumberPagination
queryset = JuniorTask.objects.all()
http_method_names = ('get',) http_method_names = ('get',)
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):

View File

@ -0,0 +1,19 @@
# Generated by Django 4.2.2 on 2023-08-01 07:35
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('web_admin', '0003_defaultarticlecardimage_and_more'),
]
operations = [
migrations.AlterField(
model_name='surveyoption',
name='survey',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', to='web_admin.articlesurvey'),
),
]

View File

@ -56,7 +56,7 @@ class SurveyOption(models.Model):
""" """
Survey Options model Survey Options model
""" """
survey = models.ForeignKey(ArticleSurvey, on_delete=models.CASCADE, related_name='survey_options') survey = models.ForeignKey(ArticleSurvey, on_delete=models.CASCADE, related_name='options')
option = models.CharField(max_length=255) option = models.CharField(max_length=255)
is_answer = models.BooleanField(default=False) is_answer = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)

View File

@ -11,7 +11,7 @@ from base.constants import (ARTICLE_SURVEY_POINTS, MAX_ARTICLE_CARD, MIN_ARTICLE
from base.messages import ERROR_CODE from base.messages import ERROR_CODE
from guardian.utils import upload_image_to_alibaba from guardian.utils import upload_image_to_alibaba
from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey, DefaultArticleCardImage 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() USER = get_user_model()
@ -32,12 +32,9 @@ class ArticleCardSerializer(serializers.ModelSerializer):
fields = ('id', 'title', 'description', 'image', 'image_url') fields = ('id', 'title', 'description', 'image', 'image_url')
def create(self, validated_data): def create(self, validated_data):
if 'image' in validated_data and validated_data['image'] is not None: validated_data['image_url'] = get_image_url(validated_data)
image = validated_data.pop('image') article = Article.objects.all().first()
filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}" article_card = ArticleCard.objects.create(article=article, **validated_data)
# upload image on ali baba
validated_data['image_url'] = upload_image_to_alibaba(image, filename)
article_card = ArticleCard.objects.create(article_id='1', **validated_data)
return article_card return article_card
@ -111,11 +108,7 @@ class ArticleSerializer(serializers.ModelSerializer):
for card in article_cards: for card in article_cards:
card = pop_id(card) card = pop_id(card)
if 'image' in card and card['image'] is not None: card['image_url'] = get_image_url(card)
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)
ArticleCard.objects.create(article=article, **card) ArticleCard.objects.create(article=article, **card)
for survey in article_survey: for survey in article_survey:
@ -139,40 +132,36 @@ class ArticleSerializer(serializers.ModelSerializer):
instance.title = validated_data.get('title', instance.title) instance.title = validated_data.get('title', instance.title)
instance.description = validated_data.get('description', instance.description) instance.description = validated_data.get('description', instance.description)
instance.save() instance.save()
prev_card = list(ArticleCard.objects.filter(article=instance).values_list('id', flat=True))
# Update or create cards # Update or create cards
for card_data in article_cards: for card_data in article_cards:
card_id = card_data.get('id', None) card_id = card_data.get('id', None)
if card_id: if card_id:
prev_card.remove(card_id)
card = ArticleCard.objects.get(id=card_id, article=instance) card = ArticleCard.objects.get(id=card_id, article=instance)
card.title = card_data.get('title', card.title) card.title = card_data.get('title', card.title)
card.description = card_data.get('description', card.description) card.description = card_data.get('description', card.description)
if 'image' in card_data and card_data['image'] is not None: card.image_url = get_image_url(card_data)
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.save() card.save()
else: else:
card_data = pop_id(card_data) card_data = pop_id(card_data)
if 'image' in card_data and card_data['image'] is not None: card_data['image_url'] = get_image_url(card_data)
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)
ArticleCard.objects.create(article=instance, **card_data) ArticleCard.objects.create(article=instance, **card_data)
ArticleCard.objects.filter(id__in=prev_card, article=instance).delete()
prev_survey = list(ArticleSurvey.objects.filter(article=instance).values_list('id', flat=True))
# Update or create survey sections # Update or create survey sections
for survey_data in article_survey: for survey_data in article_survey:
survey_id = survey_data.get('id', None) survey_id = survey_data.get('id', None)
options_data = survey_data.pop('options') options_data = survey_data.pop('options')
if survey_id: if survey_id:
prev_survey.remove(survey_id)
survey = ArticleSurvey.objects.get(id=survey_id, article=instance) survey = ArticleSurvey.objects.get(id=survey_id, article=instance)
survey.question = survey_data.get('question', survey.question) survey.question = survey_data.get('question', survey.question)
survey.save() survey.save()
else: else:
survey_data = pop_id(survey_data) 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 # Update or create survey options
for option_data in options_data: for option_data in options_data:
@ -185,6 +174,7 @@ class ArticleSerializer(serializers.ModelSerializer):
else: else:
option_data = pop_id(option_data) option_data = pop_id(option_data)
SurveyOption.objects.create(survey=survey, **option_data) SurveyOption.objects.create(survey=survey, **option_data)
ArticleSurvey.objects.filter(id__in=prev_survey, article=instance).delete()
return instance return instance
@ -210,6 +200,9 @@ class DefaultArticleCardImageSerializer(serializers.ModelSerializer):
""" """
if 'image' not in attrs and attrs.get('image') is None: if 'image' not in attrs and attrs.get('image') is None:
raise serializers.ValidationError({'details': ERROR_CODE['2061']}) 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 return attrs
def create(self, validated_data): def create(self, validated_data):
@ -217,12 +210,7 @@ class DefaultArticleCardImageSerializer(serializers.ModelSerializer):
to create and upload image to create and upload image
:return: card_image object :return: card_image object
""" """
image = validated_data.pop('image') validated_data['image_url'] = get_image_url(validated_data)
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)
card_image = DefaultArticleCardImage.objects.create(**validated_data) card_image = DefaultArticleCardImage.objects.create(**validated_data)
return card_image return card_image

View File

@ -1,6 +1,8 @@
""" """
web_utils file web_utils file
""" """
from base.constants import ARTICLE_CARD_IMAGE_FOLDER
from guardian.utils import upload_image_to_alibaba
def pop_id(data): def pop_id(data):
@ -11,3 +13,14 @@ def pop_id(data):
""" """
data.pop('id') if 'id' in data else data data.pop('id') if 'id' in data else data
return data return data
def get_image_url(data):
if 'image_url' in data:
return data['image_url']
elif 'image' in data and data['image'] is not None:
image = data.pop('image')
filename = f"{ARTICLE_CARD_IMAGE_FOLDER}/{image.name}"
# upload image on ali baba
image_url = upload_image_to_alibaba(image, filename)
return image_url

View File

@ -36,7 +36,7 @@ class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModel
def get_queryset(self): def get_queryset(self):
article = self.queryset.objects.filter(is_deleted=False).prefetch_related( article = self.queryset.objects.filter(is_deleted=False).prefetch_related(
'article_cards', 'article_survey', 'article_survey__survey_options' 'article_cards', 'article_survey', 'article_survey__options'
).order_by('-created_at') ).order_by('-created_at')
queryset = self.filter_queryset(article) queryset = self.filter_queryset(article)
return queryset return queryset