database changes
This commit is contained in:
@@ -2,9 +2,10 @@ import sqlite3 as sql
|
|||||||
import os
|
import os
|
||||||
from src import config
|
from src import config
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from src.schemas import USERS, MEDIA, LOANS, User, Book
|
from src.schemas import USERS, MEDIA, LOANS, User, Book, Loan
|
||||||
from src.utils.stringtodate import stringToDate
|
from src.utils import stringToDate, Log
|
||||||
|
|
||||||
|
log = Log("Database")
|
||||||
class Database:
|
class Database:
|
||||||
def __init__(self, db_path: str = None):
|
def __init__(self, db_path: str = None):
|
||||||
"""
|
"""
|
||||||
@@ -23,6 +24,7 @@ class Database:
|
|||||||
self.checkDatabaseStatus()
|
self.checkDatabaseStatus()
|
||||||
|
|
||||||
def checkDatabaseStatus(self):
|
def checkDatabaseStatus(self):
|
||||||
|
log.info("Checking Database Status")
|
||||||
if self.tableCheck() == []:
|
if self.tableCheck() == []:
|
||||||
# self.logger.log_critical("Database does not exist, creating tables")
|
# self.logger.log_critical("Database does not exist, creating tables")
|
||||||
self.createDatabase()
|
self.createDatabase()
|
||||||
@@ -48,17 +50,30 @@ class Database:
|
|||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
def createDatabase(self):
|
def createDatabase(self):
|
||||||
print("Creating Database")
|
log.info("Creating Database")
|
||||||
|
# print("Creating Database")
|
||||||
if not os.path.exists(config.database.path):
|
if not os.path.exists(config.database.path):
|
||||||
os.makedirs(config.database.path)
|
os.makedirs(config.database.path)
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
cursor.execute(USERS)
|
cursor.execute(USERS)
|
||||||
|
log.debug("Creating Users Table")
|
||||||
cursor.execute(MEDIA)
|
cursor.execute(MEDIA)
|
||||||
|
log.debug("Creating Media Table")
|
||||||
cursor.execute(LOANS)
|
cursor.execute(LOANS)
|
||||||
|
log.debug("Creating Loans Table")
|
||||||
conn.commit()
|
conn.commit()
|
||||||
self.close_connection(conn)
|
self.close_connection(conn)
|
||||||
|
|
||||||
|
def getLoanCount(self):
|
||||||
|
query = "SELECT COUNT(*) FROM loans"
|
||||||
|
conn = self.connect()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute(query)
|
||||||
|
result = cursor.fetchone()
|
||||||
|
self.close_connection(conn)
|
||||||
|
return result[0]
|
||||||
|
|
||||||
def tableCheck(self):
|
def tableCheck(self):
|
||||||
# check if database has tables
|
# check if database has tables
|
||||||
"""
|
"""
|
||||||
@@ -96,6 +111,7 @@ class Database:
|
|||||||
return users
|
return users
|
||||||
|
|
||||||
def insertUser(self, username, userno, usermail):
|
def insertUser(self, username, userno, usermail):
|
||||||
|
log.debug(f"Inserting User {userno}, {username}, {usermail}")
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
@@ -111,8 +127,20 @@ class Database:
|
|||||||
result = cursor.fetchone()
|
result = cursor.fetchone()
|
||||||
self.close_connection(conn)
|
self.close_connection(conn)
|
||||||
user = User(id=result[0], username=result[1], email=result[2])
|
user = User(id=result[0], username=result[1], email=result[2])
|
||||||
|
log.info(f"Returning User {user}")
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
def updateUser(self, username, userno, usermail):
|
||||||
|
log.debug(f"Updating User {userno}, {username}, {usermail}")
|
||||||
|
conn = self.connect()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute(
|
||||||
|
f"UPDATE users SET username = '{username}', usermail = '{usermail}' WHERE id = '{userno}'"
|
||||||
|
)
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
self.close_connection(conn)
|
||||||
|
|
||||||
def getActiveLoans(self, userid):
|
def getActiveLoans(self, userid):
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
@@ -124,9 +152,31 @@ class Database:
|
|||||||
except sql.OperationalError:
|
except sql.OperationalError:
|
||||||
result = []
|
result = []
|
||||||
self.close_connection(conn)
|
self.close_connection(conn)
|
||||||
|
log.info(f"Returning Active Loans {result}")
|
||||||
return str(len(result))
|
return str(len(result))
|
||||||
|
|
||||||
|
def getAllLoans(self):
|
||||||
|
loan_data = []
|
||||||
|
query = "SELECT * FROM loans"
|
||||||
|
conn = self.connect()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute(query)
|
||||||
|
loans = cursor.fetchall()
|
||||||
|
for loan in loans:
|
||||||
|
l = Loan(
|
||||||
|
loan[0],
|
||||||
|
loan[1],
|
||||||
|
loan[2],
|
||||||
|
stringToDate(loan[3]),
|
||||||
|
stringToDate(loan[4]),
|
||||||
|
loan[5],
|
||||||
|
stringToDate(loan[6]),
|
||||||
|
self.getMedia(loan[2]),
|
||||||
|
)
|
||||||
|
loan_data.append(l)
|
||||||
|
return loan_data
|
||||||
def insertLoan(self, userid, mediaid, loandate, duedate):
|
def insertLoan(self, userid, mediaid, loandate, duedate):
|
||||||
|
log.debug(f"Inserting Loan {userid}, {mediaid}, {loandate}, {duedate}")
|
||||||
query = f"INSERT INTO loans (user_id, media_id, loan_date, return_date) Values ('{userid}', '{mediaid}', '{loandate}', '{duedate}')"
|
query = f"INSERT INTO loans (user_id, media_id, loan_date, return_date) Values ('{userid}', '{mediaid}', '{loandate}', '{duedate}')"
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
@@ -135,22 +185,30 @@ class Database:
|
|||||||
self.close_connection(conn)
|
self.close_connection(conn)
|
||||||
|
|
||||||
def insertMedia(self, media):
|
def insertMedia(self, media):
|
||||||
query = f"INSERT OR IGNORE INTO media (ppn, title, signature, isbn) VALUES ('{media.ppn}', '{media.title}', '{media.signature}', '{media.isbn}')" # , '{media.link}'
|
log.debug(f"Inserting Media {media}")
|
||||||
|
query = f"INSERT OR IGNORE INTO media (ppn, title, signature, isbn,link) VALUES ('{media.ppn}', '{media.title}', '{media.signature}', '{media.isbn}','{media.link}')" # , '{media.link}'
|
||||||
|
log.info(f"Query: |{query}|")
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
cursor.execute(query)
|
cursor.execute(query)
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
|
||||||
self.close_connection(conn)
|
self.close_connection(conn)
|
||||||
return cursor.lastrowid
|
return cursor.lastrowid
|
||||||
|
|
||||||
|
def getLoansBy(self, field, value):
|
||||||
|
# query all loans, sort by date descending and return
|
||||||
|
pass
|
||||||
def getMediaSimilarSignatureByID(self, media_id) -> list[Book]:
|
def getMediaSimilarSignatureByID(self, media_id) -> list[Book]:
|
||||||
|
log.info(f"Getting Media Similar to {media_id}")
|
||||||
query = f"SELECT * FROM media WHERE id = '{media_id}'"
|
query = f"SELECT * FROM media WHERE id = '{media_id}'"
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
cursor.execute(query)
|
cursor.execute(query)
|
||||||
result = cursor.fetchone()
|
result = cursor.fetchone()
|
||||||
signature = result[1]
|
signature = result[1]
|
||||||
print(signature)
|
# print(signature)
|
||||||
query = f"SELECT * FROM media WHERE signature LIKE '%{signature}%'"
|
query = f"SELECT * FROM media WHERE signature LIKE '%{signature}%'"
|
||||||
cursor.execute(query)
|
cursor.execute(query)
|
||||||
result = cursor.fetchall()
|
result = cursor.fetchall()
|
||||||
@@ -167,9 +225,11 @@ class Database:
|
|||||||
database_id=res[0],
|
database_id=res[0],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
log.debug(f"Returning Similar Media {data}")
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def getMedia(self, media_id):
|
def getMedia(self, media_id):
|
||||||
|
# log.info(f"Getting Media {media_id}")
|
||||||
query = f"SELECT * FROM media WHERE id = '{media_id}'"
|
query = f"SELECT * FROM media WHERE id = '{media_id}'"
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
@@ -201,10 +261,11 @@ class Database:
|
|||||||
book.returned = res[5]
|
book.returned = res[5]
|
||||||
book.returned_date = res[6]
|
book.returned_date = res[6]
|
||||||
books.append(book)
|
books.append(book)
|
||||||
print(book)
|
log.info(f"Returning All Media entries ({len(books)}) for user {user_id}")
|
||||||
return books
|
return books
|
||||||
|
|
||||||
def checkMediaExists(self, media):
|
def checkMediaExists(self, media):
|
||||||
|
log.info(f"Checking Media {media}")
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
query = f"SELECT id, signature FROM media WHERE ppn = '{media.ppn}' OR title = '{media.title}' OR isbn = '{media.isbn}' OR signature = '{media.signature}'"
|
query = f"SELECT id, signature FROM media WHERE ppn = '{media.ppn}' OR title = '{media.title}' OR isbn = '{media.isbn}' OR signature = '{media.signature}'"
|
||||||
@@ -219,6 +280,7 @@ class Database:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def checkLoanState(self, book_id):
|
def checkLoanState(self, book_id):
|
||||||
|
log.info(f"Checking Loan State for {book_id}")
|
||||||
query = f"SELECT * FROM loans WHERE media_id = '{book_id}' AND returned = 0"
|
query = f"SELECT * FROM loans WHERE media_id = '{book_id}' AND returned = 0"
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
@@ -228,6 +290,7 @@ class Database:
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def returnMedia(self, media_id, returndate):
|
def returnMedia(self, media_id, returndate):
|
||||||
|
log.info(f"Returning Media {media_id}")
|
||||||
query = f"UPDATE loans SET returned = 1, returned_date = '{returndate}' WHERE media_id = '{media_id}' AND returned = 0"
|
query = f"UPDATE loans SET returned = 1, returned_date = '{returndate}' WHERE media_id = '{media_id}' AND returned = 0"
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
@@ -259,6 +322,7 @@ class Database:
|
|||||||
|
|
||||||
#
|
#
|
||||||
def selectClosestReturnDate(self, user_id):
|
def selectClosestReturnDate(self, user_id):
|
||||||
|
log.info(f"Selecting Closest Return Date for {user_id}")
|
||||||
query = f"SELECT return_date FROM loans WHERE user_id = '{user_id}' AND returned = 0 ORDER BY return_date ASC LIMIT 1"
|
query = f"SELECT return_date FROM loans WHERE user_id = '{user_id}' AND returned = 0 ORDER BY return_date ASC LIMIT 1"
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
@@ -269,6 +333,7 @@ class Database:
|
|||||||
return result[0]
|
return result[0]
|
||||||
|
|
||||||
def extendLoanDuration(self, signature, newDate):
|
def extendLoanDuration(self, signature, newDate):
|
||||||
|
log.info(f"Extending Loan Duration for {signature} to {newDate}")
|
||||||
book_id = self.checkMediaExists(Book(signature=signature))
|
book_id = self.checkMediaExists(Book(signature=signature))
|
||||||
query = f"UPDATE loans SET return_date = '{newDate}' WHERE media_id = '{book_id[0]}' AND returned = 0"
|
query = f"UPDATE loans SET return_date = '{newDate}' WHERE media_id = '{book_id[0]}' AND returned = 0"
|
||||||
conn = self.connect()
|
conn = self.connect()
|
||||||
|
|||||||
Reference in New Issue
Block a user