Skip to content

Commit

Permalink
added endpoint for signup event observability
Browse files Browse the repository at this point in the history
  • Loading branch information
elimelt committed Dec 23, 2024
1 parent 83d7a4a commit 65ff054
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 6 deletions.
18 changes: 18 additions & 0 deletions server/interview/migrations/0006_interviewpool_timestamp.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.17 on 2024-12-23 09:10

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('interview', '0005_rename_technical_question_interview_technical_questions'),
]

operations = [
migrations.AddField(
model_name='interviewpool',
name='timestamp',
field=models.DateTimeField(auto_now_add=True, null=True),
),
]
1 change: 1 addition & 0 deletions server/interview/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class InterviewPool(models.Model):
on_delete=models.CASCADE,
primary_key=True
)
timestamp = models.DateTimeField(auto_now_add=True, null=True)

def __str__(self):
return f"Interview Pool: {self.member}"
Expand Down
5 changes: 5 additions & 0 deletions server/interview/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,5 +76,10 @@
"assign/<uuid:interview_id>/",
views.InterviewAssignQuestionRandomIndividual.as_view(),
name="assign-interview-question"
),
path(
"signups/",
views.get_signup_data,
name="get-signup-data"
)
]
44 changes: 38 additions & 6 deletions server/interview/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,35 @@ def is_valid_availability(availability):
)


from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAdminUser
from django.utils import timezone
from datetime import timedelta

@api_view(['GET'])
@permission_classes([])
def get_signup_data(request):
days = int(request.query_params.get('days', 14))
end_date = timezone.now()
start_date = end_date - timedelta(days=days)

signups = InterviewPool.objects.filter(
timestamp__isnull=False,
timestamp__gte=start_date,
timestamp__lte=end_date
).values('member__username', 'member_id', 'timestamp')

signup_data = [
{
'username': signup['member__username'],
'user_id': signup['member_id'],
'timestamp': int(signup['timestamp'].timestamp() * 1000)
}
for signup in signups
]

return Response(signup_data)

# Create your views here.
class AuthenticatedMemberSignupForInterview(APIView):
permission_classes = [IsAuthenticated, IsVerified]
Expand Down Expand Up @@ -119,16 +148,19 @@ def post(self, request):

# Check if user is already in InterviewPool
try:
InterviewPool.objects.get(member=request.user)

ent = InterviewPool.objects.get(member=request.user)
ent.timestamp = timezone.now()
ent.save()
interview_availability.save()
logger.info(
f"User {request.user.username} updated their interview availability"
"User %s signed up for an interview at %s",
request.user.username,
ent.timestamp.isoformat()
)
return Response(
{
"detail": "You have successfully updated your interview availability."
},
status=status.HTTP_200_OK,
{"detail": "You have successfully signed up for an interview."},
status=status.HTTP_201_CREATED,
)

except InterviewPool.DoesNotExist:
Expand Down

0 comments on commit 65ff054

Please sign in to comment.