diff --git a/backend/project/api/users/urls.py b/backend/project/api/users/urls.py index 60025d1..2708ef3 100644 --- a/backend/project/api/users/urls.py +++ b/backend/project/api/users/urls.py @@ -2,6 +2,7 @@ from django.urls import include, path from rest_framework import routers from api.users.views import ( + DownloadUsersFromExcelView, RegisterUsersFromExcelView, UserViewSet, ) @@ -19,4 +20,9 @@ urlpatterns = [ RegisterUsersFromExcelView.as_view(), name="excel-upload", ), + path( + "download/excel//", + DownloadUsersFromExcelView.as_view(), + name="excel-download", + ) ] diff --git a/backend/project/api/users/views.py b/backend/project/api/users/views.py index ac4053f..0654900 100644 --- a/backend/project/api/users/views.py +++ b/backend/project/api/users/views.py @@ -1,5 +1,8 @@ +import io + import pandas as pd +from django.http import FileResponse from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView @@ -55,3 +58,25 @@ class RegisterUsersFromExcelView(APIView): return Response( {"error": str(e)}, status=status.HTTP_400_BAD_REQUEST ) + + +class DownloadUsersFromExcelView(APIView): + def get(self, _, event_id): + try: + users = Event.objects.get(pk=event_id).users + except Event.DoesNotExist: + return Response( + {"error": "Event does not exist"}, + status=status.HTTP_404_NOT_FOUND, + ) + + serializer = UserSerializer(users, many=True) + data = serializer.data + + data = pd.DataFrame(data) + + excel_data = io.BytesIO() + data.to_excel(excel_data, index=False) + excel_data.seek(0) + + return FileResponse(excel_data, filename="users.xlsx") diff --git a/frontend/package.json b/frontend/package.json index 353b03a..f7322c6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -69,6 +69,11 @@ "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", +<<<<<<< HEAD +======= + "prettier": "^3.2.5", + "@vitejs/plugin-react": "^4.2.0", +>>>>>>> 8d6323a364a5b30124a1b7ce60c092cb70e50a9e "postcss": "^8.4.32", "prettier": "^3.2.5", "tailwindcss": "^3.3.5",