diff --git a/data/livres/1041834365.jpg b/data/livres/1041834365.jpg new file mode 100644 index 0000000..6fdd4a5 Binary files /dev/null and b/data/livres/1041834365.jpg differ diff --git a/data/livres/2010056426.jpg b/data/livres/2010056426.jpg new file mode 100644 index 0000000..d320923 Binary files /dev/null and b/data/livres/2010056426.jpg differ diff --git a/data/livres/2017010090.jpg b/data/livres/2017010090.jpg new file mode 100644 index 0000000..f67a3b1 Binary files /dev/null and b/data/livres/2017010090.jpg differ diff --git a/data/livres/2019109964.jpg b/data/livres/2019109964.jpg new file mode 100644 index 0000000..6449d6f Binary files /dev/null and b/data/livres/2019109964.jpg differ diff --git a/data/livres/2070415732.jpg b/data/livres/2070415732.jpg new file mode 100644 index 0000000..ceaaed7 Binary files /dev/null and b/data/livres/2070415732.jpg differ diff --git a/data/livres/2070450333.jpg b/data/livres/2070450333.jpg new file mode 100644 index 0000000..7203f16 Binary files /dev/null and b/data/livres/2070450333.jpg differ diff --git a/data/livres/2070541290.jpg b/data/livres/2070541290.jpg new file mode 100644 index 0000000..6823a7f Binary files /dev/null and b/data/livres/2070541290.jpg differ diff --git a/data/livres/2070543587.jpg b/data/livres/2070543587.jpg new file mode 100644 index 0000000..13b16f6 Binary files /dev/null and b/data/livres/2070543587.jpg differ diff --git a/data/livres/2070556859.jpg b/data/livres/2070556859.jpg new file mode 100644 index 0000000..95451c4 Binary files /dev/null and b/data/livres/2070556859.jpg differ diff --git a/data/livres/2070572676.jpg b/data/livres/2070572676.jpg new file mode 100644 index 0000000..5e7f634 Binary files /dev/null and b/data/livres/2070572676.jpg differ diff --git a/data/livres/2070612481.jpg b/data/livres/2070612481.jpg new file mode 100644 index 0000000..2aefe67 Binary files /dev/null and b/data/livres/2070612481.jpg differ diff --git a/data/livres/2070615367.jpg b/data/livres/2070615367.jpg new file mode 100644 index 0000000..4a72e69 Binary files /dev/null and b/data/livres/2070615367.jpg differ diff --git a/data/livres/2070624544.jpg b/data/livres/2070624544.jpg new file mode 100644 index 0000000..6fade54 Binary files /dev/null and b/data/livres/2070624544.jpg differ diff --git a/data/livres/2072847923.jpg b/data/livres/2072847923.jpg new file mode 100644 index 0000000..a11f09c Binary files /dev/null and b/data/livres/2072847923.jpg differ diff --git a/data/livres/2075085757.jpg b/data/livres/2075085757.jpg new file mode 100644 index 0000000..63161b2 Binary files /dev/null and b/data/livres/2075085757.jpg differ diff --git a/data/livres/2075094675.jpg b/data/livres/2075094675.jpg new file mode 100644 index 0000000..8b0a25b Binary files /dev/null and b/data/livres/2075094675.jpg differ diff --git a/data/livres/2075120811.jpg b/data/livres/2075120811.jpg new file mode 100644 index 0000000..6042567 Binary files /dev/null and b/data/livres/2075120811.jpg differ diff --git a/data/livres/2075126780.jpg b/data/livres/2075126780.jpg new file mode 100644 index 0000000..1d511c7 Binary files /dev/null and b/data/livres/2075126780.jpg differ diff --git a/data/livres/2081211696.jpg b/data/livres/2081211696.jpg new file mode 100644 index 0000000..11f6a6b Binary files /dev/null and b/data/livres/2081211696.jpg differ diff --git a/data/livres/2081230313.jpg b/data/livres/2081230313.jpg new file mode 100644 index 0000000..fe30d9b Binary files /dev/null and b/data/livres/2081230313.jpg differ diff --git a/data/livres/2081244306.jpg b/data/livres/2081244306.jpg new file mode 100644 index 0000000..eda5210 Binary files /dev/null and b/data/livres/2081244306.jpg differ diff --git a/data/livres/2203020644.jpg b/data/livres/2203020644.jpg new file mode 100644 index 0000000..302d8db Binary files /dev/null and b/data/livres/2203020644.jpg differ diff --git a/data/livres/2203020652.jpg b/data/livres/2203020652.jpg new file mode 100644 index 0000000..0b8d8e4 Binary files /dev/null and b/data/livres/2203020652.jpg differ diff --git a/data/livres/2226249303.jpg b/data/livres/2226249303.jpg new file mode 100644 index 0000000..223d896 Binary files /dev/null and b/data/livres/2226249303.jpg differ diff --git a/data/livres/2253014990.jpg b/data/livres/2253014990.jpg new file mode 100644 index 0000000..341dd44 Binary files /dev/null and b/data/livres/2253014990.jpg differ diff --git a/data/livres/2253093289.jpg b/data/livres/2253093289.jpg new file mode 100644 index 0000000..15fe4cd Binary files /dev/null and b/data/livres/2253093289.jpg differ diff --git a/data/livres/2266274287.jpg b/data/livres/2266274287.jpg new file mode 100644 index 0000000..e1e7b58 Binary files /dev/null and b/data/livres/2266274287.jpg differ diff --git a/data/livres/2266282395.jpg b/data/livres/2266282395.jpg new file mode 100644 index 0000000..4786289 Binary files /dev/null and b/data/livres/2266282395.jpg differ diff --git a/data/livres/2700238931.jpg b/data/livres/2700238931.jpg new file mode 100644 index 0000000..3f54634 Binary files /dev/null and b/data/livres/2700238931.jpg differ diff --git a/data/livres/2700238958.jpg b/data/livres/2700238958.jpg new file mode 100644 index 0000000..708ebf1 Binary files /dev/null and b/data/livres/2700238958.jpg differ diff --git a/data/livres/2700238974.jpg b/data/livres/2700238974.jpg new file mode 100644 index 0000000..1b1c155 Binary files /dev/null and b/data/livres/2700238974.jpg differ diff --git a/data/livres/2700256506.jpg b/data/livres/2700256506.jpg new file mode 100644 index 0000000..43967c4 Binary files /dev/null and b/data/livres/2700256506.jpg differ diff --git a/data/livres/2747037916.jpg b/data/livres/2747037916.jpg new file mode 100644 index 0000000..6381e0a Binary files /dev/null and b/data/livres/2747037916.jpg differ diff --git a/data/livres/2812608935.jpg b/data/livres/2812608935.jpg new file mode 100644 index 0000000..7d09942 Binary files /dev/null and b/data/livres/2812608935.jpg differ diff --git a/data/livres/2812619090.jpg b/data/livres/2812619090.jpg new file mode 100644 index 0000000..7e0be60 Binary files /dev/null and b/data/livres/2812619090.jpg differ diff --git a/data/livres/2812623985.jpg b/data/livres/2812623985.jpg new file mode 100644 index 0000000..576c369 Binary files /dev/null and b/data/livres/2812623985.jpg differ diff --git a/data/livres/2890746623.jpg b/data/livres/2890746623.jpg new file mode 100644 index 0000000..57a4ab5 Binary files /dev/null and b/data/livres/2890746623.jpg differ diff --git a/data/livres/9782070518425.jpg b/data/livres/9782070518425.jpg new file mode 100644 index 0000000..e8f60b2 Binary files /dev/null and b/data/livres/9782070518425.jpg differ diff --git a/data/livres/9782075090872.jpg b/data/livres/9782075090872.jpg new file mode 100644 index 0000000..9a572d0 Binary files /dev/null and b/data/livres/9782075090872.jpg differ diff --git a/database.py b/database.py index 59b3c8c..7afe782 100644 --- a/database.py +++ b/database.py @@ -33,6 +33,9 @@ class db(): "deletePointDeVente" : "DELETE FROM `Point de vente` WHERE `Adresse` = %s;", "deleteEditeur" : "DELETE FROM `Editeur` WHERE `Nom` = %s;", "deleteLivreByEditeur" : "DELETE FROM `Livre` WHERE `Editeur` = %s;", + "deleteEmpruntByUser" : "DELETE FROM `Emprunt` WHERE `Utilisateur` = %s;", + "deleteEmprunt" : "DELETE FROM `Emprunt` WHERE `ID` = %s;", + "deleteUser" : "DELETE FROM `Utilisateur` WHERE `email` = %s;", "updateLivrePointDeVente" : "UPDATE `Livre` SET `Point de vente` = %s WHERE `Point de vente` = %s;", "updateLivre" : "UPDATE `Livre` SET `Titre` = %s, `Auteur` = %s, `Description` = %s, `Date de parution` = %s, `Statut` = %s, `Genre` = %s, `Format` = %s, `Prix` = %s, `Point de vente` = %s, `Editeur` = %s WHERE `ISBN` = %s;", "updateAuteur" : "UPDATE `Auteur` SET `Nom` = %s, `Prénom` = %s, `Biographie` = %s, `Date de naissance` = %s, `Date de décès` = %s, `Alias` = %s WHERE `ID` = %s;", @@ -74,6 +77,11 @@ def __init__(self, host:str ="localhost", user:str="root", passwd:str="1234", po self.cursor = self.db.cursor() self.cursor.execute("DROP DATABASE IF EXISTS BookWorm") self.db.commit() + try : + for i in os.listdir("www/img/livres"): + os.remove(f"www/img/livres/{i}") + except : + pass print("Conformément au mode debug, la base de donnée à été effacé au démarrage. Veuillez relancer le programme.") self.needRestart = True return @@ -211,6 +219,13 @@ def loadData(self) -> int: 0 : if the data is loaded successfully 1 : if an error occurs """ + try : + print("Importations des images de références...") + for i in os.listdir("data/livres"): + os.system(f"cp data/livres/{i} www/img/livres/{i}") + except Exception as e: + print("Erreur : Impossible d'importer les images de références ! Une erreur est survenue : ",e) + self.db = pymysql.connect(host=self.host, charset="utf8mb4", user=self.user, passwd=self.passwd, port=self.port, db="BookWorm",init_command='SET sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE"') data= ["data/Auteur.csv","data/Editeur.csv","data/PointDeVente.csv","data/Livre.csv","data/Utilisateur.csv","data/Note.csv","data/Emprunt.csv"] for file in data: diff --git a/main.py b/main.py index f7bea39..e64417d 100644 --- a/main.py +++ b/main.py @@ -50,6 +50,10 @@ ('Access-Control-Allow-Methods', 'POST, GET'), ('Access-Control-Allow-Headers', 'Content-Type'), ], + }, + '/favicon.ico': { + 'tools.staticfile.on': True, + 'tools.staticfile.filename': os.path.join(www_dir, 'img/favicon.ico') } } @@ -191,21 +195,6 @@ def updateJS(conf: dict): if debug : print("Attention : le mode de débogage est activé, les résultats résultants pourraient être instables.") db = database.db(db_HOST,db_USER,db_PASSWD,db_PORT,debug) - if debug and not db.needRestart : - try : - db.mkRequest("selectAllISBN", False) - isbn = db.cursor.fetchall() - ISBN = [] - for i in isbn : - ISBN.append(i[0]) - if ISBN != [] : - for i in os.listdir("www/img/livres"): - if i.split('.')[0] not in ISBN and i.split('.')[1].endswith('jpg') : - print(f"Suppression de {i}", f"www/img/livres/{i}") - os.remove(f"www/img/livres/{i}") - except Exception as e: - print(f"\033[91mErreur : Impossible de supprimer les images inutiles. {e} ligne : {e.__traceback__.tb_lineno}\033[0m") - if db.needRestart == True : exit(0) print("Connexion à la base de donnée réussie !") diff --git a/searchEngine.py b/searchEngine.py index 15a811e..bbc84be 100644 --- a/searchEngine.py +++ b/searchEngine.py @@ -155,21 +155,7 @@ def searchPointDeVente(recherche:str, db:database.db, onlyOne:bool = False)->lis return None result = list(temp[0]) if onlyOne and len(result) > 1: - print(f"\nRésultat de la recherche pour {' '.join(recherche)}:\n") - for i in range(len(result)) : - temp = result[i][0].split('\n') - print(f"{i+1} : {temp}, {result[i][1]}") - while True : - try : - saisie = input("Veuillez saisir le numéro du point de vente que vous souhaitez sélectionner : ") - if saisie.isdigit() and int(saisie) >= 1 and int(saisie) <= len(result): - return result[int(saisie)-1] - else: - print("Désolé, le format de la réponse est incorrect. Veuillez réessayer.") - except KeyboardInterrupt: - return None - except : - print("Désolé, le format de la réponse est incorrect. Veuillez réessayer.") + return result[0] if result == []: return None return result diff --git a/server.py b/server.py index 243843e..ec21bc3 100644 --- a/server.py +++ b/server.py @@ -17,6 +17,22 @@ def makeResponse(self, is_error=False, content=None, error_message=None): return {"status":"error", "message":error_message} except Exception as e: print("Erreur lors de la création de la réponse : ",e, e.__traceback__.tb_lineno, content, error_message) + + def cleanImageLivres(self) : + """This function deletes all images who don't have a corresponding book in the database.""" + try : + self.db.mkRequest("selectAllISBN", False) + isbn = self.db.cursor.fetchall() + ISBN = [] + for i in isbn : + ISBN.append(i[0]) + if ISBN != [] : + for i in os.listdir("www/img/livres"): + if i.split('.')[0] not in ISBN and i.split('.')[1].endswith('jpg') : + print(f"Suppression de {i}", f"www/img/livres/{i}") + os.remove(f"www/img/livres/{i}") + except Exception as e: + print("\033[31mErreur lors de la suppression des images : ",e, e.__traceback__.tb_lineno, "\033[0m") @cherrypy.expose() @cherrypy.tools.json_out() @@ -156,6 +172,10 @@ def deleteLivre(self, email:str, password:str, isbn:str) -> str: self.db.mkRequest("deleteEmpruntByISBN", False, isbn) self.db.mkRequest("deleteLivre", False, isbn) self.db.db.commit() + try : + os.remove(f"www/img/livres/{isbn}.jpg") + except Exception as e: + print("\033[31mErreur lors de la suppression de l'image : ",e, e.__traceback__.tb_lineno, "\033[0m") return self.makeResponse(content="success") else: return self.makeResponse(is_error=True, error_message="Vous n'êtes pas administrateur") @@ -176,12 +196,11 @@ def deleteAuteur(self, email:str, password:str, id:int) -> str: if user is not None and user != () and user != []: if user[0][1] == password: if user[0][2] == "admin": - print("ID DELECTION READY",id) self.db.mkRequest("deleteEmpruntByAuteurID", False, id) self.db.mkRequest("deleteLivreByAuteur", False, id)#delete all books from this author first self.db.mkRequest("deleteAuteur", False, id) - print("OK") self.db.db.commit() + self.cleanImageLivres() return self.makeResponse(content="success") else: return self.makeResponse(is_error=True, error_message="Vous n'êtes pas administrateur") @@ -193,6 +212,117 @@ def deleteAuteur(self, email:str, password:str, id:int) -> str: print("\033[31mErreur lors de la suppression de l'auteur : ",e, e.__traceback__.tb_lineno, "\033[0m") return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue, veuillez réessayer ultérieurement") + @cherrypy.expose + @cherrypy.tools.json_out() + def getPointDeVenteReplacement(self, replacementName): + try : + replacementPointDeVente = searchEngine.searchPointDeVente(replacementName, self.db, onlyOne=True) + if replacementPointDeVente == None: + return self.makeResponse(is_error=True, error_message="Point de vente de remplacement introuvable") + print("POINT DE VENTE REMPLACEMENT",replacementPointDeVente) + return self.makeResponse(content=replacementPointDeVente[0][0]) + except Exception as e: + print("\033[31mErreur lors de la recherche du point de vente de remplacement : ",e, e.__traceback__.tb_lineno, "\033[0m") + return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue, veuillez réessayer ultérieurement") + + @cherrypy.expose + @cherrypy.tools.json_out() + def deletePointDeVente(self, email:str, password:str, adresse:str, adresseReplacement: str) -> str: + try : + self.db.mkRequest("selectUserByEmail", False, email) + user = self.db.cursor.fetchall() + if user is not None and user != () and user != []: + if user[0][1] == password: + if user[0][2] == "admin": + print("ADRESSE REPLACEMENT",adresseReplacement) + print("ADRESSE",adresse) + self.db.mkRequest("updateLivrePointDeVente", False, operationOnDataBase.convertPointDeVenteToAcceptablePointDeVente(adresseReplacement,self.db), operationOnDataBase.convertPointDeVenteToAcceptablePointDeVente(adresse,self.db)) + self.db.mkRequest("deletePointDeVente", False, operationOnDataBase.convertPointDeVenteToAcceptablePointDeVente(adresse,self.db)) + self.db.db.commit() + return self.makeResponse(content="success") + else: + return self.makeResponse(is_error=True, error_message="Vous n'êtes pas administrateur") + else: + return self.makeResponse(is_error=True, error_message="Mot de passe incorrect") + else: + return self.makeResponse(is_error=True, error_message="Utilisateur introuvable") + except Exception as e: + print("\033[31mErreur lors de la suppression du point de vente : ",e, e.__traceback__.tb_lineno, "\033[0m") + return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue, veuillez réessayer ultérieurement") + + @cherrypy.expose + @cherrypy.tools.json_out() + def deleteEditeur(self, email:str, password:str, nom:str) -> str: + try : + self.db.mkRequest("selectUserByEmail", False, email) + user = self.db.cursor.fetchall() + if user is not None and user != () and user != []: + if user[0][1] == password: + if user[0][2] == "admin": + self.db.mkRequest("deleteLivreByEditeur", False, nom)#delete all books from this editor first + self.db.mkRequest("deleteEditeur", False, nom) + self.db.db.commit() + self.cleanImageLivres() + return self.makeResponse(content="success") + else: + return self.makeResponse(is_error=True, error_message="Vous n'êtes pas administrateur") + else: + return self.makeResponse(is_error=True, error_message="Mot de passe incorrect") + else: + return self.makeResponse(is_error=True, error_message="Utilisateur introuvable") + except Exception as e: + print("\033[31mErreur lors de la suppression de l'éditeur : ",e, e.__traceback__.tb_lineno, "\033[0m") + return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue, veuillez réessayer ultérieurement") + + @cherrypy.expose + @cherrypy.tools.json_out() + def deleteUser(self, email:str, password:str, emailToDelete:str) -> str: + print("EMAIL",email, "PASSWORD",password, "EMAIL TO DELETE",emailToDelete) + try : + self.db.mkRequest("selectUserByEmail", False, email) + user = self.db.cursor.fetchall() + if user is not None and user != () and user != []: + if user[0][1] == password: + if user[0][2] == "admin": + #check if the user to delete is admin, if so, refuse + self.db.mkRequest("selectUserByEmail", False, emailToDelete) + userToDelete = self.db.cursor.fetchall() + if userToDelete is not None and userToDelete != () and userToDelete != []: + if userToDelete[0][2] == "admin": + return self.makeResponse(is_error=True, error_message="Vous ne pouvez pas supprimer un administrateur") + self.db.mkRequest("deleteEmpruntByUser", False, emailToDelete) + self.db.mkRequest("deleteUser", False, emailToDelete) + self.db.db.commit() + print("OK") + return self.makeResponse(content="success") + else: + return self.makeResponse(is_error=True, error_message="Vous n'êtes pas administrateur") + else: + return self.makeResponse(is_error=True, error_message="Mot de passe incorrect") + else: + return self.makeResponse(is_error=True, error_message="Utilisateur introuvable") + except Exception as e: + print("\033[31mErreur lors de la suppression de l'utilisateur : ",e, e.__traceback__.tb_lineno, "\033[0m") + return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue, veuillez réessayer ultérieurement") + + @cherrypy.expose + @cherrypy.tools.json_out() + def deleteEmprunt(self, email:str, password:str, id:int) -> str: + try : + self.db.mkRequest("selectUserByEmail", False, email) + user = self.db.cursor.fetchall() + if user is not None and user != () and user != []: + if user[0][1] == password: + self.db.mkRequest("deleteEmprunt", False, id) + self.db.db.commit() + return self.makeResponse(content="success") + else: + return self.makeResponse(is_error=True, error_message="Mot de passe incorrect") + else: + return self.makeResponse(is_error=True, error_message="Utilisateur introuvable") + except Exception as e: + print("\033[31mErreur lors de la suppression de l'emprunt : ",e, e.__traceback__.tb_lineno, "\033[0m") + return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue, veuillez réessayer ultérieurement") @cherrypy.expose @cherrypy.tools.json_out() diff --git a/test.py b/test.py index 43f7ab1..867730f 100644 --- a/test.py +++ b/test.py @@ -1 +1,6 @@ -Modified 2 , Rowling==Rowling , Joanne==Joanne , J. K. Rowling==J. K. Rowling , Joanne Rowling [ d͡ʒoʊˈæn ˈroʊlɪŋ]a, plus connue sous les noms de plume J. K. Rowlingb et Robert Galbraith, est une romancière et scénariste britannique née le 31 juillet 1965 dans l’agglomération de Yate (Gloucestershire du Sud). Elle doit sa notoriété mondiale à la série Harry Potter, dont les romans traduits en près de quatre-vingts langues ont été vendus à plus de 500 millions d'exemplaires dans le monde.==Joanne Rowling [ d͡ʒoʊˈæn ˈroʊlɪŋ]a, plus connue sous les noms de plume J. K. Rowlingb et Robert Galbraith, est une romancière et scénariste britannique née le 31 juillet 1965 dans l’agglomération de Yate (Gloucestershire du Sud). Elle doit sa notoriété mondiale à la série Harry Potter, dont les romans traduits en près de quatre-vingts langues ont été vendus à plus de 500 millions d'exemplaires dans le monde. , 1965-07-31==31/07/1965 , null==null \ No newline at end of file +ADRESSE REPLACEMENT Place Charles de Gaulle à Chabeuil (Drôme) +ADRESSE 17, avenue Victor-Hugo Centre commercial Victor-Hugo - 26000 Valence +point de vente non trouvé 17,avenueVictor-HugoCentrecommercialVictor-Hugo-26000Valence!=PlaceCharlesdeGaulleàChabeuil(Drôme) +point de vente non trouvé 31rueMadierdeMontjau26000Valence!=PlaceCharlesdeGaulleàChabeuil(Drôme) +point de vente trouvé Place Charles de Gaulle à Chabeuil (Drôme) +point de vente trouvé 17, avenue Victor-Hugo Centre commercial Victor-Hugo - 26000 Valence \ No newline at end of file diff --git a/www/img/favicon.ico b/www/img/favicon.ico new file mode 100644 index 0000000..99faa6a Binary files /dev/null and b/www/img/favicon.ico differ diff --git a/www/js/config.js b/www/js/config.js index adeaff0..e2862bc 100644 --- a/www/js/config.js +++ b/www/js/config.js @@ -93,19 +93,93 @@ async function deleteAuteur(id) { } async function deletePointDeVente(adresse) { + console.log(adresse) try { - if (confirm("Voulez-vous vraiment supprimer ce point de vente ?") === true) { - const response = await fetch(`${API_URL}/deletePointDeVente?email=${encodeURIComponent(email)}&password=${encodeURIComponent(password)}&adresse=${adresse}`); + let adresseReplacement = prompt("Veuillez entrer le nom du point de vente de remplacement :"); + if (adresseReplacement != undefined && adresseReplacement != null && adresseReplacement != "") { + adresseReplacement = await fetch(`${API_URL}/getPointDeVenteReplacement?replacementName=${adresseReplacement}`); + let data = await adresseReplacement.json(); + if (data.content === 'error') { + alert("Erreur lors du remplacement du point de vente, veuillez réessayer avec un nom correct."); + return; + } + adresseReplacement = data.content; + if (adresseReplacement === undefined || adresseReplacement === null || adresseReplacement === "") { + alert("Erreur lors du remplacement du point de vente, veuillez réessayer avec un nom correct."); + return; + } + if (confirm(`Voulez-vous vraiment supprimer le point de vente et le remplacer par ${adresseReplacement} ?`) === true) { + const response = await fetch(`${API_URL}/deletePointDeVente?email=${encodeURIComponent(email)}&password=${encodeURIComponent(password)}&adresse=${encodeURIComponent(adresse)}&adresseReplacement=${encodeURIComponent(adresseReplacement)}`); + let data = await response.json(); + if (data.content !== 'success') { + alert("Erreur lors de la suppression du point de vente, veuillez réessayer."); + throw new Error('Failed to delete point de vente'); + } + alert("Le point de vente a bien été supprimé !"); + showPointDeVenteArray(); + } + } + } catch (error) { + console.error('Error deleting point de vente:', error); + } +} + +async function deleteEditeur(nom) { + try { + if (confirm("Voulez-vous vraiment supprimer cet éditeur ? Cela supprimera l'ensemble des livres publié par cet éditeur.") === true) { + const response = await fetch(`${API_URL}/deleteEditeur?email=${encodeURIComponent(email)}&password=${encodeURIComponent(password)}&nom=${nom}`); let data = await response.json(); if (data.content !== 'success') { - alert("Erreur lors de la suppression du point de vente, veuillez réessayer."); - throw new Error('Failed to delete point de vente'); + alert("Erreur lors de la suppression de l'éditeur, veuillez réessayer."); + throw new Error('Failed to delete editeur'); } - alert("Le point de vente a bien été supprimé !"); - showPointDeVenteArray(); + alert("L'éditeur a bien été supprimé !"); + showEditeurArray(); } } catch (error) { - console.error('Error deleting point de vente:', error); + console.error('Error deleting editeur:', error); + } +} + +async function deleteUser(emailToDelete) { + try { + if (confirm("Voulez-vous vraiment supprimer cet utilisateur ? Cela supprimera l'ensemble des emprunts associés.") === true) { + const response = await fetch(`${API_URL}/deleteUser?email=${encodeURIComponent(email)}&password=${encodeURIComponent(password)}&emailToDelete=${emailToDelete}`); + let data = await response.json(); + if (data.message === 'Vous ne pouvez pas supprimer un administrateur'){ + alert("Vous ne pouvez pas supprimer un administrateur."); + return; + } + else if (data.content !== 'success') { + alert("Erreur lors de la suppression de l'utilisateur, veuillez réessayer.", data.message); + console.error( data); + throw new Error('Failed to delete utilisateur'); + } else { + alert("L'utilisateur a bien été supprimé !"); + } + showUtilisateurArray(); + } + } + catch (error) { + console.error('Error deleting utilisateur:', error); + } +} + +async function deleteEmprunt(id) { + try { + if (confirm("Voulez-vous vraiment supprimer cet emprunt ? Celui-ci sera immédiatement considéré comme remis.") === true) { + const response = await fetch(`${API_URL}/deleteEmprunt?email=${encodeURIComponent(email)}&password=${encodeURIComponent(password)}&id=${id}`); + let data = await response.json(); + if (data.content !== 'success') { + alert("Erreur lors de la suppression de l'emprunt, veuillez réessayer."); + throw new Error('Failed to delete emprunt'); + } + alert("L'emprunt a bien été supprimé !"); + showEmpruntArray(); + } + } + catch (error) { + console.error('Error deleting emprunt:', error); } } @@ -540,8 +614,10 @@ async function showPointDeVenteArray() { contentRow.innerHTML = ''; let rows = ''; Object.keys(pointDeVentes).forEach(adresse => { + adresseReplacement = adresse.replace(/\n/g, ' '); rows += _templatePointDeVente .replace("{{ adresse }}",adresse) + .replace("{{ adresse }}",adresseReplacement) .replace("{{ nom }}", pointDeVentes[adresse]["nom"]) .replace("{{ url }}", pointDeVentes[adresse]["url"]) .replace("{{ tel }}", pointDeVentes[adresse]["tel"] === null ? "" : pointDeVentes[adresse]["tel"]); @@ -566,6 +642,7 @@ async function showEditeurArray(){ let rows = ''; Object.keys(editeurs).forEach(nom => { rows += _templateEditeur + .replace("{{ nom }}",nom) .replace("{{ nom }}",nom) .replace("{{ adresse }}", editeurs[nom]["adresse"]); }); @@ -589,6 +666,7 @@ async function showUtilisateurArray(){ let rows = ''; Object.keys(utilisateurs).forEach(email => { rows += _templateUser + .replace("{{ email }}",email) .replace("{{ email }}",email) .replace("{{ mdp }}", utilisateurs[email]["mdp"]) .replace("{{ nom }}", utilisateurs[email]["nom"]) @@ -617,7 +695,7 @@ async function showEmpruntArray(){ let data = await response.json(); if (data.message === "Aucun emprunt trouvé"){ alert("Aucun n'emprunt n'a été effectué.") - return; + window.location.href = "/config"; } const emprunts = JSON.parse(data["content"]); response = await fetch(`${API_URL}/getAllLivre`); @@ -660,6 +738,7 @@ async function showEmpruntArray(){ } rows += _templateEmprunt .replace("{{ id }}",id) + .replace("{{ id }}", id) .replace("{{ statut }}", statut) .replace("{{ livre }}", livre) .replace("{{ date }}", emprunts[id]["Date"].split('/').reverse().join("-"))