vizsgaremek/backend_konyvkolcsonzo_v5/index.js
2024-05-06 16:00:46 +02:00

317 lines
9.8 KiB
JavaScript

import express from "express";
import cors from "cors";
import cookieParser from "cookie-parser";
import Categories from "./app/Categories.js";
import Books from "./app/Books.js";
import conn from "./app/Conn.js";
import User from "./app/User.js";
import crypto from 'crypto';
import BorrowedBooks from "./app/BorrowedBooks.js";
const app = express();
app.use(cors({
origin:"http://localhost:5173",
credentials:true,
methods: "GET,HEAD,PUT,PATCH,POST,DELETE"
}));
app.use(express.json());
app.use(cookieParser());
const c = new Categories();
const b = new Books();
const u = new User();
const bo = new BorrowedBooks();
//Kategória lekérése ID alapján
//pl. http://localhost:3001/categories/15
app.get("/categories/:id" , async (req, res)=> {
const response = await c.getCategory(req.params.id);
res.status(response.status).send(response.messages);
});
//Összes kategória lekérése
//pl. http://localhost:3001/categories
app.get("/categories", async (req, res)=> {
const response = await c.getCategories();
res.status(response.status).send(response.messages);
});
//Könyvek lekérése categoryID alapján
//pl. http://localhost:3001/books/category/3
app.get("/books/category/:id", async (req, res)=> {
const response = await b.getBooksCatID(req.params.id);
res.status(response.status).send(response.messages);
});
//Könyv lekérése ID alapján
//pl. http://localhost:3001/books/18
app.get("/books/:id", async (req, res)=> {
const response = await b.getBook(req.params.id);
res.status(response.status).send(response.messages);
});
//Összes könyv lekérése
//pl. http://localhost:3001/books
app.get("/books", async (req, res)=> {
const response = await b.getBooks();
res.status(response.status).send(response.messages);
});
//Könyv törlése ID alapján
//pl. DELETE http://localhost:3001/books/60 TESZTELVE POSTMAN-NEL
app.delete("/books/:id", async (req, res)=> {
const response = await b.deleteBook(req.params.id, req.cookies.userID, req.cookies.isAdmin);
res.status(response.status).send(response.messages);
});
//Könyv hozzáadása
//pl. POST http://localhost:3001/books TESZTELVE POSTMAN-NEL CATEGORYID-T FRONTENDTŐL KAPJUK
/*
body-ba:
{
"author":"Jóósasdka",
"title":"Egy asascím",
"publisher":"Mitsaastomén",
"the_year_of_publishing":1111,
"description":"Blablablallvbllaslasla",
"language":"magyar",
"number_of_pages":666,
"cover":"puha",
"weight":280,
"ISBN":1234567891234,
"itemcode":780,
"price":3334533,
"discounted_price":22232,
"book_url ":"",
"categoryID":"3"
}
*/
app.post("/books", async (req, res)=> {
const response = await b.addBook(req.body, req.cookies.userID, req.cookies.isAdmin);
res.status(response.status).send(response.messages);
});
//Könyv módosítása
//pl. PUT http://localhost:3001/books/81 TESZTELVE POSTMAN-NEL
/*
body-ba:
{
"author":"MÓDOSÍTOTT",
"title":"MÓDOSÍTOTT",
"publisher":"MÓDOSÍTOTT",
"the_year_of_publishing":1111,
"description":"MÓDOSÍTOTTBlablablallvbllaslasla",
"language":"magyar",
"number_of_pages":666,
"cover":"puha",
"weight":280,
"ISBN":1234567891234,
"itemcode":780,
"price":3334533,
"discounted_price":22232,
"book_url ":""
}
*/
app.put("/books/:id", async (req, res)=> {
const books = req.body;
books.bookID = req.params.id;
const response = await b.updateBook(books, req.cookies.userID, req.cookies.isAdmin);
res.status(response.status).send(response.messages);
});
//Könyv keresés név kezdőbetű alapján
//pl. http://localhost:3001/books/search/p TESZTELVE POSTMAN-NEL
app.get("/books/search/:char", async (req, res)=> {
const response = await b.serchBooks(req.params.char);
res.status(response.status).send(response.messages);
});
app.post("/regisztracio", async(req, res)=> { //TESZTELVE
try {
const response = await u.register(req.body);
res.status(response.status).json(response.messages);
} catch(err) {
res.status(err.status).json(err);
}
});
app.post("/belepes", async (req, res)=> { //TESZTELVE
try {
const response = await u.login(req.body, res);
res.status(response.status).json(response.messages);
} catch(err) {
res.status(err.status).json(err);
}
});
//Jelszó módosítása ha létezik a user táblában az emailcím
//pl. PUT http://localhost:3001/resetpass
/*body-ba:
{
"email":"fek94688@ilebi.com",
"pass":"alma"
}
*/
app.put("/resetpass", async (req, res)=> { //POSTMAN-NEL TESZTELVE
const response = await u.resetPass(req.body);
res.status(response.status).json(response.messages);
})
//Összes kölcsönzött könyv lekérése + INNER JOINNAL szerepel benne a könyv címe és a user neve is
//pl. http://localhost:3001/admin/borrowedbooks //POSTMAN-NEL TESZTELVE
app.get("/admin/borrowedbooks", async (req, res)=> {
const response = await bo.getBorBooks();
res.status(response.status).send(response.messages);
});
//userID alapján a kikölcsönzött könyvek megjelenításe - userID-hoz általában az admin fér hozzá, ezért úgy állítottam be hogy az isAdmin értéke 1 legyen
//+ INNER JOINNAL szerepel benne a könyv címe és a user neve is
//pl. http://localhost:3001/admin/borrows/user/1 //POSTMAN-NEL TESZTELVE
app.get("/admin/borrows/user/:id", async (req, res)=> {
const response = await bo.getBorrowsByUserID(req.params.id, req.cookies.isAdmin);
res.status(response.status).send(response.messages);
});
//cartID alapján a kikölcsönzött könyvek megjelenításe - cartID-hoz általában az admin fér hozzá, ezért úgy állítottam be hogy az isAdmin értéke 1 legyen
//+ INNER JOINNAL szerepel benne a könyv címe és a user neve is
//pl. http://localhost:3001/admin/borrows/cart/17 //POSTMAN-NEL TESZTELVE
app.get("/admin/borrows/cart/:id", async (req, res)=> {
const response = await bo.getBorrowsByCartID(req.params.id, req.cookies.userID, req.cookies.isAdmin);
res.status(response.status).send(response.messages);
});
//UserID alapján, csak a USER saját megrendeléseit látja!!!!(!!!!!!a UserID a cookies - ból jön így a belépett felhasználó csak a saját rendeléseit listáztathatja ki) a kikölcsönzött könyvek megjelenítése + INNER JOINNAL szerepel benne a könyv neve is nem csak a BookID; UserID a cookieból jön!!!
//pl. http://localhost:3001/user/borrows //POSTMAN-NEL TESZTELVE
app.get("/user/borrows", async (req, res)=> {
const response = await bo.getBorrowsByUser(req.cookies.userID);
res.status(response.status).send(response.messages);
})
//Könykölcsönzés felvitele
//pl.POST http://localhost:3001/borrows //POSTMAN-NEL TESZTELVE - KEZELI AZT IS HA KÉTSZER AKARJA KIVENNI A KÖNYVET ÉS MÉG NEM VITTE VISSZA
/*
body-ba:
{
"bookID":"3",
"cartID":"17", //frontend oldaról jön ezért nem autoincrement
"end_of_borrowment":"2024-12-21",
"quantity":"1",
"start_of_borrowment":"2024-12-18"
}
*/
app.post("/borrows", async (req, res)=> { //userID a cookies-ból jön!!!!!! a belépett felhasználó tud csak kölcsönözni, cartID a megbeszéltek szerint a frontendről jön és nem autoincrement
const borrowData = req.body.borrowbooks;
console.log(borrowData[0]);
borrowData.userID = req.cookies.userID;
console.log(borrowData.userID);
console.log(typeof(borrowData.userID));
const response = await bo.addBorrow(borrowData);
res.clearCookie("userID");
res.clearCookie("isAdmin");
res.clearCookie("email");
res.status(response.status).send(response.messages);
});
//Kölcsönzések módosítása (a megbeszéltek alapján a bringedBAck értékét 1-re módosítani) cartID alapján
//pl. PUT http://localhost:3001/admin/borrows/cart/19 //POSTMAN-NEL TESZTELVE - Ha nem talál rendelésazonosító alapján hibát jelez
/*
body-ba:
{
"bringedBack":"1" "
}
*/
app.put("/admin/borrows/cart/:id", async (req, res)=> {
const order = req.body;
order.cartID = req.params.id;
const response = await bo.updateOrder(order,req.cookies.isAdmin);
res.status(response.status).send(response.messages);
});
//Kölcsönzés törlése cartID alapján
//pl. DELETE http://localhost:3001/admin/borrows/cart/19 //POSTMAN-NEL TESZTELVE - Ha nem talál rendelésazonosító alapján hibát jelez
app.delete("/admin/borrows/cart/:id", async (req, res)=> {
const response = await bo.deleteOrder(
req.params.id,
req.cookies.userID,
req.cookies.isAdmin
);
res.status(response.status).send(response.messages)
});
//USER törlése a user táblából
//pl. DELETE http://localhost:3001/admin/users/23 //POSTMAN-NEL TESZTELVE - Ha nem talál USERID alapján hibát jelez
app.delete("/admin/users/:id", async (req, res)=> {
const response = await u.deleteUser(
req.params.id,
req.cookies.userID,
req.cookies.isAdmin
);
res.status(response.status).send(response.messages)
});
//Összes user lekérése adminként
//pl. GET http://localhost:3001/admin/users //POSTMAN-NEL TESZTELVE - Jogosultságot ellenőriz!
app.get("/admin/users", async (req, res)=> {
const response = await u.getUsers(req.cookies.isAdmin);
res.status(response.status).send(response.messages);
});
//User keresés név kezdőbetű alapján
//pl. http://localhost:3001/admin/users/search/p TESZTELVE POSTMAN-NEL
app.get("/admin/users/search/:char", async (req, res)=> {
const response = await u.searchUsers(req.params.char);
res.status(response.status).send(response.messages);
});
//User adatainak kilistázása cookies-ból
//pl http://localhost:3001/user //FONTOS, HOGY BE LEGYEN JELENTKEZVE MERT SÜTIBŐL SZEDI A USERID-T - POSTMAN-NEL TESZTELVE
app.get("/user", async (req, res)=> {
const response = await u.getProfile(req.cookies.userID);
res.status(response.status).send(response.messages);
})
app.listen(3001, ()=>{console.log("Az alkalmazás a 3001-es porton fut! 😎")});