From d9b6655ee8bf4d2a069480c001ea54742b14429f Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Mon, 4 Aug 2025 23:18:30 +0330 Subject: [PATCH] Add 'show_in_bot' field to ProductModel and implement BotProductsView for bot integration --- backend/product/admin.py | 2 +- .../0053_productmodel_show_in_bot.py | 18 +++++++++++ backend/product/models.py | 2 +- backend/product/serializers.py | 9 ++++++ backend/product/urls.py | 3 +- backend/product/views.py | 31 +++++++++++++++++++ 6 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 backend/product/migrations/0053_productmodel_show_in_bot.py diff --git a/backend/product/admin.py b/backend/product/admin.py index 92c0997..af34d12 100644 --- a/backend/product/admin.py +++ b/backend/product/admin.py @@ -198,7 +198,7 @@ class ProductModelAdmin(ModelAdmin, ImportExportModelAdmin): actions_list = ['redirect_to_learn', 'update_products_price'] list_display = ['display_image', 'display_price', 'view', 'show', 'rating', 'category', 'created_at'] fieldsets = ( - ('فیلد های اصلی', {'fields': ('name', 'description', 'category', 'related_products', 'show', 'shop'), "classes": ["tab"],}), + ('فیلد های اصلی', {'fields': ('name', 'description', 'category', 'related_products', 'show', 'shop', 'show_in_bot'), "classes": ["tab"],}), ('فیلد های سيو', {'fields': ('meta_description', 'meta_keywords', 'meta_rating', 'slug'), "classes": ["tab"],}), ('فیلد های مربوط به کاربر', {'fields': ('rating', 'view',), "classes": ["tab"],}), # ('فیلد های ایتم های پک', {'fields': ('in_pack_items', ), "classes": ["tab"],}) diff --git a/backend/product/migrations/0053_productmodel_show_in_bot.py b/backend/product/migrations/0053_productmodel_show_in_bot.py new file mode 100644 index 0000000..b32c182 --- /dev/null +++ b/backend/product/migrations/0053_productmodel_show_in_bot.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.2 on 2025-08-04 19:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('product', '0052_productmodel_shop'), + ] + + operations = [ + migrations.AddField( + model_name='productmodel', + name='show_in_bot', + field=models.BooleanField(default=False, verbose_name='نمایش در ربات'), + ), + ] diff --git a/backend/product/models.py b/backend/product/models.py index a221f92..44ebf6e 100644 --- a/backend/product/models.py +++ b/backend/product/models.py @@ -123,7 +123,7 @@ class ProductModel(models.Model): category = models.ForeignKey(SubCategoryModel, null=True, on_delete=models.SET_NULL, related_name='products', verbose_name='دسته بندی محصول') related_products = models.ManyToManyField('self', blank=True, verbose_name='محصولات مرتبط') shop = models.ForeignKey('account.ShopModel', on_delete=models.CASCADE, related_name='products', verbose_name='فروشگاه', blank=True, null=True) - + show_in_bot = models.BooleanField(default=False, verbose_name='نمایش در ربات') def __str__(self): diff --git a/backend/product/serializers.py b/backend/product/serializers.py index d6058dc..c243a29 100644 --- a/backend/product/serializers.py +++ b/backend/product/serializers.py @@ -176,3 +176,12 @@ class CommentSerializer(serializers.ModelSerializer): exclude = ('review_status', ) read_only_fields = ('review_status', 'product', 'user') + + +class BotProductSerializer(serializers.ModelSerializer): + class Meta: + model = ProductModel + fields = [ + 'pk', + 'name' + ] \ No newline at end of file diff --git a/backend/product/urls.py b/backend/product/urls.py index be2c63a..4b196a9 100644 --- a/backend/product/urls.py +++ b/backend/product/urls.py @@ -1,8 +1,9 @@ from django.urls import path, re_path -from .views import AllCategories, ProductView, AllProductsView, CommentView, ShowCaseProductsView, ShowCaseCategoryListView +from .views import AllCategories, ProductView, AllProductsView, CommentView, ShowCaseProductsView, ShowCaseCategoryListView, BotProductsView urlpatterns = [ path('slider_category', ShowCaseProductsView.as_view(), name='category-products'), + path('bot', BotProductsView.as_view(), name='bot-products'), path('categories', AllCategories.as_view(), name='all-categories'), path('slider_categories', ShowCaseCategoryListView.as_view(), name='all-categories'), re_path(r'^comments/(?P[\w\u0600-\u06FF\-]+)$', CommentView.as_view(), name='comment-views'), diff --git a/backend/product/views.py b/backend/product/views.py index 5b76a30..5848288 100644 --- a/backend/product/views.py +++ b/backend/product/views.py @@ -429,3 +429,34 @@ class CommentView(APIView): return Response({"detail": "شما اجازه ی پاک کردن این کامنت را ندارید"}, status=status.HTTP_403_FORBIDDEN) + + + + +from rest_framework.response import Response +from rest_framework.views import APIView +from rest_framework import serializers +from .models import ProductModel + +class BotProductSerializer(serializers.ModelSerializer): + class Meta: + model = ProductModel + fields = ['pk', 'name'] + +class BotProductsView(APIView): + serializer_class = BotProductSerializer + + def get(self, request): + bot_products = ProductModel.objects.filter(show_in_bot=True) + + if bot_products.exists(): + serialized = self.serializer_class(bot_products, many=True) + return Response({ + "success": True, + "products": serialized.data + }) + else: + return Response({ + "success": False, + "products": [] + }) \ No newline at end of file