From 285a734ca03de7b56499d5bea889dbde99a13f50 Mon Sep 17 00:00:00 2001 From: chopster44 Date: Thu, 19 Mar 2026 01:42:59 +0000 Subject: [PATCH] adding rooms --- backend/database.db | Bin 24576 -> 24576 bytes backend/index.js | 47 ++++++++++++++++++++---- backend/setup.js | 2 +- frontend/src/App.vue | 4 +- frontend/src/components/AddRoom.vue | 30 +++++++++++++++ frontend/src/components/AddTimeSlot.vue | 44 ++++++++++++++++++++-- frontend/src/components/HomePage.vue | 4 +- frontend/src/components/Login.vue | 5 +++ 8 files changed, 121 insertions(+), 15 deletions(-) create mode 100644 frontend/src/components/AddRoom.vue diff --git a/backend/database.db b/backend/database.db index 321244b6b986360cb4b99624732374c15410b130..f5f73f494e00d2fb491e9660a651542273892401 100644 GIT binary patch delta 258 zcmZoTz}Rqrae_1>|3n#QM*fWn%lKKQFz`>=EU3`M&zZ%<&S2Zfs>wKco_rD`(mVHh%#hl0#b&Ctc)Pa z0Hl?Pe-i`$P5w+e8^>Mz)O!%lKKQGVo8`EU3`U&zZ@@&S2Zfs>v~Vu6)ua1r`A| oM*go1{9l2xm-r`6kQC%(WEN)(Elw>eX5wW40s*Lu1{*3D0G^~8X8-^I diff --git a/backend/index.js b/backend/index.js index 106a9a1..d9423cb 100644 --- a/backend/index.js +++ b/backend/index.js @@ -19,30 +19,58 @@ app.get('/', (req, res) => { 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}); - console.log("currentRooms"); }); -app.get('/addTimeslot', (req, res) => { +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.get('/addRoom', (req, res) => { +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(); @@ -53,23 +81,26 @@ app.post('/createUser', async (req, res) => { 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(); - res.status(200).send("account created"); - console.log("sign up"); + 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; - const stmt = db.prepare(`SELECT Pass FROM Users WHERE Email='${body.email}';`); + 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)){ - res.send(200); - console.log("login"); + 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"); } diff --git a/backend/setup.js b/backend/setup.js index bc61812..402fac4 100644 --- a/backend/setup.js +++ b/backend/setup.js @@ -14,7 +14,7 @@ CREATE TABLE Users ( CREATE TABLE Rooms ( Id INTEGER PRIMARY KEY ASC AUTOINCREMENT, - RoomName TEXT + RoomName TEXT UNIQUE ); CREATE TABLE TimeSlots ( diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 098bcbf..0b602f6 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -3,6 +3,7 @@ import { onBeforeMount, ref } from 'vue'; import Login from './components/Login.vue'; import HomePage from './components/HomePage.vue'; import AddTimeSlot from './components/AddTimeSlot.vue'; +import AddRoom from './components/AddRoom.vue'; const page = ref(0); @@ -17,5 +18,6 @@ onBeforeMount(async () => { diff --git a/frontend/src/components/AddRoom.vue b/frontend/src/components/AddRoom.vue new file mode 100644 index 0000000..1c11033 --- /dev/null +++ b/frontend/src/components/AddRoom.vue @@ -0,0 +1,30 @@ + + \ No newline at end of file diff --git a/frontend/src/components/AddTimeSlot.vue b/frontend/src/components/AddTimeSlot.vue index 14d64fe..125287c 100644 --- a/frontend/src/components/AddTimeSlot.vue +++ b/frontend/src/components/AddTimeSlot.vue @@ -1,7 +1,45 @@ \ No newline at end of file diff --git a/frontend/src/components/HomePage.vue b/frontend/src/components/HomePage.vue index 01bb9f2..65870ea 100644 --- a/frontend/src/components/HomePage.vue +++ b/frontend/src/components/HomePage.vue @@ -6,8 +6,7 @@ const rooms = ref(); defineEmits(['addSlot']); onBeforeMount(async () => { const res = await fetch("http://localhost:3000/currentRooms", { - method: "GET", - headers: new Headers({'content-type': 'application/json'}) + method: "GET" }); rooms.value = await res.json(); }); @@ -19,6 +18,7 @@ onBeforeMount(async () => {

Free Rooms:

+ {{ rooms.records }}

No free rooms right now

  • {{ slot }}
  • diff --git a/frontend/src/components/Login.vue b/frontend/src/components/Login.vue index 95c5f17..8201b14 100644 --- a/frontend/src/components/Login.vue +++ b/frontend/src/components/Login.vue @@ -17,6 +17,8 @@ async function login(e: SubmitEvent) { }); if (res.ok) { cookieStore.set("loggedIn", "true"); + let uid = await res.json(); + cookieStore.set("userId", uid.uid.Id); emit('nextPage'); } else { text.value = await res.text(); @@ -33,6 +35,8 @@ async function signup(e: Event) { }); if (res.ok) { cookieStore.set("loggedIn", "true"); + let uid = await res.json(); + cookieStore.set("userId", uid.uid.Id); emit('nextPage'); } else { text.value = await res.text(); @@ -42,6 +46,7 @@ async function signup(e: Event) {