This commit is contained in:
behruz-dev
2025-09-04 17:50:07 +05:00
parent ed5e71db25
commit a56a62acfa
9 changed files with 74 additions and 5 deletions

View File

@@ -12,3 +12,4 @@ POSTGRES_PORT=5432
COMMAND=sh ./resources/scripts/entrypoint-server.sh COMMAND=sh ./resources/scripts/entrypoint-server.sh
PORT=8080 PORT=8080
CACHEOPS_ENABLED=True CACHEOPS_ENABLED=True
BOT_TOKEN=8147952177:AAEsR2ejafoKVb_OFcm6rEJAzUt_BKiOr5A

10
config/celery.py Normal file
View File

@@ -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()

View File

@@ -4,3 +4,4 @@ from .jwt import *
from .logs import * from .logs import *
from .swagger import * from .swagger import *
from .redis import * from .redis import *
from .celery import *

8
config/conf/celery.py Normal file
View File

@@ -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

View File

@@ -5,6 +5,7 @@ from rest_framework import serializers
from core.apps.orders.models import Order, OrderItem from core.apps.orders.models import Order, OrderItem
from core.apps.products.models import Product from core.apps.products.models import Product
from core.apps.products.serializers.product import ProductListSerializer 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): class OrderItemCreateSerializer(serializers.Serializer):
@@ -54,6 +55,13 @@ class OrderCreateSerializer(serializers.Serializer):
order=order, order=order,
)) ))
total_price += item.get('price') 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) OrderItem.objects.bulk_create(items)
order.total_price = total_price order.total_price = total_price
order.save() order.save()

View File

@@ -1,7 +1,7 @@
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver 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) @receiver(post_save, sender=Order)

View File

@@ -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()

View File

@@ -50,3 +50,19 @@ services:
networks: networks:
- horeca - horeca
image: redis 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

View File

@@ -11,3 +11,5 @@ django-redis
psycopg2-binary psycopg2-binary
pillow pillow
django-modeltranslation django-modeltranslation
celery
requests