1
1
Fork 0
novelmetrix-python/ras/api/modules/challenges.py

88 lines
3.9 KiB
Python
Raw Permalink Normal View History

2023-11-13 16:09:59 +01:00
import jwt, json
from django.contrib.auth import get_user_model
from rest_framework.decorators import api_view
import ras.settings
from sqlalchemy import create_engine
from sqlalchemy.sql import text
from django.http import JsonResponse
import pandas as pd
from rest_framework.response import Response
2023-11-21 08:24:48 +01:00
from .functions import isAuthorized, getBooksData, getBookChallenge, filterData
2023-11-13 16:09:59 +01:00
@api_view(['GET'])
def getAllChallenges(request):
2023-11-21 08:24:48 +01:00
if(request.headers.get('Authorization')):
isLoggedIn = isAuthorized(request.headers.get('Authorization'));
if(isLoggedIn):
df = getBookChallenge(request.headers.get('userid'))
2023-12-20 08:30:32 +01:00
data = df.apply(lambda row: {
"id": row['id'],
"year": row['year'],
"nrofbooks": row['nrofbooks'],
"booksread": filterData(getBooksData(request.headers.get('userid')), str(row['year'])).dropna()['name'].count()
}, axis=1).tolist()
2023-11-21 08:24:48 +01:00
return Response(data)
else:
return JsonResponse({'error': 'No user detected'}, safe=False)
else:
return JsonResponse({'error': 'Unauthorized'}, safe=False)
2023-11-13 16:09:59 +01:00
@api_view(['GET'])
def getChallengeOfYear(request):
2023-11-21 08:24:48 +01:00
if(request.headers.get('Authorization')):
isLoggedIn = isAuthorized(request.headers.get('Authorization'));
2023-11-13 16:09:59 +01:00
2023-11-21 08:24:48 +01:00
if(isLoggedIn):
if request.META.get('HTTP_YEAR'):
df = getBookChallenge(request.headers.get('userid'), request.META.get('HTTP_YEAR'))
2023-12-20 08:30:32 +01:00
data = df.apply(lambda row: {'year': row['year'], 'nrofbooks': row['nrofbooks']}, axis=1).tolist()
2023-11-21 08:24:48 +01:00
return Response(data)
else:
return JsonResponse({'error': 'No year header included'}, safe=False)
else:
return JsonResponse({'error': 'No user detected'}, safe=False)
2023-11-13 16:09:59 +01:00
else:
2023-11-21 08:24:48 +01:00
return JsonResponse({'error': 'Unauthorized'}, safe=False)
2023-11-13 16:09:59 +01:00
@api_view(['POST'])
def addChallenge(request):
if(request.headers.get('Authorization')):
2023-11-21 08:24:48 +01:00
isLoggedIn = isAuthorized(request.headers.get('Authorization'));
2023-11-13 16:09:59 +01:00
2023-11-21 08:24:48 +01:00
if(isLoggedIn):
year = request.POST.get('year')
challenge = request.POST.get('challenge')
2023-11-13 16:09:59 +01:00
2023-11-21 08:24:48 +01:00
if(year and challenge):
engine = create_engine('mysql+mysqldb://' + ras.settings.DATABASES['default']['USER'] + ':' + ras.settings.DATABASES['default']['PASSWORD'] + '@' + ras.settings.DATABASES['default']['HOST'] + ':3306/' + ras.settings.DATABASES['default']['NAME'])
conn = engine.connect()
2024-01-18 16:36:14 +01:00
conn.execute(text("INSERT INTO book_challenge (userid, year, nrofbooks) VALUES ('" + str(request.headers.get('userid')) + "', '" + str(year) + "', '" + str(challenge) + "')"))
2023-11-21 08:24:48 +01:00
return JsonResponse("OK", safe=False)
2023-11-13 16:09:59 +01:00
else:
2023-11-21 08:24:48 +01:00
return JsonResponse({'error': 'No year and challenge detected'}, safe=False)
else:
return JsonResponse({'error': 'No user detected'}, safe=False)
else:
return JsonResponse({'error': 'Unauthorized'}, safe=False)
2023-11-13 16:09:59 +01:00
@api_view(['DELETE'])
def deleteChallenge(request, id = None):
if(request.headers.get('Authorization')):
2023-11-21 08:24:48 +01:00
isLoggedIn = isAuthorized(request.headers.get('Authorization'));
if(isLoggedIn):
if(id):
engine = create_engine('mysql+mysqldb://' + ras.settings.DATABASES['default']['USER'] + ':' + ras.settings.DATABASES['default']['PASSWORD'] + '@' + ras.settings.DATABASES['default']['HOST'] + ':3306/' + ras.settings.DATABASES['default']['NAME'])
conn = engine.connect()
conn.execute(text("DELETE FROM book_challenge WHERE id = " + str(id)))
return JsonResponse("OK", safe=False)
2023-11-13 16:09:59 +01:00
else:
2023-11-21 08:24:48 +01:00
return JsonResponse({'error': 'No challengeid detected'}, safe=False)
else:
return JsonResponse({'error': 'No user detected'}, safe=False)
else:
return JsonResponse({'error': 'Unauthorized'}, safe=False)