112 lines
3.6 KiB
JavaScript
112 lines
3.6 KiB
JavaScript
import e from "express";
|
|
import cors from "cors";
|
|
import bodyParser from "body-parser";
|
|
import bcrypt from "bcrypt";
|
|
import Database from "better-sqlite3";
|
|
|
|
const app = e();
|
|
const port = 3000;
|
|
const db = new Database("./database.db");
|
|
|
|
app.use(cors());
|
|
app.use(e.json());
|
|
app.use(bodyParser.json());
|
|
|
|
app.get('/', (req, res) => {
|
|
res.send("Nothing Here");
|
|
});
|
|
|
|
app.get('/currentRooms', (req, res) => {
|
|
// req has no data
|
|
// res has all room at current time
|
|
console.log("currentRooms");
|
|
let stmt = db.prepare(`SELECT * FROM TimeSlots`);
|
|
let records = stmt.all();
|
|
res.status(200).json({records: records});
|
|
});
|
|
|
|
app.post('/addTimeSlot', (req, res) => {
|
|
// req has roomid userid starttime and end time
|
|
// res has success or faliure
|
|
console.log("addTimeSlot");
|
|
const body = req.body;
|
|
let roomid = parseInt(body.roomid);
|
|
let userid = parseInt(body.userid);
|
|
let stmt = db.prepare(`INSERT INTO TimeSlots (TimeStart, TimeEnd, Room) VALUES ('${body.startTime}', '${body.endTime}', ${roomid});`);
|
|
stmt.run();
|
|
stmt = db.prepare(`UPDATE Users SET Submissions = Submissions + 1 WHERE Id=${userid};`);
|
|
stmt.run();
|
|
res.status(200).send("added timeslot");
|
|
});
|
|
|
|
app.post('/addRoom', (req, res) => {
|
|
// req has userid and roomname
|
|
// res has success or faliure
|
|
console.log("addRoom");
|
|
const body = req.body;
|
|
let name = req.body.roomName.toUpperCase();
|
|
let stmt = db.prepare(`SELECT * FROM Rooms WHERE RoomName='${name}'`);
|
|
let storedRecord = stmt.get();
|
|
if (storedRecord) {
|
|
res.status(400).send("room already exists");
|
|
return;
|
|
}
|
|
stmt = db.prepare(`INSERT INTO Rooms (RoomName) VALUES (${name})`);
|
|
stmt.run();
|
|
stmt = db.prepare(`UPDATE Users SET Submissions = Submissions + 1 WHERE Id=${parseInt(body.userid)};`);
|
|
stmt.run();
|
|
res.status(200).send("added room");
|
|
});
|
|
|
|
app.get('/getRooms', (req, res) => {
|
|
// req has no data
|
|
// res has success or faliure
|
|
console.log("getRooms");
|
|
let stmt = db.prepare(`SELECT * FROM Rooms`);
|
|
let records = stmt.all();
|
|
res.status(200).send({records: records});
|
|
});
|
|
|
|
app.post('/createUser', async (req, res) => {
|
|
// req has email pass(hashed) and name
|
|
// res has success or fail
|
|
console.log("sign up");
|
|
const body = req.body;
|
|
let stmt = db.prepare(`SELECT * FROM Users WHERE Email='${body.email}';`);
|
|
let storedRecord = stmt.get();
|
|
if (storedRecord) {
|
|
res.status(400).send("account with that email already exists");
|
|
return;
|
|
}
|
|
const generatedHash = await bcrypt.hash(body.pass, 10);
|
|
stmt = db.prepare(`INSERT INTO Users (Email, Pass, Username, Submissions) VALUES ('${body.email}', '${generatedHash}', '${body.name}', 0)`);
|
|
stmt.run();
|
|
stmt = db.prepare(`SELECT Id FROM Users WHERE Email='${body.email}';`);
|
|
const uid = stmt.get();
|
|
res.status(200).send({uid: uid});
|
|
});
|
|
|
|
app.post('/login', async (req, res) => {
|
|
// req has email and pass(hashed)
|
|
// res has success or fail
|
|
console.log("login");
|
|
const body = req.body;
|
|
let stmt = db.prepare(`SELECT Pass FROM Users WHERE Email='${body.email}';`);
|
|
let storedHash = stmt.get();
|
|
if (!storedHash) {
|
|
res.status(400).send("problem with email");
|
|
return;
|
|
}
|
|
if (await bcrypt.compare(body.pass, storedHash.Pass)){
|
|
stmt = db.prepare(`SELECT Id FROM Users WHERE Email='${body.email}';`);
|
|
const uid = stmt.get();
|
|
res.status(200).send({uid: uid});
|
|
} else {
|
|
res.status(400).send("incorrect password");
|
|
}
|
|
});
|
|
|
|
app.listen(port, () => {
|
|
console.log(`Listening on ${port}`);
|
|
});
|