Skip to content
This repository was archived by the owner on Jan 2, 2026. It is now read-only.

Commit 55d52a0

Browse files
authored
Merge pull request #172 from swecc-uw/advaypatil27/eng-92-create-producermanager-singleton-in-swecc-server
Add a synchronous rabbit producer
2 parents d9d4f87 + 46ba58c commit 55d52a0

4 files changed

Lines changed: 53 additions & 0 deletions

File tree

server/members/views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.http import JsonResponse
1111
from django.shortcuts import get_object_or_404
1212
from email_util.send_email import send_email
13+
from mq.producers import publish_verified_email
1314
from rest_framework import generics, status
1415
from rest_framework.permissions import IsAuthenticated
1516
from rest_framework.response import Response
@@ -329,4 +330,6 @@ def post(self, request, token):
329330
status=status.HTTP_400_BAD_REQUEST,
330331
)
331332

333+
publish_verified_email(request.user.discord_id)
334+
332335
return Response({"detail": "School email verified"}, status=200)

server/mq/consumers.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,15 @@ async def reviewed_feedback_callback(
5050
logger.info(
5151
f"Feedback for resume {data['resume_id']} updated with value {data['feedback']}"
5252
)
53+
54+
55+
@mq.consumer(
56+
queue="server.verified-email",
57+
routing_key="server.verified-email",
58+
exchange="swecc-server-exchange",
59+
)
60+
async def verified_email_callback(
61+
body,
62+
properties: BasicProperties,
63+
):
64+
logger.info(f"Received verified email message: {body}")
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import os
2+
3+
import pika
4+
5+
6+
class SynchronousRabbitProducer:
7+
8+
_instance = None
9+
10+
def __init__(self):
11+
if self._initialized:
12+
return
13+
14+
self.host = os.getenv("RABBIT_HOST", "rabbitmq-host")
15+
self._initialized = True
16+
self._connection = pika.BlockingConnection(
17+
pika.ConnectionParameters(host=self.host)
18+
)
19+
self._channel = self._connection.channel()
20+
21+
def __new__(cls):
22+
if not cls._instance:
23+
cls._instance = super(SynchronousRabbitProducer, cls).__new__(cls)
24+
cls._instance._initialized = False
25+
return cls._instance
26+
27+
def publish(self, routing_key, body, exchange="swecc-server-exchange"):
28+
self._channel.basic_publish(
29+
exchange=exchange,
30+
routing_key=routing_key,
31+
body=body,
32+
)

server/mq/producers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from mq.core.synchronous_producer import SynchronousRabbitProducer
2+
3+
4+
def publish_verified_email(discord_id):
5+
producer_manager = SynchronousRabbitProducer()
6+
producer_manager.publish("server.verified-email", str(discord_id))

0 commit comments

Comments
 (0)