Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .gitignore
Comment thread
oddstr13 marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
*.py[ocd]
**/.env
*.sqlite3
*.py[ocd]
**/.env
*.sqlite3
venv
14 changes: 11 additions & 3 deletions backendapi/admin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
from django.contrib import admin

# Register your models here.
from django.contrib import admin
from database.models import Attendant
from base64 import b16encode


@admin.register(Attendant)
class AttendantAdmin(admin.ModelAdmin):
list_display = ('ticket_id', 'nfc_id_decoded', 'discord', 'is_crew', 'is_valid')

def nfc_id_decoded(self, obj):
return b16encode(obj.nfc_id).decode()
4 changes: 4 additions & 0 deletions backendapi/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@
urlpatterns = [
path("nfctag/<hex:tag>", views.scanned),
path("test", views.api_get, name="api_get"),
path("tickets/verify/<slug:ticket>",
views.verify_ticket,
name="verify_ticket"),
path("attendants", views.create_attendant, name="create_attendant")
]
35 changes: 35 additions & 0 deletions backendapi/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from django.http import JsonResponse
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from base64 import b16decode, b16encode

from database.models import Attendant

Expand All @@ -27,3 +29,36 @@ def api_get(request):
return Response({"message": "GET request received"}, status=200)
elif request.method == "POST":
return Response({"message": "POST request received"}, status=200)


@api_view(["GET"])
def verify_ticket(request, ticket):
# TODO: Implement ticket check
if ticket == 'test123':
return Response(
{"is_valid": True}, status=status.HTTP_200_OK,
)
return Response(
{"is_valid": False}, status=status.HTTP_400_BAD_REQUEST,
)


@api_view(["POST"])
def create_attendant(request):
ticket_id = request.data.get("ticket_id")
nfc_id = b16decode(request.data.get("nfc_id"), casefold=True)

if not ticket_id or not nfc_id:
return Response(
{"error": "ticket_id and nfc_id are required."},
status=status.HTTP_400_BAD_REQUEST,
)

attendant = Attendant.objects.create(ticket_id=ticket_id, nfc_id=nfc_id)

return Response(
{
"message": "Attendant created successfully.",
"id": attendant.id,
}
)