From cea7ce251b1667e843e9059dd8805879c0a137b9 Mon Sep 17 00:00:00 2001 From: BenArou <72353723+BenArou@users.noreply.github.com> Date: Sat, 8 May 2021 00:41:18 +0200 Subject: [PATCH] work done --- core/ArrayList.js | 43 +++++ core/ListOfItems.js | 58 +++++++ core/category.js | 95 +++++++++++ core/item.js | 89 +++++++++++ core/list.js | 95 +++++++++++ core/pool.js | 24 +++ core/user.js | 127 +++++++++++++++ db.sql | 62 +++++++ index.js | 49 ++++++ package.json | 25 +++ routes/pages.js | 381 ++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 1048 insertions(+) create mode 100644 core/ArrayList.js create mode 100644 core/ListOfItems.js create mode 100644 core/category.js create mode 100644 core/item.js create mode 100644 core/list.js create mode 100644 core/pool.js create mode 100644 core/user.js create mode 100644 db.sql create mode 100644 index.js create mode 100644 package.json create mode 100644 routes/pages.js diff --git a/core/ArrayList.js b/core/ArrayList.js new file mode 100644 index 00000000..cb575778 --- /dev/null +++ b/core/ArrayList.js @@ -0,0 +1,43 @@ +const pool = require('./pool'); +function ArrayList(){}; +ArrayList.prototype = { + + + + create: function(body, callback) + { + + + var bind = []; + + for(prop in body){ + bind.push(body[prop]); + } + + let sql = `INSERT INTO ArrayList(name,user,createdAt) VALUES ( ? , ? , ?)`; + + pool.query(sql, bind, function(err, result) { + if(err) console.log(err); + else + callback(result.insertId); + }); + }, + + + + + + + delete : function(id,callback) { + + let sql = `DELETE FROM ArrayList WHERE id = ?`; + pool.query(sql,id,function(err , ret) { + if(err) console.log(err); + callback(); + }); + + }, + +} + +module.exports = ArrayList ; diff --git a/core/ListOfItems.js b/core/ListOfItems.js new file mode 100644 index 00000000..6310c71b --- /dev/null +++ b/core/ListOfItems.js @@ -0,0 +1,58 @@ +const pool = require('./pool'); +function ListOfItems(){}; +ListOfItems.prototype = { + + find: function(list = null , callback) + { + + + let sql = `SELECT * FROM ListOfItems WHERE list = ?`; + + + pool.query(sql,list, function(err, result) { + if(err) console.log(err); + + if(result.length) { + callback(result[0]); + }else { + callback(null); + } + }); + }, + + + create: function(body, callback) + { + + + var bind = []; + + for(prop in body){ + bind.push(body[prop]); + } + + let sql = `INSERT INTO ListOfItems(list,item) VALUES ( ? , ? )`; + + pool.query(sql, bind, function(err, result) { + if(err) console.log(err); + else + callback(result.insertId); + }); + }, + + + + + delete : function(id,callback) { + + let sql = `DELETE FROM ListOfItems WHERE id = ?`; + pool.query(sql,id,function(err , ret) { + if(err) console.log(err); + callback(); + }); + + }, + +} + +module.exports = ListOfItems ; diff --git a/core/category.js b/core/category.js new file mode 100644 index 00000000..5069f5b7 --- /dev/null +++ b/core/category.js @@ -0,0 +1,95 @@ +const pool = require('./pool'); +function Category(){}; +Category.prototype = { + + find: function(item = null , callback) + { + + + let sql = `SELECT * FROM Category WHERE id = ?`; + + + pool.query(sql,list, function(err, result) { + if(err) console.log(err); + + if(result.length) { + callback(result[0]); + }else { + callback(null); + } + }); + }, + + + create: function(body, callback) + { + + + var bind = []; + + for(prop in body){ + bind.push(body[prop]); + } + + let sql = `INSERT INTO Category(name,user,createdAt) VALUES ( ? , ? , ?)`; + + pool.query(sql, bind, function(err, result) { + if(err) console.log(err); + else + callback(result.insertId); + }); + }, + + + + update:function(old,body,callback){ + + var self = this ; + + self.find(old , function(result) { + + if(result) { + + var bind = [] ; + + for(prop in body){ + bind.push(body[prop]); + } + + bind.push(old); + + let sql = `UPDATE Category SET name = ?, updatedAt = ? WHERE id= ?`; + + pool.query(sql, bind, function(err, ret) { + if(err) console.log(err); + + self.find(bind[0], function(user) { + + if(user) { + callback(user); + return; + } + + callback(null); + }); + + }); + } + }); + }, + + + + delete : function(id,callback) { + + let sql = `DELETE FROM Category WHERE id = ?`; + pool.query(sql,id,function(err , ret) { + if(err) console.log(err); + callback(); + }); + + }, + +} + +module.exports = Category ; diff --git a/core/item.js b/core/item.js new file mode 100644 index 00000000..52422175 --- /dev/null +++ b/core/item.js @@ -0,0 +1,89 @@ +const pool = require('./pool'); +function Item(){}; +Item.prototype = { + + find: function(item = null , callback) + { + + let sql = `SELECT * FROM item WHERE id = ?`; + + pool.query(sql, item, function(err, result) { + if(err) console.log(err); + + if(result.length) { + callback(result[0]); + }else { + callback(null); + } + }); + }, + + create: function(body, callback) + { + + var bind = []; + + for(prop in body){ + bind.push(body[prop]); + } + + let sql = `INSERT INTO item(name, category, user,note,image,createdAt) VALUES (?, ?, ? , ? , ? , ?)`; + + pool.query(sql, bind, function(err, result) { + if(err) console.log(err); + else + callback(result.insertId); + }); + }, + + + + update:function(old,body,callback){ + + var self = this ; + + self.find(old , function(result) { + + if(result) { + + var bind = [] ; + + for(prop in body){ + bind.push(body[prop]); + } + + bind.push(old); + + let sql = `UPDATE item SET name = ?, image = ?, note = ?,updatedAt = ? WHERE id= ?`; + + pool.query(sql, bind, function(err, ret) { + if(err) console.log(err); + + self.find(bind[0], function(user) { + + if(user) { + callback(user); + return; + } + + callback(null); + }); + + }); + } + }); + }, + + delete : function(id,callback) { + + let sql = `DELETE FROM item WHERE id = ?`; + pool.query(sql,id,function(err , ret) { + if(err) console.log(err); + callback(); + }); + + }, + +} + +module.exports = Item ; diff --git a/core/list.js b/core/list.js new file mode 100644 index 00000000..c4758f0b --- /dev/null +++ b/core/list.js @@ -0,0 +1,95 @@ +const pool = require('./pool'); +function List(){}; +List.prototype = { + + find: function(item = null , callback) + { + + + let sql = `SELECT * FROM List WHERE id = ?`; + + + pool.query(sql,list, function(err, result) { + if(err) console.log(err); + + if(result.length) { + callback(result[0]); + }else { + callback(null); + } + }); + }, + + + create: function(body, callback) + { + + + var bind = []; + + for(prop in body){ + bind.push(body[prop]); + } + + let sql = `INSERT INTO List(name,user,createdAt) VALUES ( ? , ? , ?)`; + + pool.query(sql, bind, function(err, result) { + if(err) console.log(err); + else + callback(result.insertId); + }); + }, + + + + update:function(old,body,callback){ + + var self = this ; + + self.find(old , function(result) { + + if(result) { + + var bind = [] ; + + for(prop in body){ + bind.push(body[prop]); + } + + bind.push(old); + + let sql = `UPDATE List SET name = ?, updatedAt = ? WHERE id= ?`; + + pool.query(sql, bind, function(err, ret) { + if(err) console.log(err); + + self.find(bind[0], function(user) { + + if(user) { + callback(user); + return; + } + + callback(null); + }); + + }); + } + }); + }, + + + + delete : function(id,callback) { + + let sql = `DELETE FROM List WHERE id = ?`; + pool.query(sql,id,function(err , ret) { + if(err) console.log(err); + callback(); + }); + + }, + +} + +module.exports = List ; diff --git a/core/pool.js b/core/pool.js new file mode 100644 index 00000000..ed33d3e7 --- /dev/null +++ b/core/pool.js @@ -0,0 +1,24 @@ +const util = require('util'); +const mysql = require('mysql2'); + + +const pool = mysql.createPool({ + connectionLimit: 10, + host: 'localhost', + user: 'root', + password: 'emino', + database: 'libraryManagement' +}); + +pool.getConnection((err, connection) => { + if(err) + console.error(err); + + if(connection) + connection.release(); + return; +}); + +pool.query = util.promisify(pool.query); + +module.exports = pool; diff --git a/core/user.js b/core/user.js new file mode 100644 index 00000000..6c28f1fa --- /dev/null +++ b/core/user.js @@ -0,0 +1,127 @@ +const pool = require('./pool'); +const bcrypt = require('bcrypt'); + +function User() {}; + +User.prototype = { + + find : function(user = null , callback) + { + + if(user) { + + var field = Number.isInteger(user) ? 'id' : 'username'; + } + + let sql = `SELECT * FROM users WHERE ${field} = ?`; + + + pool.query(sql, user, function(err, result) { + if(err) console.log(err); + + if(result.length) { + callback(result[0]); + }else { + callback(null); + } + }); + }, + + + + create : function(body, callback) + { + + var pwd = body['password']; + + console.log(pwd); + + body.password = bcrypt.hashSync(pwd,10); + + + var bind = []; + + for(prop in body){ + bind.push(body[prop]); + } + + let sql = `INSERT INTO users(username, email, password) VALUES (?, ?, ?)`; + + pool.query(sql, bind, function(err, result) { + if(err) console.log(err); + else + callback(result.insertId); + }); + }, + + login : function(username, password, callback) + { + + this.find(username, function(user) { + + if(user) { + + if(bcrypt.compareSync(password, user.password)) { + + callback(user); + return; + } + } + + callback(null); + }); + + }, + + modify : function(old,body,callback){ + + var self = this ; + + self.find(old , function(result) { + + if(result) { + + var bind = [] ; + + for(prop in body){ + bind.push(body[prop]); + } + + bind.push(old); + + let sql = `UPDATE users SET username = ?, email = ? WHERE id = ?`; + + pool.query(sql, bind, function(err, ret) { + if(err) console.log(err); + + self.find(bind[0], function(user) { + + if(user) { + callback(user); + return; + } + + callback(null); + }); + + }); + } + }); + }, + + + delete: function(id,callback) { + + let sql = `DELETE FROM users WHERE id = ?`; + pool.query(sql,id,function(err , ret) { + if(err) console.log(err); + callback(); + }); + + }, + + + +} + +module.exports = User; diff --git a/db.sql b/db.sql new file mode 100644 index 00000000..57215ac8 --- /dev/null +++ b/db.sql @@ -0,0 +1,62 @@ +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(20) DEFAULT NULL, + `email` varchar(255) CHARACTER SET utf8 DEFAULT NULL, + `password` varchar(128) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UC_username` (`username`) +); + +CREATE TABLE `list` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user` int(11) NOT NULL, + `name` varchar(50) NOT NULL, + `createdAt` varchar(50) , + `updatedAt` varchar(50), + PRIMARY KEY (`id`), + KEY `user` (`user`), + CONSTRAINT `List_ibfk` FOREIGN KEY (`user`) REFERENCES `users` (`id`) +); + +CREATE TABLE `category` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user` int(11) NOT NULL, + `name` varchar(50) NOT NULL, + `createdAt` varchar(50) , + `updatedAt` varchar(50), + PRIMARY KEY (`id`), + KEY `user` (`user`), + CONSTRAINT `Category_ibfk` FOREIGN KEY (`user`) REFERENCES `users` (`id`) +); + +CREATE TABLE `item` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user` int(11) NOT NULL, + `category` int(11) NOT NULL, + `name` varchar(50) NOT NULL, + `note` varchar(50) DEFAULT NULL, + `image` text DEFAULT NULL, + `createdAt` varchar(50) , + `updatedAt` varchar(50), + PRIMARY KEY (`id`), + CONSTRAINT `item_ibfk_1` FOREIGN KEY (`user`) REFERENCES `users` (`id`), + CONSTRAINT `item_ibfk_2` FOREIGN KEY (`category`) REFERENCES `category` (`id`) +); + +CREATE TABLE `listOfItems` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `item` int(11) NOT NULL, + `list` int(11) NOT NULL, + PRIMARY KEY (`id`), + CONSTRAINT `LOI_ibfk1` FOREIGN KEY (`list`) REFERENCES `list` (`id`), + CONSTRAINT `LOI_ibfk2` FOREIGN KEY (`item`) REFERENCES `item` (`id`) +); + +CREATE TABLE `arrayList` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `number` int(11) NOT NULL, + `list` int(11) NOT NULL, + PRIMARY KEY (`id`), + KEY `list` (`list`), + CONSTRAINT `ArrayList_ibfk` FOREIGN KEY (`list`) REFERENCES `list` (`id`) +); diff --git a/index.js b/index.js new file mode 100644 index 00000000..ddbab78a --- /dev/null +++ b/index.js @@ -0,0 +1,49 @@ +const express = require('express') ; +const session = require('express-session'); +const http = require('http'); +const path = require('path') ; +const pageRouter = require('./routes/pages'); +const chatsRouter = require('./routes/chatroutes'); +const app = express() ; +const server = http.createServer(app) ; +const bodyParser = require('body-parser'); + + + +app.use(express.static(__dirname + '/data')); +app.use((req , res , next) => { + console.log(req.url); + next(); +}); + +app.use(session({ + secret:' { + var err = new Error('Page not found'); + err.status = 404; + next(err); +}) + +// Handling errors (send them to the client) +app.use((err, req, res, next) => { + res.status(err.status || 500); + res.send(err.message); +}); + +server.listen('3000', + () => console.log('running ..') +); diff --git a/package.json b/package.json new file mode 100644 index 00000000..4dfff4e0 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "librarybackend", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "nodemon index" + }, + "author": "", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.0.0", + "crypto": "^1.0.1", + "express": "^4.17.1", + "express-session": "^1.17.1", + "multer": "^1.4.2", + "mysql": "^2.18.1", + "mysql2": "^2.2.5", + "util.promisify": "^1.0.1" + }, + "devDependencies": { + "nodemon": "^2.0.7" + } +} diff --git a/routes/pages.js b/routes/pages.js new file mode 100644 index 00000000..f94d58ff --- /dev/null +++ b/routes/pages.js @@ -0,0 +1,381 @@ +const express = require('express'); +const User = require('../core/user'); +const Item = require('../core/item'); +const Category = require('../core/category'); +const ArrayList = require('../core/arraylist'); +const List = require('../core/list'); +const ListOfItems = require('../core/listOfItems'); +const router = express.Router() ; +const multer = require('multer') ; + +user = new User() ; +item = new Item() ; +category = new Category() ; +array = new ArrayList() ; +list = new List(); +listOfItems = new ListOfItems() ; + + +router.post('/login' , (req,res,next) => { + user.login(req.body.username,req.body.password, function(result) { + if(result) { + console.log('logged ' + result.username); + req.session.user = result; + req.session.opp = 1; + res.send({"id" : result.id}) ; + + } + else res.send(403) ; + }); +}); + +router.post('/register' , (req,res) => { + + console.log(req.body); + + let input = { + username : req.body.username, + email : req.body.email, + admin : false, + super_admin : false, + password : req.body.password + } + + + user.create(input,function(result){ + if(result) { + + req.session.user = result; + req.session.opp = 0; + res.send(200); + + } + else res.send('error registering!'); + }); + +}); + +router.get('/loggout', (req, res, next) => { + // Check if the session is exist + if(req.session.user) { + // destroy the session and redirect the user to the index page. + req.session.destroy(function() { + console.log('disconnected'); + }); + } + else { + console.log('not connected !'); + } +}); + +// updates + +router.put('/updateUser/:id' , (req , res) => { + if(req.session.user) { + let input = { + username : req.body.username, + email : req.body.email, + } + + user.update(req.params.id,input, function(result) { + req.session.user = result; + req.session.opp = 1 ; + res.sendStatus(200); + }); + } +}); + +router.put('/updateItem/:id' , (req , res) => { + if(req.session.user) { + let input = { + name : req.body.name, + category : req.body.category, + user : req.body.user, + note : req.body.note, + image : req.body.image, + createdAt : req.body.createdAt, + } + + items.update(req.params.id,input, function(result) { + req.session.user = result; + req.session.opp = 1 ; + res.sendStatus(200); + }); + } +}); + +router.put('/updateList/:id' , (req , res) => { + if(req.session.user) { + let input = { + name : req.body.name, + user : req.body.user, + createdAt : req.body.createdAt, + } + + list.update(req.params.id,input, function(result) { + req.session.user = result; + req.session.opp = 1 ; + res.sendStatus(200); + }); + } +}); + +router.put('/updateCategory/:id' , (req , res) => { + if(req.session.user) { + let input = { + name : req.body.name, + user : req.body.user, + createdAt : req.body.createdAt, + } + + user.update(req.params.id,input, function(result) { + req.session.user = result; + req.session.opp = 1 ; + res.sendStatus(200); + }); + } +}); + + +// deletion + +router.delete('/deleteItem/:id' , (req , res) => { + if(req.session.user) { + item.delete(req.params.id, + () => { + res.send(); + } + ); + } + else res.send(403); +}); + +router.delete('/deleteList/:id' , (req , res) => { + if(req.session.user) { + list.delete(req.params.id, + () => { + res.send(); + } + ); + } + else res.send(403); +}); + +router.delete('/deleteCategory/:id' , (req , res) => { + if(req.session.user) { + category.delete(req.params.id, + () => { + res.send(); + } + ); + } + else res.send(403); +}); + +router.delete('/deleteUser/:id' , (req , res) => { + if(req.session.user) { + user.delete(req.params.id, + () => { + res.send(); + } + ); + } + else res.send(403); +}); + +router.delete('/deleteListOfItems/:id' , (req , res) => { + if(req.session.user) { + listOfItems.delete(req.params.id, + () => { + res.send(); + } + ); + } + else res.send(403); +}); + +router.delete('/deleteArray/:id' , (req , res) => { + if(req.session.user) { + array.delete(req.params.id, + () => { + res.send(); + } + ); + } + else res.send(403); +}); + +// finding + +router.get('/user/:id' , (req , res) => { + if(req.session.user) { + user.find(req.params.id, + (ret) => { + if(ret) res.send(ret); + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +router.get('/item/:id' , (req , res) => { + if(req.session.user) { + item.find(req.params.id, + (ret) => { + if(ret) res.send(ret); + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +router.get('/category/:id' , (req , res) => { + if(req.session.user) { + category.find(req.params.id, + (ret) => { + if(ret) res.send(ret); + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +router.get('/list/:id' , (req , res) => { + if(req.session.user) { + list.find(req.params.id, + (ret) => { + if(ret) res.send(ret); + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +router.get('/category/:list_id' , (req , res) => { + if(req.session.user) { + listOfItems.find(req.params.list_id, + (ret) => { + if(ret) res.send(ret); + else res.send(500) ; + } + ); + } + else res.send(403); +}); + + + + + + + + + + + + + +// Creation + + +router.post('/createItem' , (req , res) => { + if(req.session.user) { + + let input = { + name : req.body.name, + category : req.body.category, + user : req.body.user, + note : req.body.note, + image : req.body.image, + createdAt : req.body.createdAt, + } + + item.create( + input, (result) => { + if(result)res.send(200) ; + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +router.post('/createCategory' , (req , res) => { + if(req.session.user) { + + let input = { + name : req.body.name, + user : req.body.user, + createdAt : req.body.createdAt, + } + + category.create( + input, (result) => { + if(result)res.send(200) ; + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +router.post('/createList' , (req , res) => { + if(req.session.user) { + + let input = { + name : req.body.name, + user : req.body.user, + createdAt : req.body.createdAt, + } + + list.create( + input, (result) => { + if(result)res.send(200) ; + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +router.post('/createListOfItems' , (req , res) => { + if(req.session.user) { + + let input = { + list : req.body.list, + item : req.body.item, + } + + listOfItems.create( + input, (result) => { + if(result)res.send(200) ; + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +router.post('/createArrayList' , (req , res) => { + if(req.session.user) { + + let input = { + list : req.body.list, + number : req.body.number, + } + + array.create( + input, (result) => { + if(result)res.send(200) ; + else res.send(500) ; + } + ); + } + else res.send(403); +}); + +module.exports = router ;