Skip to content

Commit

Permalink
Merge pull request #84 from swecc-uw/injest-message-event
Browse files Browse the repository at this point in the history
  • Loading branch information
elimelt authored Dec 29, 2024
2 parents 0ca5ee4 + 650d739 commit f2f6fdf
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 2 deletions.
10 changes: 10 additions & 0 deletions server/engagement/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path
from . import views

urlpatterns = [
path(
"message/",
views.InjestMessageEventView.as_view(),
name="injest-message-event",
),
]
52 changes: 50 additions & 2 deletions server/engagement/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,51 @@
from django.shortcuts import render
from django.shortcuts import get_object_or_404
from rest_framework import generics, status
from rest_framework.response import Response
from django.http import Http404
from django.db import transaction
from django.db.models import F
from engagement.models import DiscordMessageStats
from members.models import User
from members.permissions import IsApiKey

# Create your views here.
import logging

logger = logging.getLogger(__name__)


class InjestMessageEventView(generics.CreateAPIView):
permission_classes = [IsApiKey]

@transaction.atomic
def post(self, request, *args, **kwargs):
discord_id = request.data.get("discord_id")
channel_id = request.data.get("channel_id")
try:
user = get_object_or_404(User, discord_id=discord_id)

(
stats,
created,
) = DiscordMessageStats.objects.select_for_update().get_or_create(
member_id=user.id, channel_id=channel_id, defaults={"message_count": 1}
)

if not created:
stats.message_count = F("message_count") + 1
stats.save()
stats.refresh_from_db()

logger.info(
"member %s has %d messages in channel %s",
user.id,
stats.message_count,
channel_id,
)

return Response(status=status.HTTP_202_ACCEPTED)

except Http404:
logger.error("member not found for discord_id: %s", discord_id)
return Response(
{"error": "member not found"}, status=status.HTTP_404_NOT_FOUND
)
1 change: 1 addition & 0 deletions server/server/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
path('reports/', include('report.urls')),
path('leaderboard/', include('leaderboard.urls')),
path('admin/command/', ManagementCommandView.as_view()),
path('engagement/', include('engagement.urls')),
]


Expand Down

0 comments on commit f2f6fdf

Please sign in to comment.