diff --git a/.env.example b/.env.example index 3667da4..38ebb5b 100644 --- a/.env.example +++ b/.env.example @@ -11,4 +11,5 @@ POSTGRES_PORT=5432 COMMAND=sh ./resources/scripts/entrypoint-server.sh PORT=8080 -CACHEOPS_ENABLED=True \ No newline at end of file +CACHEOPS_ENABLED=True +BOT_TOKEN=8147952177:AAEsR2ejafoKVb_OFcm6rEJAzUt_BKiOr5A \ No newline at end of file diff --git a/config/celery.py b/config/celery.py new file mode 100644 index 0000000..b5b2895 --- /dev/null +++ b/config/celery.py @@ -0,0 +1,10 @@ +import os +from celery import Celery + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.base') + +app = Celery('config', broker="redis://redis:6379", backend="redis://redis:6379") + + +app.config_from_object('django.conf:settings', namespace='CELERY') +app.autodiscover_tasks() \ No newline at end of file diff --git a/config/conf/__init__.py b/config/conf/__init__.py index bba5ee0..9f262f4 100644 --- a/config/conf/__init__.py +++ b/config/conf/__init__.py @@ -3,4 +3,5 @@ from .cors import * from .jwt import * from .logs import * from .swagger import * -from .redis import * \ No newline at end of file +from .redis import * +from .celery import * \ No newline at end of file diff --git a/config/conf/celery.py b/config/conf/celery.py new file mode 100644 index 0000000..14662f9 --- /dev/null +++ b/config/conf/celery.py @@ -0,0 +1,8 @@ +from django.conf import settings + +CELERY_BROKER_URL = 'redis://redis:6379' +CELERY_RESULT_BACKEND = "redis://redis:6379" +CELERY_ACCEPT_CONTENT = ['json'] +CELERY_TASK_SERIALIZER = 'json' +CELERY_TIMEZONE = settings.TIME_ZONE +CELERY_ENABLED = True \ No newline at end of file diff --git a/core/apps/orders/serializers/order.py b/core/apps/orders/serializers/order.py index 0d96bb9..ee3d9af 100644 --- a/core/apps/orders/serializers/order.py +++ b/core/apps/orders/serializers/order.py @@ -5,6 +5,7 @@ from rest_framework import serializers from core.apps.orders.models import Order, OrderItem from core.apps.products.models import Product from core.apps.products.serializers.product import ProductListSerializer +from core.apps.orders.tasks.order_item import send_orders_to_tg_bot class OrderItemCreateSerializer(serializers.Serializer): @@ -54,6 +55,13 @@ class OrderCreateSerializer(serializers.Serializer): order=order, )) total_price += item.get('price') + send_orders_to_tg_bot.delay( + chat_id=item.get('product').tg_id, + product_name=item.get('product').name, + quantity=item.get('quantity'), + price=item.get('price') + ) + OrderItem.objects.bulk_create(items) order.total_price = total_price order.save() diff --git a/core/apps/orders/signals/order.py b/core/apps/orders/signals/order.py index 14f03ab..b479078 100644 --- a/core/apps/orders/signals/order.py +++ b/core/apps/orders/signals/order.py @@ -1,7 +1,7 @@ from django.db.models.signals import post_save from django.dispatch import receiver -from core.apps.orders.models import Order +from core.apps.orders.models import Order, OrderItem @receiver(post_save, sender=Order) diff --git a/core/apps/orders/tasks/order_item.py b/core/apps/orders/tasks/order_item.py new file mode 100644 index 0000000..f7a835e --- /dev/null +++ b/core/apps/orders/tasks/order_item.py @@ -0,0 +1,23 @@ +import requests +from celery import shared_task + +from core.apps.orders.models import OrderItem +from config.env import env + +token = env.str("BOT_TOKEN") + +@shared_task +def send_orders_to_tg_bot(chat_id, product_name, quantity, price): + url = f"https://api.telegram.org/bot{token}/sendMessage" + message = ( + f"Mahsulot nomi: {product_name}\n" + f"Mahsulot soni: {quantity}\n" + f"Summa: {price}" + ) + payload = { + "chat_id": chat_id, + "text": message + } + response = requests.post(url, data=payload) + return response.json() + diff --git a/docker-compose.yaml b/docker-compose.yaml index ef9235c..f244cf1 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -49,4 +49,20 @@ services: redis: networks: - horeca - image: redis \ No newline at end of file + image: redis + + celery: + build: + context: . + dockerfile: ./docker/Dockerfile.web + command: celery -A config worker --loglevel=info + volumes: + - "./:/code" + depends_on: + - redis + - web + networks: + - horeca + environment: + - CELERY_BROKER_URL=redis://redis:6379 + - CELERY_RESULT_BACKEND=redis://redis:6379 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index ca34e9a..75e1ea5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,6 @@ redis django-redis psycopg2-binary pillow -django-modeltranslation \ No newline at end of file +django-modeltranslation +celery +requests \ No newline at end of file