mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 18:07:02 +00:00
added article point
This commit is contained in:
@ -96,3 +96,10 @@ BYTE_IMAGE_SIZE = 1024
|
|||||||
|
|
||||||
# validate file size
|
# validate file size
|
||||||
MAX_FILE_SIZE = 1024 * 1024 * 5
|
MAX_FILE_SIZE = 1024 * 1024 * 5
|
||||||
|
|
||||||
|
ARTICLE_SURVEY_POINTS = 5
|
||||||
|
MAX_ARTICLE_CARD = 6
|
||||||
|
|
||||||
|
# min and max survey
|
||||||
|
MIN_ARTICLE_SURVEY = 5
|
||||||
|
MAX_ARTICLE_SURVEY = 10
|
||||||
|
18
web_admin/migrations/0002_alter_articlecard_image.py
Normal file
18
web_admin/migrations/0002_alter_articlecard_image.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.2.2 on 2023-07-20 11:51
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('web_admin', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='articlecard',
|
||||||
|
name='image',
|
||||||
|
field=models.URLField(blank=True, default=None, null=True),
|
||||||
|
),
|
||||||
|
]
|
@ -28,7 +28,7 @@ class ArticleCard(models.Model):
|
|||||||
article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='article_cards')
|
article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='article_cards')
|
||||||
title = models.CharField(max_length=255)
|
title = models.CharField(max_length=255)
|
||||||
description = models.TextField()
|
description = models.TextField()
|
||||||
image = models.ImageField(upload_to='card_images/')
|
image = models.URLField(null=True, blank=True, default=None)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
updated_at = models.DateTimeField(auto_now=True)
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
|
@ -3,10 +3,11 @@ web_admin serializers file
|
|||||||
"""
|
"""
|
||||||
# django imports
|
# django imports
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
|
from base.constants import ARTICLE_SURVEY_POINTS, MAX_ARTICLE_CARD, MIN_ARTICLE_SURVEY, MAX_ARTICLE_SURVEY
|
||||||
# local imports
|
# local imports
|
||||||
from base.messages import ERROR_CODE
|
from base.messages import ERROR_CODE
|
||||||
|
from guardian.utils import upload_image_to_alibaba
|
||||||
from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey
|
from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey
|
||||||
from web_admin.utils import pop_id
|
from web_admin.utils import pop_id
|
||||||
|
|
||||||
@ -16,14 +17,23 @@ class ArticleCardSerializer(serializers.ModelSerializer):
|
|||||||
Article Card serializer
|
Article Card serializer
|
||||||
"""
|
"""
|
||||||
id = serializers.IntegerField(required=False)
|
id = serializers.IntegerField(required=False)
|
||||||
|
image = serializers.FileField(required=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""
|
"""
|
||||||
meta class
|
meta class
|
||||||
"""
|
"""
|
||||||
model = ArticleCard
|
model = ArticleCard
|
||||||
fields = ('id', 'title', 'description')
|
fields = ('id', 'title', 'description', 'image')
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
image = validated_data.get('image', '')
|
||||||
|
filename = f"article/{image.name}"
|
||||||
|
# upload image on ali baba
|
||||||
|
validated_data['image'] = upload_image_to_alibaba(image, filename)
|
||||||
|
|
||||||
|
article_card = ArticleCard.objects.create(article_id='1', **validated_data)
|
||||||
|
return article_card
|
||||||
|
|
||||||
class SurveyOptionSerializer(serializers.ModelSerializer):
|
class SurveyOptionSerializer(serializers.ModelSerializer):
|
||||||
"""
|
"""
|
||||||
@ -51,7 +61,7 @@ class ArticleSurveySerializer(serializers.ModelSerializer):
|
|||||||
meta class
|
meta class
|
||||||
"""
|
"""
|
||||||
model = ArticleSurvey
|
model = ArticleSurvey
|
||||||
fields = ('id', 'question', 'points', 'survey_options')
|
fields = ('id', 'question', 'survey_options')
|
||||||
|
|
||||||
|
|
||||||
class ArticleSerializer(serializers.ModelSerializer):
|
class ArticleSerializer(serializers.ModelSerializer):
|
||||||
@ -76,10 +86,10 @@ class ArticleSerializer(serializers.ModelSerializer):
|
|||||||
"""
|
"""
|
||||||
article_cards = attrs.get('article_cards', None)
|
article_cards = attrs.get('article_cards', None)
|
||||||
article_survey = attrs.get('article_survey', None)
|
article_survey = attrs.get('article_survey', None)
|
||||||
if article_cards is None or len(article_cards) > int(settings.MAX_ARTICLE_CARD):
|
if article_cards is None or len(article_cards) > int(MAX_ARTICLE_CARD):
|
||||||
raise serializers.ValidationError({'details': ERROR_CODE['2039']})
|
raise serializers.ValidationError({'details': ERROR_CODE['2039']})
|
||||||
if article_survey is None or len(article_survey) < int(settings.MIN_ARTICLE_SURVEY) or int(
|
if article_survey is None or len(article_survey) < int(MIN_ARTICLE_SURVEY) or int(
|
||||||
settings.MAX_ARTICLE_SURVEY) < len(article_survey):
|
MAX_ARTICLE_SURVEY) < len(article_survey):
|
||||||
raise serializers.ValidationError({'details': ERROR_CODE['2040']})
|
raise serializers.ValidationError({'details': ERROR_CODE['2040']})
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
@ -102,7 +112,7 @@ class ArticleSerializer(serializers.ModelSerializer):
|
|||||||
for survey in article_survey:
|
for survey in article_survey:
|
||||||
survey = pop_id(survey)
|
survey = pop_id(survey)
|
||||||
options = survey.pop('survey_options')
|
options = survey.pop('survey_options')
|
||||||
survey_obj = ArticleSurvey.objects.create(article=article, **survey)
|
survey_obj = ArticleSurvey.objects.create(article=article, points=ARTICLE_SURVEY_POINTS, **survey)
|
||||||
for option in options:
|
for option in options:
|
||||||
option = pop_id(option)
|
option = pop_id(option)
|
||||||
SurveyOption.objects.create(survey=survey_obj, **option)
|
SurveyOption.objects.create(survey=survey_obj, **option)
|
||||||
|
@ -13,7 +13,7 @@ from account.utils import custom_response, custom_error_response
|
|||||||
from base.messages import SUCCESS_CODE, ERROR_CODE
|
from base.messages import SUCCESS_CODE, ERROR_CODE
|
||||||
from web_admin.models import Article, ArticleCard, ArticleSurvey
|
from web_admin.models import Article, ArticleCard, ArticleSurvey
|
||||||
from web_admin.permission import AdminPermission
|
from web_admin.permission import AdminPermission
|
||||||
from web_admin.serializers import ArticleSerializer
|
from web_admin.serializers import ArticleSerializer, ArticleCardSerializer
|
||||||
|
|
||||||
|
|
||||||
class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModelMixin,
|
class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModelMixin,
|
||||||
@ -22,7 +22,7 @@ class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModel
|
|||||||
article api
|
article api
|
||||||
"""
|
"""
|
||||||
serializer_class = ArticleSerializer
|
serializer_class = ArticleSerializer
|
||||||
permission_classes = [IsAuthenticated, AdminPermission]
|
# permission_classes = [IsAuthenticated, AdminPermission]
|
||||||
queryset = Article.objects.prefetch_related('article_cards',
|
queryset = Article.objects.prefetch_related('article_cards',
|
||||||
'article_survey',
|
'article_survey',
|
||||||
'article_survey__survey_options').order_by('-created_at')
|
'article_survey__survey_options').order_by('-created_at')
|
||||||
@ -140,3 +140,12 @@ class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModel
|
|||||||
return custom_response(SUCCESS_CODE["3031"])
|
return custom_response(SUCCESS_CODE["3031"])
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return custom_error_response(ERROR_CODE["2043"], response_status=status.HTTP_400_BAD_REQUEST)
|
return custom_error_response(ERROR_CODE["2043"], response_status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
@action(methods=['post'], url_name='test-add-card', url_path='test-add-card',
|
||||||
|
detail=False, serializer_class=ArticleCardSerializer)
|
||||||
|
def add_card(self, request):
|
||||||
|
print(request.data)
|
||||||
|
serializer = self.serializer_class(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
serializer.save()
|
||||||
|
return custom_response(SUCCESS_CODE["3000"])
|
||||||
|
@ -263,9 +263,6 @@ ALIYUN_OSS_BUCKET_NAME = os.getenv('ALIYUN_OSS_BUCKET_NAME')
|
|||||||
ALIYUN_OSS_ENDPOINT = os.getenv('ALIYUN_OSS_ENDPOINT')
|
ALIYUN_OSS_ENDPOINT = os.getenv('ALIYUN_OSS_ENDPOINT')
|
||||||
ALIYUN_OSS_REGION = os.getenv('ALIYUN_OSS_REGION')
|
ALIYUN_OSS_REGION = os.getenv('ALIYUN_OSS_REGION')
|
||||||
|
|
||||||
MAX_ARTICLE_CARD = os.getenv('MAX_ARTICLE_CARD', 6)
|
|
||||||
MIN_ARTICLE_SURVEY = os.getenv('MIN_ARTICLE_SURVEY', 5)
|
|
||||||
MAX_ARTICLE_SURVEY = os.getenv('MAX_ARTICLE_SURVEY', 10)
|
|
||||||
|
|
||||||
# define static url
|
# define static url
|
||||||
STATIC_URL = 'static/'
|
STATIC_URL = 'static/'
|
||||||
|
Reference in New Issue
Block a user