Skip to content

Commit

Permalink
fix major and critical bug and added account page
Browse files Browse the repository at this point in the history
  • Loading branch information
dedaleDev committed May 18, 2024
1 parent 0218608 commit fc9f1c9
Show file tree
Hide file tree
Showing 15 changed files with 298 additions and 172 deletions.
48 changes: 40 additions & 8 deletions database.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pymysql
import os, csv
import os, csv, time

class db():
_requetes = {
Expand All @@ -15,7 +15,7 @@ class db():
"selectAuteurByPrenom" : "SELECT * FROM `Auteur` WHERE `Prénom` LIKE %s ORDER BY `ID` ASC;",
"selectAuteurByAlias" : "SELECT * FROM `Auteur` WHERE `Alias` LIKE %s ORDER BY `ID` ASC;",
"selectPointDeVenteByNom" : "SELECT * FROM `Point de vente` WHERE `Nom` LIKE %s;",
"selectPointDeVenteByAdresse" : "SELECT Nom FROM `Point de vente` WHERE `Adresse` LIKE %s;",
"selectPointDeVenteByAdresse" : "SELECT * FROM `Point de vente` WHERE `Adresse` LIKE %s;",
"selectLivreByISBN" : "SELECT * FROM `Livre` WHERE `ISBN` LIKE %s;",
"selectLivreByTitre" : "SELECT * FROM `Livre` WHERE `Titre` LIKE %s;",
"selectLivreByAuteurNom" : "SELECT * FROM Livre JOIN Auteur ON Livre.Auteur = Auteur.ID WHERE Auteur.Nom LIKE %s",
Expand All @@ -39,6 +39,7 @@ class db():
"selectISBNAllLivres" : "SELECT ISBN FROM `Livre`;",
"selectPointDeVenteNameByAdresse" : "SELECT Nom FROM `Point de vente` WHERE `Adresse` = %s;",
"selectUserByEmail" : "SELECT * FROM `Utilisateur` WHERE `email` = %s;",
"selectEmpruntByUser" : "SELECT * FROM `Emprunt` WHERE `Utilisateur` = %s;",
}

def __init__(self, host:str ="localhost", user:str="root", passwd:str="1234", port:int=3306, debug:bool=False) -> None:
Expand Down Expand Up @@ -105,7 +106,9 @@ def mkRequest(self, request:str, verbose=False, *args) -> None:
*args : tuple : the arguments to pass to the request
"""
try :
# Convertir les arguments en chaînes de caractères, ajouter des guillemets autour des chaînes de caractères, et gérer les valeurs NULL
if request not in self._requetes.keys():
print(f"\033[31mErreur : La requête {request} n'existe pas dans la base de donnée !\033[0m")
return
args = list(args)
for i in range(len(args)):
if args[i] == "":
Expand All @@ -114,11 +117,40 @@ def mkRequest(self, request:str, verbose=False, *args) -> None:
print(f"#{self._requetes[request] % tuple(args)}")
self.cursor.execute(self._requetes[request], tuple(args))
except Exception as e:
print(f" La requête à échouée : {self._requetes[request] % tuple(args)}\n---, Erreur : {e}, ligne : {e.__traceback__.tb_lineno}")
print("Args : ", args)
print(f"Nombre de placeholders : {self._requetes[request].count('%s')}")
print(f"Nombre d'arguments : {len(args)}\n-------------------------------------------------- ")

if self.retryDatabaseConnection() == False:
print(f" \033[31mLa requête à échouée : {self._requetes[request] % tuple(args)}\n---, Erreur : {e}, ligne : {e.__traceback__.tb_lineno}, {pymysql.MySQLError}---\033[0m")
print("Args : ", args)
print(f"Nombre de placeholders : {self._requetes[request].count('%s')}")
print(f"Nombre d'arguments : {len(args)}\n--------------------------------------------------\033[0m")
print(f"Cursor : {type(self.cursor)} Actif : {self.cursor!=None}")
print(f"Database : {type(self.db)} Actif : {self.db!=None}")
else :
self.mkRequest(request, verbose, *args)


def retryDatabaseConnection(self) -> bool:
"""This function retries to connect to the database."""
print("Connexion à la base de donnée perdu, tentative de reconnexion...")
try :
maxRetries = 3
retryDelay = 1 #secondes
for i in range(maxRetries):
try:
self.cursor.close()
self.db.close()
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"')
self.cursor = self.db.cursor()
print("Reconnexion à la base de donnée réussie !")
return True
except :
time.sleep(retryDelay)
pass
print("Erreur : Impossible de se reconnecter à la base de donnée !")
return False
except Exception as e:
print("Erreur : Impossible de se reconnecter à la base de donnée ! Une erreur est survenue : ",e)
exit(1)

def __str__(self) -> str:
return f"Database host : {self.host}, user : {self.user}, password : {self.passwd}, port : {self.port}, debug : {self.debug}"

Expand Down
4 changes: 3 additions & 1 deletion searchEngine.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def getPointDeVenteNameByAddresse(db:database.db, addresse: str)->str:
db.mkRequest("selectPointDeVenteByAdresse", False, addresse)
result = db.cursor.fetchall()
if result == None or result == []: return "Nom du point de vente inconnu"
return f"{result[0][0]}"
return f"{result[0][1]}"
except Exception as e:
print(f"Une erreur est survenue lors de la recherche du point de vente :{e}, ligne : {e.__traceback__.tb_lineno}")

Expand Down Expand Up @@ -114,6 +114,8 @@ def searchPointDeVente(recherche:str, db:database.db, onlyOne:bool = False)->lis
recherche = recherche.strip().split()
request = ["selectPointDeVenteByNom", "selectPointDeVenteByAdresse"]
result = searchEngine(recherche, request, db)

print(result)
temp = []
for i in result:#enlève les doublons
if i not in temp and i != None and i != ( ):
Expand Down
24 changes: 22 additions & 2 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ def searchLivre(self, search:str, sort:str, auteur:str="Tous") -> str:
sort = "sortByAlpha"
try :
searchResult = searchEngine.searchLivre(search,self.db)
#print("SEARCH RESULT", searchResult)
if searchResult == None : return None
searchResult= operationOnDataBase.sortLivre(searchResult,sort)
if auteur != "Tous":
Expand Down Expand Up @@ -95,7 +94,6 @@ def checkLogin(self, email:str, password:str) -> str:
try :
self.db.mkRequest("selectUserByEmail", False, email)
user = self.db.cursor.fetchall()
print("USER",user)
if user is not None and user != () and user != []:
if user[0][1] == password:
return self.makeResponse(content="success")
Expand Down Expand Up @@ -125,6 +123,28 @@ def getUserInfo(self, email:str, password:str) -> str:
print("\033[31mErreur lors de la tentative de conneion : ",e, e.__traceback__.tb_lineno, user, "\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 getEmprunt(self, email:str, password:str)->str:
try :
#check password before
self.db.mkRequest("selectUserByEmail", True, email)
user = self.db.cursor.fetchall()
if user is not None and user != () and user != []:
if user[0][1] == password:
self.db.mkRequest("selectEmpruntByUser", True, email)
emprunts = self.db.cursor.fetchall()
if emprunts is not None and emprunts != () and emprunts != []:
emprunts = utils.formatEmpruntsToJson(emprunts)
return self.makeResponse(content=emprunts)
else:
return self.makeResponse(is_error=True, error_message="Aucun emprunt trouvé")
else:
return self.makeResponse(is_error=True, error_message="Mot de passe incorrect")
except Exception as e:
print("\033[31mErreur lors de la récupération des réservations : ",e, e.__traceback__.tb_lineno, emprunts, "\033[0m")
return self.makeResponse(is_error=True, error_message="Oups, une erreur est survenue, veuillez réessayer ultérieurement")

@cherrypy.expose
def index(self) -> str :
return open('www/html/index.html', encoding="utf-8")
Expand Down
Loading

0 comments on commit fc9f1c9

Please sign in to comment.