2023-11-10 11:57:38 +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 , filterData
2023-11-10 11:57:38 +01:00
2023-11-13 16:09:59 +01:00
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 ( )
2023-11-10 11:57:38 +01:00
2023-11-13 16:09:59 +01:00
# -------------------------------
# Get all books in the database
# -------------------------------
2023-11-10 11:57:38 +01:00
@api_view ( [ ' GET ' ] )
def getAllBooks ( request ) :
2023-11-13 16:09:59 +01:00
if ( request . headers . get ( ' Authorization ' ) ) :
2023-11-21 08:24:48 +01:00
isLoggedIn = isAuthorized ( request . headers . get ( ' Authorization ' ) ) ;
if ( isLoggedIn ) :
books = getBooksData ( request . headers . get ( ' userid ' ) )
2023-12-20 08:30:32 +01:00
data = books . apply ( lambda row : {
" id " : row [ ' id ' ] ,
" name " : row [ ' name ' ] ,
" author " : row [ ' author ' ] ,
" genre " : row [ ' genre ' ] ,
" readed " : row [ ' readed ' ] ,
" rating " : row [ ' rating ' ]
} , axis = 1 ) . tolist ( )
2023-11-21 08:24:48 +01:00
return Response ( data )
else :
return JsonResponse ( { ' error ' : ' No user detected ' } , safe = False )
2023-11-13 16:09:59 +01:00
else :
return JsonResponse ( { ' error ' : ' Unauthorized ' } , safe = False )
# -------------------------------
# Add a book into the database
# -------------------------------
2023-11-10 11:57:38 +01:00
@api_view ( [ ' POST ' ] )
def addBook ( request ) :
if ( request . headers . get ( ' Authorization ' ) ) :
2023-11-21 08:24:48 +01:00
isLoggedIn = isAuthorized ( request . headers . get ( ' Authorization ' ) ) ;
if ( isLoggedIn ) :
2023-11-22 08:56:12 +01:00
userid = request . headers . get ( ' userid ' )
book = request . body
book = json . loads ( book )
conn . execute ( text ( " INSERT INTO api_books (userid, name, author, genre, readed, rating) VALUES ( ' " + str ( userid ) + " ' , ' " + str ( book [ ' name ' ] ) + " ' , ' " + str ( book [ ' author ' ] ) + " ' , ' " + str ( book [ ' genre ' ] ) + " ' , ' " + str ( book [ ' readed ' ] ) + " ' , " + str ( book [ ' rating ' ] ) + " ) " ) )
2023-11-21 08:24:48 +01:00
return JsonResponse ( " OK " , safe = False )
else :
return JsonResponse ( { ' error ' : ' No user detected ' } , safe = False )
2023-11-10 11:57:38 +01:00
else :
2023-11-13 16:09:59 +01:00
return JsonResponse ( { ' error ' : ' Unauthorized ' } , safe = False )
# -------------------------------
# Update a book in the database
# -------------------------------
2023-11-10 11:57:38 +01:00
@api_view ( [ ' PUT ' ] )
def updateBook ( request ) :
if ( request . headers . get ( ' Authorization ' ) ) :
2023-11-21 08:24:48 +01:00
isLoggedIn = isAuthorized ( request . headers . get ( ' Authorization ' ) ) ;
if ( isLoggedIn ) :
book = request . POST . get ( ' book ' )
book = json . loads ( book )
bookid = request . headers . get ( ' bookid ' )
2023-11-22 08:56:12 +01:00
conn . execute ( text ( " UPDATE api_books set name= ' " + str ( book [ ' name ' ] ) + " ' , author= ' " + str ( book [ ' author ' ] ) + " ' , genre= ' " + str ( book [ ' genre ' ] ) + " ' , readed= ' " + str ( book [ ' readed ' ] ) + " ' , rating= ' " + str ( book [ ' rating ' ] ) + " ' WHERE id= " + str ( bookid ) ) )
2023-11-21 08:24:48 +01:00
return JsonResponse ( " OK " , safe = False )
else :
return JsonResponse ( { ' error ' : ' No user detected ' } , safe = False )
2023-11-10 11:57:38 +01:00
else :
2023-11-13 16:09:59 +01:00
return JsonResponse ( { ' error ' : ' Unauthorized ' } , safe = False )
# -------------------------------
# Delete a book in the database
# -------------------------------
2023-11-10 11:57:38 +01:00
@api_view ( [ ' DELETE ' ] )
def deleteBook ( request ) :
if ( request . headers . get ( ' Authorization ' ) ) :
2023-11-21 08:24:48 +01:00
isLoggedIn = isAuthorized ( request . headers . get ( ' Authorization ' ) ) ;
if ( isLoggedIn ) :
bookid = request . headers . get ( ' bookid ' )
conn . execute ( text ( " DELETE FROM api_books WHERE id = " + str ( bookid ) ) )
return JsonResponse ( " OK " , safe = False )
else :
return JsonResponse ( { ' error ' : ' No user detected ' } , safe = False )
2023-11-10 11:57:38 +01:00
else :
2023-11-13 16:09:59 +01:00
return JsonResponse ( { ' error ' : ' Unauthorized ' } , safe = False )