import CheckPermission from "./CheckPermission.js"; import conn from "./Conn.js"; class BorrowedBooks { async getBorBooks() { const sql = `SELECT borrowedbooks.BookID, borrowedbooks.cartID, DATE_FORMAT(borrowedbooks.end_of_borrowment, '%Y-%m-%d') as end_of_borrowment, borrowedbooks.quantity, DATE_FORMAT(borrowedbooks.start_of_borrowment, '%Y-%m-%d') as start_of_borrowment, borrowedbooks.UserID, borrowedbooks.bringedBack ,books.title, users.Name FROM borrowedbooks INNER JOIN books ON books.BookID = borrowedbooks.BookID INNER JOIN users ON users.UserID = borrowedbooks.UserID`; try { const response = await conn.promise().query(sql); return { status:200, messages:response[0] } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async getBorrowsByUser(userID) { const sql = `SELECT borrowedbooks.BookID, borrowedbooks.cartID, DATE_FORMAT(borrowedbooks.end_of_borrowment, '%Y-%m-%d') as end_of_borrowment, borrowedbooks.quantity, DATE_FORMAT(borrowedbooks.start_of_borrowment, '%Y-%m-%d') as start_of_borrowment, borrowedbooks.UserID, borrowedbooks.bringedBack, books.title FROM borrowedbooks INNER JOIN books ON books.BookID = borrowedbooks.BookID WHERE UserID = ?`; if(userID === null || userID === undefined) { return { status:403, messages:["Nincs jogosultságod megtekinteni az adatokat!"] } } try { const response = await conn.promise().query(sql, [userID]); return { status:200, messages:response[0] } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async getBorrowsByCartID(CartID, userID, isAdmin) { const sql = `SELECT borrowedbooks.BookID, borrowedbooks.cartID, DATE_FORMAT(borrowedbooks.end_of_borrowment, '%Y-%m-%d') as end_of_borrowment, borrowedbooks.quantity, DATE_FORMAT(borrowedbooks.start_of_borrowment, '%Y-%m-%d') as start_of_borrowment, borrowedbooks.UserID, borrowedbooks.bringedBack, books.title, users.Name FROM borrowedbooks INNER JOIN books ON books.BookID = borrowedbooks.BookID INNER JOIN users ON users.UserID = borrowedbooks.UserID WHERE cartID = ?`; if(!CheckPermission(userID, isAdmin, true)) { return { status:403, messages:["Nincs jogosultságod megtekinteni az adatokat!"] } } try { const response = await conn.promise().query(sql, [CartID]); if(response[0].length !==0) { return { status:200, messages:response[0][0] }; }else { return { status:404, messages:["A keresett erőforrás nem található!"] }; } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async getBorrowsByUserID(userID, isAdmin) { const sql = `SELECT borrowedbooks.BookID, borrowedbooks.cartID, DATE_FORMAT(borrowedbooks.end_of_borrowment, '%Y-%m-%d') as end_of_borrowment, borrowedbooks.quantity, DATE_FORMAT(borrowedbooks.start_of_borrowment, '%Y-%m-%d') as start_of_borrowment, borrowedbooks.UserID, borrowedbooks.bringedBack, books.title, users.Name FROM borrowedbooks INNER JOIN books ON books.BookID = borrowedbooks.BookID INNER JOIN users ON users.UserID = borrowedbooks.UserID WHERE borrowedbooks.UserID = ?`; if(isAdmin === null || isAdmin === undefined || isAdmin === "0") { return { status:403, messages:["Nincs jogosultságod megtekinteni az adatokat!"] } } try { const response = await conn.promise().query(sql, [userID]); if(response[0].length !==0) { return { status:200, messages:response[0] }; }else { return { status:404, messages:["A keresett erőforrás nem található!"] }; } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async checkBorrows(bookID, userID) { const sql = `SELECT COUNT(*) as BookNumber FROM borrowedbooks WHERE BookID = ? AND bringedBack = ? AND UserID = ?`; try { const response = await conn.promise().query(sql, [bookID, 0, userID]); return parseInt(response[0][0].BookNumber); } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async checkCartID(cartID) { const sql = `SELECT COUNT(*) as CartIDNumber FROM borrowedbooks WHERE cartID = ?`; try { const response = await conn.promise().query(sql, [cartID]); return parseInt(response[0][0].CartIDNumber); } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async addBorrow(borrowDatas) { const errors = []; const successes = []; if(borrowDatas.userID === null || borrowDatas.userID === undefined || borrowDatas.userID === "") errors.push("Nincs jogosultságod a művelet elvégzéséhez. Kérlek jelentkezz be!") if(await this.checkBorrows(borrowDatas.bookID, borrowDatas.userID) > 0) errors.push("Már kivettél egy ilyen könyvet, és még nem hoztad vissza!"); if(errors.length > 0) { return { status:400, messages:errors } } for (let borrowData of borrowDatas) { const sql = `INSERT INTO borrowedbooks (BookID, cartID, end_of_borrowment, quantity, start_of_borrowment, UserID) VALUES(?,?,?,?,?,?)`; try { const response = await conn.promise().query(sql, [ borrowData.BookID, borrowData.cartID, borrowData.end_of_borrowment, borrowData.quantity, borrowData.start_of_borrowment, borrowData.UserID ]); const successMessage = "[Sikeres kölcsönzés!]"; if(!successes.includes(successMessage)) { successes.push(successMessage); } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } if(successes.length > 0) { return { status:200, messages:successes }; } } async updateOrder(borrowData, isAdmin) { const sql = `UPDATE borrowedbooks SET bringedBack = ? WHERE cartID = ?`; if(isAdmin === null || isAdmin === undefined || isAdmin === "0") { return { status:403, messages:"Nincs jogosultságod felülírni a megrendelést!" } } try { const response = await conn.promise().query(sql, [ borrowData.bringedBack, borrowData.cartID, ]); if(response[0].affectedRows > 0) { return { status:200, messages:"Sikeres felülírás!" } }else { return { status:404, messages:"A megadott azonosító alapján nem található megrendelés! " } } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage); return { status:503, messages:["A szolgáltatás jelenleg nem elérhető! Próbálja meg később!"] }; } } async deleteOrder(cartID, userID, isAdmin) { const sql = `DELETE FROM borrowedbooks WHERE cartID = ?`; if(!CheckPermission(userID, isAdmin, true)) { return { status:403, messages:"Nincs jogosultságod törölni a bejegyzést!" } } try { const response = await conn.promise().query(sql, [cartID]); if(response[0].affectedRows > 0) { return { status:200, messages:"Sikeres törlés!" } } else { return { status:404, messages:"A megrendelés nem található a megadott azonosító alapján!" } } } catch(err) { console.log(err); console.log(err.errno); console.log(err.sqlMessage) return { status:503, messages:"A szolgáltatás jelenleg nem elérhető! Próbálja meg később!" }; } } } export default BorrowedBooks;