Skip to content

Commit a6f5bfb

Browse files
authored
Merge pull request #22 from EventAccess/api_endpoints
Add endpoints for ticket validation and attendant creation
2 parents a8a0105 + 63b0621 commit a6f5bfb

File tree

4 files changed

+54
-6
lines changed

4 files changed

+54
-6
lines changed

.gitignore

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
*.py[ocd]
2-
**/.env
3-
*.sqlite3
1+
*.py[ocd]
2+
**/.env
3+
*.sqlite3
4+
venv

backendapi/admin.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1-
from django.contrib import admin
2-
3-
# Register your models here.
1+
from django.contrib import admin
2+
from database.models import Attendant
3+
from base64 import b16encode
4+
5+
6+
@admin.register(Attendant)
7+
class AttendantAdmin(admin.ModelAdmin):
8+
list_display = ('ticket_id', 'nfc_id_decoded', 'discord', 'is_crew', 'is_valid')
9+
10+
def nfc_id_decoded(self, obj):
11+
return b16encode(obj.nfc_id).decode()

backendapi/urls.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,8 @@
77
urlpatterns = [
88
path("nfctag/<hex:tag>", views.scanned),
99
path("test", views.api_get, name="api_get"),
10+
path("tickets/verify/<slug:ticket>",
11+
views.verify_ticket,
12+
name="verify_ticket"),
13+
path("attendants", views.create_attendant, name="create_attendant")
1014
]

backendapi/views.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from django.http import JsonResponse
55
from rest_framework.decorators import api_view
66
from rest_framework.response import Response
7+
from rest_framework import status
8+
from base64 import b16decode, b16encode
79

810
from database.models import Attendant
911

@@ -27,3 +29,36 @@ def api_get(request):
2729
return Response({"message": "GET request received"}, status=200)
2830
elif request.method == "POST":
2931
return Response({"message": "POST request received"}, status=200)
32+
33+
34+
@api_view(["GET"])
35+
def verify_ticket(request, ticket):
36+
# TODO: Implement ticket check
37+
if ticket == 'test123':
38+
return Response(
39+
{"is_valid": True}, status=status.HTTP_200_OK,
40+
)
41+
return Response(
42+
{"is_valid": False}, status=status.HTTP_400_BAD_REQUEST,
43+
)
44+
45+
46+
@api_view(["POST"])
47+
def create_attendant(request):
48+
ticket_id = request.data.get("ticket_id")
49+
nfc_id = b16decode(request.data.get("nfc_id"), casefold=True)
50+
51+
if not ticket_id or not nfc_id:
52+
return Response(
53+
{"error": "ticket_id and nfc_id are required."},
54+
status=status.HTTP_400_BAD_REQUEST,
55+
)
56+
57+
attendant = Attendant.objects.create(ticket_id=ticket_id, nfc_id=nfc_id)
58+
59+
return Response(
60+
{
61+
"message": "Attendant created successfully.",
62+
"id": attendant.id,
63+
}
64+
)

0 commit comments

Comments
 (0)