Ejemplo n.º 1
0
    def _parse_data(self, data):
        if self._validate_filetype(data.get('formato')):
            if data.get('tamanho') in [None, ""]:
                msg = u"Defina o tamanho do arquivo (em bytes)."
                raise serializers.ValidationError(msg)
            if data.get('nome_arquivo') in [None, ""]:
                msg = u"Defina o nome do arquivo."
                raise serializers.ValidationError(msg)
            if data.get('formato') in [None, ""]:
                msg = u"Defina o formato válido, no padrão MIME."
                raise serializers.ValidationError(msg)
            if data.get('base64') in [None, ""]:
                msg = u"Envie o arquivo no formato base64."
                raise serializers.ValidationError(msg)

            # Validando o formato base64
            base64_pattern = r'(?:[A-Za-z0-9+/]{4}){2,}(?:[A-Za-z0-9+/]{2}' \
            '[AEIMQUYcgkosw048]=|[A-Za-z0-9+/][AQgw]==)'

            if re.search(base64_pattern, data.get('base64')) is None:
                msg = u"Envie um arquivo com formato base64 válido."
                raise serializers.ValidationError(msg)

            if isinstance(data, dict):
                id = uuid.uuid4()
                content, ext = data.get('formato').split("/")
                data = ContentFile(base64.b64decode(data.get('base64')),
                                   name=id.urn[9:] + '.' + ext)
            return data
        else:
            msg = u"Arquivo no formato {0} inválido.".format(data.get('formato'))
            raise serializers.ValidationError(msg)
Ejemplo n.º 2
0
    def _parse_data(self, data):
        if self._validate_filetype(data.get('formato')):
            if data.get('tamanho') in [None, ""]:
                msg = u"Defina o tamanho do arquivo (em bytes)."
                raise serializers.ValidationError(msg)
            if data.get('nome_arquivo') in [None, ""]:
                msg = u"Defina o nome do arquivo."
                raise serializers.ValidationError(msg)
            if data.get('formato') in [None, ""]:
                msg = u"Defina o formato válido, no padrão MIME."
                raise serializers.ValidationError(msg)
            if data.get('base64') in [None, ""]:
                msg = u"Envie o arquivo no formato base64."
                raise serializers.ValidationError(msg)

            # Validando o formato base64
            base64_pattern = r'(?:[A-Za-z0-9+/]{4}){2,}(?:[A-Za-z0-9+/]{2}' \
            '[AEIMQUYcgkosw048]=|[A-Za-z0-9+/][AQgw]==)'

            if re.search(base64_pattern, data.get('base64')) is None:
                msg = u"Envie um arquivo com formato base64 válido."
                raise serializers.ValidationError(msg)

            if isinstance(data, dict):
                id = uuid.uuid4()
                content, ext = data.get('formato').split("/")
                data = ContentFile(base64.b64decode(data.get('base64')),
                                   name=id.urn[9:] + '.' + ext)
            return data
        else:
            msg = u"Arquivo no formato {0} inválido.".format(
                data.get('formato'))
            raise serializers.ValidationError(msg)
Ejemplo n.º 3
0
    def validate(self, data):
        business_id = data.get("business_id", "")
        category_name = data.get("category_name", "")
        user_id = data.get("user_id", "")
        post_id = data.get("post_id", "")
        force_to_vote = data.get("force_to_vote", "")
        comment = data.get("comment", "")
        if force_to_vote == "":  # Check vote forcefully or not.
            force_to_vote = False
        if User.objects.filter(
                id=user_id).exists():  # Check user exist or not.
            user_instance = get_object_or_404(User, id=user_id)
        else:
            mes = "User not exists."  # Message if user not exist.
            raise exceptions.APIException(
                mes)  # Call message if user not exist.

        if Business_Details.objects.filter(business_id=business_id).exists(
        ):  # Check business exist or not.
            business_instance = get_object_or_404(Business_Details,
                                                  business_id=business_id)
        else:
            mes = "Business not exists."  # Message if business not exist.
            raise exceptions.APIException(
                mes)  # Call message if business not exist.

        category_name = category_name.lower(
        )  # Convert category name into lower case.
        if Category.objects.filter(
                name=category_name).exists():  # Check Category exist or not.
            category_instance = get_object_or_404(Category, name=category_name)
        else:
            category_instance = Category(
                name=category_name,
                created_by=user_instance)  # If category not exist.
            category_instance.save()  # Save category into table.

        if not force_to_vote:  # If vote is not forcefully.
            post_data = Post_Activity.objects.filter(
                User_id=user_instance).filter(
                    Vote=True)  # Get user voting list.
            for get_data in post_data:
                if category_instance == get_data.Post_id.Category_id:  # Check user already voted on same category.
                    mes = "Already voted on another post."  # Message if already voted.
                    raise exceptions.APIException(
                        mes)  # Call message if already voted.

            if post_id:  # Check post id given or not.
                if Business_Posts.objects.filter(
                        id=post_id).exists():  # check business post available.
                    business_post_instance = get_object_or_404(
                        Business_Posts, id=post_id)  # get post instance.
                    Post_Set = Business_Posts(
                        Business_id=business_post_instance.Business_id,
                        Category_id=business_post_instance.Category_id,
                        comment=business_post_instance.comment,
                        image=business_post_instance.image,
                        owner_id=str(user_instance.id),
                        created_by=user_instance,
                        update_by=user_instance,
                    )  # Insert value in business post table according to filed name.
                    Post_Set.save()  # Save post data into table.

                    Post_Activity_Set = Post_Activity(
                        Post_id=business_post_instance,
                        User_id=user_instance,
                        Vote=True,
                        created_by=user_instance,
                        update_by=user_instance,
                    )  # Insert value in post activity table according to filed name.
                    Post_Activity_Set.save()  # Save post activity into table.
                    Notification_Set = Notification(
                        message=user_instance.full_name + " vote your post.",
                        user_name=user_instance.full_name,
                        user=user_instance,
                        post=business_post_instance,
                        owner=business_post_instance.created_by,
                    )
                    Notification_Set.save()
                    count = Post_Activity.objects.filter(
                        Post_id__Business_id=business_instance).filter(
                            Vote=True).count()
                    Business_Details.objects.filter(
                        business_id=business_id).update(total_vote=count)

                    cat_count = Post_Activity.objects.filter(
                        Post_id__Business_id=business_instance).filter(
                            Post_id__Category_id=category_instance).filter(
                                Vote=True).count()
                    Business_Posts.objects.filter(
                        Business_id=business_instance).filter(
                            Category_id=category_instance).update(
                                total_vote=cat_count)

            else:  # If post id not given.
                image = data.get("image", "")
                Post_Set = Business_Posts(
                    Business_id=business_instance,
                    Category_id=category_instance,
                    comment=comment,
                    owner_id=str(user_instance.id),
                    created_by=user_instance,
                    update_by=user_instance,
                )  # Insert value in business post table according to filed name.
                Post_Set.save()  # Save post data into table.

                if image:  # If post image avilable.
                    # image upload function
                    data = ContentFile(base64.b64decode(image))
                    get_image = Image.open(data)
                    filetype = get_image.format
                    ext = filetype.lower()
                    today_date = date.today()
                    set_file_name = str(business_id) + str(
                        today_date.day) + "_" + str(
                            today_date.month) + "_" + str(today_date.year)
                    file_name = set_file_name + "." + ext
                    data = ContentFile(base64.b64decode(image), name=file_name)
                    Post_Set.image = data
                    Post_Set.save()

                    # ---------------------------------------
                    photos_info = Business_Photos(
                        url=settings.IMAGE_BASE_URL + Post_Set.image.url,
                        Business_id=business_instance)
                    photos_info.save()
                #     --------------------------------------------

                Post_Activity_Set = Post_Activity(
                    Post_id=Post_Set,
                    User_id=user_instance,
                    Vote=True,
                    created_by=user_instance,
                    update_by=user_instance,
                )  # Insert value in post activity table according to filed name.
                Post_Activity_Set.save()  # Save post activity into table.

                # Notification_Set = Notification(
                #     message= user_instance.full_name + " vote your post.",
                #     user_name=user_instance.full_name,
                #     user=user_instance,
                #     post=Post_Set,
                #     owner=Post_Set.created_by,
                # )
                # Notification_Set.save()
                count = Post_Activity.objects.filter(
                    Post_id__Business_id=business_instance).filter(
                        Vote=True).count()
                Business_Details.objects.filter(
                    business_id=business_id).update(total_vote=count)

                cat_count = Post_Activity.objects.filter(
                    Post_id__Business_id=business_instance).filter(
                        Post_id__Category_id=category_instance).filter(
                            Vote=True).count()
                Business_Posts.objects.filter(
                    Business_id=business_instance).filter(
                        Category_id=category_instance).update(
                            total_vote=cat_count)

        else:  # If vote is forcefully.
            post_data = Post_Activity.objects.filter(
                User_id=user_instance).filter(
                    Vote=True)  # Get user voting list.
            for get_data in post_data:
                if category_instance == get_data.Post_id.Category_id:  # Check user already voted on same category.
                    Post_Activity.objects.filter(id=get_data.id).update(
                        Vote=False)  # Remove vote from post.

                    post_activity_instance = get_object_or_404(Post_Activity,
                                                               id=get_data.id)

                    Notification_Set = Notification(
                        message=user_instance.full_name +
                        " remove vote from your post.",
                        user_name=user_instance.full_name,
                        user=user_instance,
                        post=post_activity_instance.Post_id,
                        owner=post_activity_instance.Post_id.created_by,
                    )
                    Notification_Set.save()

                    Remove_Set = Remove_Activity(
                        Post_id=post_activity_instance.Post_id,
                        User_id=post_activity_instance.Post_id.created_by,
                        type="Vote",
                    )
                    Remove_Set.save()

                    count = Post_Activity.objects.filter(
                        Post_id__Business_id=post_activity_instance.Post_id.
                        Business_id).filter(Vote=True).count()
                    Business_Details.objects.filter(
                        business_id=post_activity_instance.Post_id.Business_id.
                        business_id).update(total_vote=count)

                    cat_count = Post_Activity.objects.filter(
                        Post_id__Business_id=post_activity_instance.Post_id.
                        Business_id).filter(
                            Post_id__Category_id=post_activity_instance.
                            Post_id.Category_id).filter(Vote=True).count()
                    Business_Posts.objects.filter(
                        Business_id=post_activity_instance.Post_id.Business_id
                    ).filter(Category_id=post_activity_instance.Post_id.
                             Category_id).update(total_vote=cat_count)

            if post_id:  # Check post id given or not.
                if Business_Posts.objects.filter(
                        id=post_id).exists():  # check business post available.
                    business_post_instance = get_object_or_404(
                        Business_Posts, id=post_id)  # get post instance.
                    Post_Set = Business_Posts(
                        Business_id=business_post_instance.Business_id,
                        Category_id=business_post_instance.Category_id,
                        comment=business_post_instance.comment,
                        image=business_post_instance.image,
                        owner_id=str(user_instance.id),
                        created_by=user_instance,
                        update_by=user_instance,
                    )  # Insert value in business post table according to filed name.
                    Post_Set.save()  # Save post data into table.

                    Post_Activity_Set = Post_Activity(
                        Post_id=business_post_instance,
                        User_id=user_instance,
                        Vote=True,
                        created_by=user_instance,
                        update_by=user_instance,
                    )  # Insert value in post activity table according to filed name.
                    Post_Activity_Set.save(
                    )  # Save post activity data into table.

                    Notification_Set = Notification(
                        message=user_instance.full_name + " vote your post.",
                        user_name=user_instance.full_name,
                        user=user_instance,
                        post=business_post_instance,
                        owner=business_post_instance.created_by,
                    )
                    Notification_Set.save()
                    count = Post_Activity.objects.filter(
                        Post_id__Business_id=business_instance).filter(
                            Vote=True).count()
                    Business_Details.objects.filter(
                        business_id=business_id).update(total_vote=count)

                    cat_count = Post_Activity.objects.filter(
                        Post_id__Business_id=business_instance).filter(
                            Post_id__Category_id=category_instance).filter(
                                Vote=True).count()
                    Business_Posts.objects.filter(
                        Business_id=business_instance).filter(
                            Category_id=category_instance).update(
                                total_vote=cat_count)

            else:  # If post id not given.
                image = data.get("image", "")
                Post_Set = Business_Posts(
                    Business_id=business_instance,
                    Category_id=category_instance,
                    comment=comment,
                    owner_id=str(user_instance.id),
                    created_by=user_instance,
                    update_by=user_instance,
                )  # Insert value in business post table according to filed name.
                Post_Set.save()  # Save post data into table.

                if image:  # If post image avilable.
                    # image upload function
                    data = ContentFile(base64.b64decode(image))
                    get_image = Image.open(data)
                    filetype = get_image.format
                    ext = filetype.lower()
                    today_date = date.today()
                    set_file_name = str(business_id) + str(
                        today_date.day) + "_" + str(
                            today_date.month) + "_" + str(today_date.year)
                    file_name = set_file_name + "." + ext
                    data = ContentFile(base64.b64decode(image), name=file_name)
                    Post_Set.image = data
                    Post_Set.save()

                    # ---------------------------------------
                    photos_info = Business_Photos(
                        url=settings.IMAGE_BASE_URL + Post_Set.image.url,
                        Business_id=business_instance)
                    photos_info.save()
                #     --------------------------------------------

                Post_Activity_Set = Post_Activity(
                    Post_id=Post_Set,
                    User_id=user_instance,
                    Vote=True,
                    created_by=user_instance,
                    update_by=user_instance,
                )  # Insert value in post activity table according to filed name.
                Post_Activity_Set.save()  # Save post activity into table.

                # Notification_Set = Notification(
                #     message=user_instance.full_name + " vote your post.",
                #     user_name=user_instance.full_name,
                #     user=user_instance,
                #     post=Post_Set,
                #     owner=Post_Set.created_by,
                # )
                # Notification_Set.save()
                #         ---------------------------------
                count = Post_Activity.objects.filter(
                    Post_id__Business_id=business_instance).filter(
                        Vote=True).count()
                # business_instance.update(total_vote=count)
                Business_Details.objects.filter(
                    business_id=business_id).update(total_vote=count)

                cat_count = Post_Activity.objects.filter(
                    Post_id__Business_id=business_instance).filter(
                        Post_id__Category_id=category_instance).filter(
                            Vote=True).count()
                Business_Posts.objects.filter(
                    Business_id=business_instance).filter(
                        Category_id=category_instance).update(
                            total_vote=cat_count)

        return user_id