add insert, request, ordered functions for new edition books
This commit is contained in:
@@ -22,6 +22,7 @@ from src.backend.db import (
|
|||||||
CREATE_TABLE_FILES,
|
CREATE_TABLE_FILES,
|
||||||
CREATE_TABLE_MEDIA,
|
CREATE_TABLE_MEDIA,
|
||||||
CREATE_TABLE_MESSAGES,
|
CREATE_TABLE_MESSAGES,
|
||||||
|
CREATE_TABLE_NEWEDITIONS,
|
||||||
CREATE_TABLE_PROF,
|
CREATE_TABLE_PROF,
|
||||||
CREATE_TABLE_SUBJECTS,
|
CREATE_TABLE_SUBJECTS,
|
||||||
CREATE_TABLE_USER,
|
CREATE_TABLE_USER,
|
||||||
@@ -87,6 +88,7 @@ class Database:
|
|||||||
"elsa",
|
"elsa",
|
||||||
"elsa_files",
|
"elsa_files",
|
||||||
"elsa_media",
|
"elsa_media",
|
||||||
|
"neweditions",
|
||||||
]
|
]
|
||||||
|
|
||||||
for table in required_tables:
|
for table in required_tables:
|
||||||
@@ -116,6 +118,8 @@ class Database:
|
|||||||
query = CREATE_ELSA_FILES_TABLE
|
query = CREATE_ELSA_FILES_TABLE
|
||||||
case "elsa_media":
|
case "elsa_media":
|
||||||
query = CREATE_ELSA_MEDIA_TABLE
|
query = CREATE_ELSA_MEDIA_TABLE
|
||||||
|
case "neweditions":
|
||||||
|
query = CREATE_TABLE_NEWEDITIONS
|
||||||
case _:
|
case _:
|
||||||
log.error(f"Table {table_name} is not a valid table name")
|
log.error(f"Table {table_name} is not a valid table name")
|
||||||
self.query_db(query)
|
self.query_db(query)
|
||||||
@@ -233,7 +237,7 @@ class Database:
|
|||||||
def query_db(
|
def query_db(
|
||||||
self,
|
self,
|
||||||
query: str,
|
query: str,
|
||||||
args: Tuple[Any, Any] = (), # type:ignore
|
args: Tuple[Any] = (), # type:ignore
|
||||||
one: bool = False, # type:ignore
|
one: bool = False, # type:ignore
|
||||||
) -> Union[Tuple[Any, Any], List[Tuple[Any, Any]]]:
|
) -> Union[Tuple[Any, Any], List[Tuple[Any, Any]]]:
|
||||||
"""
|
"""
|
||||||
@@ -430,9 +434,8 @@ class Database:
|
|||||||
app_id = row[2]
|
app_id = row[2]
|
||||||
prof_id = row[3]
|
prof_id = row[3]
|
||||||
|
|
||||||
sig_val = getattr(bookdata, "signature", None) or ""
|
sig_val = bookdata.signature
|
||||||
title_val = getattr(bookdata, "title", None) or ""
|
title_val = bookdata.title
|
||||||
|
|
||||||
if mode == 1:
|
if mode == 1:
|
||||||
if sig_re.search(sig_val):
|
if sig_re.search(sig_val):
|
||||||
results.append((bookdata, app_id, prof_id))
|
results.append((bookdata, app_id, prof_id))
|
||||||
@@ -471,7 +474,7 @@ class Database:
|
|||||||
"""
|
"""
|
||||||
result = self.query_db(
|
result = self.query_db(
|
||||||
"SELECT id FROM media WHERE bookdata=? AND app_id=? AND prof_id=?",
|
"SELECT id FROM media WHERE bookdata=? AND app_id=? AND prof_id=?",
|
||||||
(dump_pickle(bookdata), app_id, prof_id),
|
(bookdata.to_dict, app_id, prof_id),
|
||||||
one=True,
|
one=True,
|
||||||
)
|
)
|
||||||
return result[0]
|
return result[0]
|
||||||
@@ -535,17 +538,23 @@ class Database:
|
|||||||
ret_result.append(data)
|
ret_result.append(data)
|
||||||
return ret_result
|
return ret_result
|
||||||
|
|
||||||
def getBooksByProfId(self, prof_id: int, deleted: int = 0):
|
def getBooksByProfId(
|
||||||
|
self, prof_id: int, deleted: int = 0
|
||||||
|
) -> list[dict[str, Union[int, BookData]]]:
|
||||||
"""
|
"""
|
||||||
Get the Books based on the professor id
|
Get the Books based on the professor id
|
||||||
|
|
||||||
Args:
|
Parameters
|
||||||
prof_id (str): The ID of the professor
|
----------
|
||||||
deleted (int, optional): The state of the book. Set to 1 to include deleted ones. Defaults to 0.
|
prof_id : int
|
||||||
|
The ID of the professor
|
||||||
|
deleted : int, optional
|
||||||
|
If set to 1, it will include deleted books, by default 0
|
||||||
|
|
||||||
Returns:
|
Returns
|
||||||
|
-------
|
||||||
list[dict[int, BookData, int]]: A list of dictionaries containing the id, the metadata of the book and the availability of the book
|
list[dict[str, Union[int, BookData]]]
|
||||||
|
A list of dictionaries containing the id, the metadata of the book and the availability of the book
|
||||||
"""
|
"""
|
||||||
qdata = self.query_db(
|
qdata = self.query_db(
|
||||||
f"SELECT id,bookdata,available FROM media WHERE prof_id={prof_id} AND (deleted={deleted if deleted == 0 else '1 OR deleted=0'})"
|
f"SELECT id,bookdata,available FROM media WHERE prof_id={prof_id} AND (deleted={deleted if deleted == 0 else '1 OR deleted=0'})"
|
||||||
@@ -1170,7 +1179,7 @@ class Database:
|
|||||||
(semester, apparat_nr, apparat.name),
|
(semester, apparat_nr, apparat.name),
|
||||||
)
|
)
|
||||||
# delete all books associated with the app_id
|
# delete all books associated with the app_id
|
||||||
print(apparat_nr, app_id)
|
# print(apparat_nr, app_id)
|
||||||
self.query_db("UPDATE media SET deleted=1 WHERE app_id=?", (app_id,))
|
self.query_db("UPDATE media SET deleted=1 WHERE app_id=?", (app_id,))
|
||||||
|
|
||||||
def isEternal(self, id):
|
def isEternal(self, id):
|
||||||
@@ -1243,11 +1252,11 @@ class Database:
|
|||||||
else False
|
else False
|
||||||
)
|
)
|
||||||
|
|
||||||
def checkApparatExistsById(self, app_id: Union[str, int]) -> bool:
|
def checkApparatExistsByNr(self, app_nr: Union[str, int]) -> bool:
|
||||||
"""a check to see if the apparat is already present in the database, based on the id
|
"""a check to see if the apparat is already present in the database, based on the nr. This query will exclude deleted apparats
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
app_id (Union[str, int]): the id of the apparat
|
app_nr (Union[str, int]): the id of the apparat
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
bool: True if the apparat is present, False if not
|
bool: True if the apparat is present, False if not
|
||||||
@@ -1255,7 +1264,9 @@ class Database:
|
|||||||
return (
|
return (
|
||||||
True
|
True
|
||||||
if self.query_db(
|
if self.query_db(
|
||||||
"SELECT appnr FROM semesterapparat WHERE appnr=?", (app_id,), one=True
|
"SELECT id FROM semesterapparat WHERE appnr=? and deletion_status=0",
|
||||||
|
(app_nr,),
|
||||||
|
one=True,
|
||||||
)
|
)
|
||||||
else False
|
else False
|
||||||
)
|
)
|
||||||
@@ -1844,3 +1855,49 @@ class Database:
|
|||||||
result = cursor.fetchone()
|
result = cursor.fetchone()
|
||||||
connection.close()
|
connection.close()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def getBookIdByPPN(self, ppn: str) -> int:
|
||||||
|
query = f"SELECT id FROM media WHERE bookdata LIKE '%{ppn}%'"
|
||||||
|
data = self.query_db(query)
|
||||||
|
if data:
|
||||||
|
return data[0][0]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def getNewEditionsByApparat(self, apparat_id: int) -> list[BookData]:
|
||||||
|
"""Get all new editions for a specific apparat
|
||||||
|
|
||||||
|
Args:
|
||||||
|
apparat_id (int): the id of the apparat
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list[tuple]: A list of tuples containing the new editions data
|
||||||
|
"""
|
||||||
|
query = "SELECT * FROM neweditions WHERE for_apparat=?"
|
||||||
|
results = self.query_db(query, (apparat_id,))
|
||||||
|
res = []
|
||||||
|
for result in results:
|
||||||
|
old_edition_edition = self.query_db(
|
||||||
|
"SELECT bookdata FROM media WHERE id=?", (result[2],), one=True
|
||||||
|
)
|
||||||
|
res.append(BookData().from_string(result[1]))
|
||||||
|
return res
|
||||||
|
|
||||||
|
def setOrdered(self, newBook_id: int):
|
||||||
|
query = "UPDATE neweditions SET ordered=1 WHERE id=?"
|
||||||
|
self.query_db(query, (newBook_id,))
|
||||||
|
|
||||||
|
def getNewEditionId(self, newBook: BookData):
|
||||||
|
query = "SELECT id FROM neweditions WHERE new_bookdata=?"
|
||||||
|
params = (newBook.to_dict,)
|
||||||
|
data = self.query_db(query, params, one=True)
|
||||||
|
if data:
|
||||||
|
return data[0]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def insertNewEdition(self, newBook: BookData, oldBookId: int, for_apparat: int):
|
||||||
|
query = "INSERT INTO neweditions (new_bookdata, old_edition_id, for_apparat) VALUES (?,?,?)"
|
||||||
|
params = (newBook.to_dict, oldBookId, for_apparat)
|
||||||
|
|
||||||
|
self.query_db(query, params)
|
||||||
|
|||||||
Reference in New Issue
Block a user