mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-11-26 08:34:55 +00:00
@ -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):
|
||||||
|
|||||||
19
web_admin/migrations/0004_alter_surveyoption_survey.py
Normal file
19
web_admin/migrations/0004_alter_surveyoption_survey.py
Normal 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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user