adding rooms
This commit is contained in:
Binary file not shown.
@@ -19,30 +19,58 @@ app.get('/', (req, res) => {
|
|||||||
app.get('/currentRooms', (req, res) => {
|
app.get('/currentRooms', (req, res) => {
|
||||||
// req has no data
|
// req has no data
|
||||||
// res has all room at current time
|
// res has all room at current time
|
||||||
|
console.log("currentRooms");
|
||||||
let stmt = db.prepare(`SELECT * FROM TimeSlots`);
|
let stmt = db.prepare(`SELECT * FROM TimeSlots`);
|
||||||
let records = stmt.all();
|
let records = stmt.all();
|
||||||
res.status(200).json({records: records});
|
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
|
// req has roomid userid starttime and end time
|
||||||
// res has success or faliure
|
// 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
|
// req has userid and roomname
|
||||||
// res has success or faliure
|
// 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) => {
|
app.get('/getRooms', (req, res) => {
|
||||||
// req has no data
|
// req has no data
|
||||||
// res has success or faliure
|
// 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) => {
|
app.post('/createUser', async (req, res) => {
|
||||||
// req has email pass(hashed) and name
|
// req has email pass(hashed) and name
|
||||||
// res has success or fail
|
// res has success or fail
|
||||||
|
console.log("sign up");
|
||||||
const body = req.body;
|
const body = req.body;
|
||||||
let stmt = db.prepare(`SELECT * FROM Users WHERE Email='${body.email}';`);
|
let stmt = db.prepare(`SELECT * FROM Users WHERE Email='${body.email}';`);
|
||||||
let storedRecord = stmt.get();
|
let storedRecord = stmt.get();
|
||||||
@@ -53,23 +81,26 @@ app.post('/createUser', async (req, res) => {
|
|||||||
const generatedHash = await bcrypt.hash(body.pass, 10);
|
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 = db.prepare(`INSERT INTO Users (Email, Pass, Username, Submissions) VALUES ('${body.email}', '${generatedHash}', '${body.name}', 0)`);
|
||||||
stmt.run();
|
stmt.run();
|
||||||
res.status(200).send("account created");
|
stmt = db.prepare(`SELECT Id FROM Users WHERE Email='${body.email}';`);
|
||||||
console.log("sign up");
|
const uid = stmt.get();
|
||||||
|
res.status(200).send({uid: uid});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post('/login', async (req, res) => {
|
app.post('/login', async (req, res) => {
|
||||||
// req has email and pass(hashed)
|
// req has email and pass(hashed)
|
||||||
// res has success or fail
|
// res has success or fail
|
||||||
|
console.log("login");
|
||||||
const body = req.body;
|
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();
|
let storedHash = stmt.get();
|
||||||
if (!storedHash) {
|
if (!storedHash) {
|
||||||
res.status(400).send("problem with email");
|
res.status(400).send("problem with email");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (await bcrypt.compare(body.pass, storedHash.Pass)){
|
if (await bcrypt.compare(body.pass, storedHash.Pass)){
|
||||||
res.send(200);
|
stmt = db.prepare(`SELECT Id FROM Users WHERE Email='${body.email}';`);
|
||||||
console.log("login");
|
const uid = stmt.get();
|
||||||
|
res.status(200).send({uid: uid});
|
||||||
} else {
|
} else {
|
||||||
res.status(400).send("incorrect password");
|
res.status(400).send("incorrect password");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ CREATE TABLE Users (
|
|||||||
|
|
||||||
CREATE TABLE Rooms (
|
CREATE TABLE Rooms (
|
||||||
Id INTEGER PRIMARY KEY ASC AUTOINCREMENT,
|
Id INTEGER PRIMARY KEY ASC AUTOINCREMENT,
|
||||||
RoomName TEXT
|
RoomName TEXT UNIQUE
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE TimeSlots (
|
CREATE TABLE TimeSlots (
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { onBeforeMount, ref } from 'vue';
|
|||||||
import Login from './components/Login.vue';
|
import Login from './components/Login.vue';
|
||||||
import HomePage from './components/HomePage.vue';
|
import HomePage from './components/HomePage.vue';
|
||||||
import AddTimeSlot from './components/AddTimeSlot.vue';
|
import AddTimeSlot from './components/AddTimeSlot.vue';
|
||||||
|
import AddRoom from './components/AddRoom.vue';
|
||||||
|
|
||||||
const page = ref<number>(0);
|
const page = ref<number>(0);
|
||||||
|
|
||||||
@@ -17,5 +18,6 @@ onBeforeMount(async () => {
|
|||||||
<template>
|
<template>
|
||||||
<Login v-if="page == 0" @next-page="page++"/>
|
<Login v-if="page == 0" @next-page="page++"/>
|
||||||
<HomePage v-if="page == 1" @add-slot="page++"/>
|
<HomePage v-if="page == 1" @add-slot="page++"/>
|
||||||
<AddTimeSlot v-if="page == 2" @go-home="page--"/>
|
<AddTimeSlot v-if="page == 2" @go-home="page--" @add-room="page++"/>
|
||||||
|
<AddRoom v-if="page == 3" @go-back="page--"/>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
30
frontend/src/components/AddRoom.vue
Normal file
30
frontend/src/components/AddRoom.vue
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
|
||||||
|
|
||||||
|
const emit = defineEmits(['goBack']);
|
||||||
|
|
||||||
|
const roomName = ref<string>();
|
||||||
|
|
||||||
|
async function addRoom(e: SubmitEvent) {
|
||||||
|
e.preventDefault();
|
||||||
|
let uid = await cookieStore.get("userId");
|
||||||
|
const res = await fetch("http://localhost:3000/addRoom", {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({ roomName: roomName.value, userid: uid?.value }),
|
||||||
|
headers: new Headers({'content-type': 'application/json'})
|
||||||
|
});
|
||||||
|
if (res.ok) {
|
||||||
|
emit('goBack');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<h1>Add Room</h1>
|
||||||
|
<button @click="$emit('goBack')">Go Back</button>
|
||||||
|
<form @submit="addRoom">
|
||||||
|
<label for="name">Room Name</label><br>
|
||||||
|
<input type="text" v-model="roomName"/><br>
|
||||||
|
<button type="submit">Add</button><br>
|
||||||
|
</form>
|
||||||
|
</template>
|
||||||
@@ -1,7 +1,45 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
defineEmits(['goHome']);
|
import { onBeforeMount, ref } from 'vue';
|
||||||
|
|
||||||
|
const emit = defineEmits(['goHome', 'addRoom']);
|
||||||
|
const rooms = ref();
|
||||||
|
|
||||||
|
const room = ref();
|
||||||
|
const startTime = ref();
|
||||||
|
const endTime = ref();
|
||||||
|
|
||||||
|
onBeforeMount(async () => {
|
||||||
|
let res = await fetch("http://localhost:3000/getRooms", {
|
||||||
|
method: "GET"
|
||||||
|
});
|
||||||
|
rooms.value = await res.json();
|
||||||
|
});
|
||||||
|
|
||||||
|
async function addTimeSlot(e: SubmitEvent) {
|
||||||
|
e.preventDefault();
|
||||||
|
let uid = await cookieStore.get("userId");
|
||||||
|
await fetch("http://localhost:3000/addTimeSlot", {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({ roomid: room.value.Id, userid: uid?.value, startTime: startTime.value, endTime: endTime.value }),
|
||||||
|
headers: new Headers({'content-type': 'application/json'})
|
||||||
|
});
|
||||||
|
emit('goHome');
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<p>AddTimeSlot</p>
|
<h1>AddTimeSlot</h1>
|
||||||
<button @click="$emit('goHome')">Done</button>
|
<button @click="$emit('goHome')">go Back</button>
|
||||||
|
<form @submit="addTimeSlot">
|
||||||
|
<label for="room">Room</label> <br>
|
||||||
|
<select id="room" v-model="room">
|
||||||
|
<option v-for="item in rooms.records" :value="item">{{ item.RoomName }}</option>
|
||||||
|
</select><br>
|
||||||
|
<button @click="$emit('addRoom')">Add room?</button><br>
|
||||||
|
<label for="start" >Start Time</label><br>
|
||||||
|
<input type="datetime-local" id="start" v-model="startTime" /><br>
|
||||||
|
<label for="end">End Time</label><br>
|
||||||
|
<input type="datetime-local" id="end" v-model="endTime" /><br>
|
||||||
|
<button type="submit">Add</button>
|
||||||
|
</form>
|
||||||
</template>
|
</template>
|
||||||
@@ -6,8 +6,7 @@ const rooms = ref();
|
|||||||
defineEmits(['addSlot']);
|
defineEmits(['addSlot']);
|
||||||
onBeforeMount(async () => {
|
onBeforeMount(async () => {
|
||||||
const res = await fetch("http://localhost:3000/currentRooms", {
|
const res = await fetch("http://localhost:3000/currentRooms", {
|
||||||
method: "GET",
|
method: "GET"
|
||||||
headers: new Headers({'content-type': 'application/json'})
|
|
||||||
});
|
});
|
||||||
rooms.value = await res.json();
|
rooms.value = await res.json();
|
||||||
});
|
});
|
||||||
@@ -19,6 +18,7 @@ onBeforeMount(async () => {
|
|||||||
</header>
|
</header>
|
||||||
<article v-if="rooms">
|
<article v-if="rooms">
|
||||||
<h2>Free Rooms:</h2>
|
<h2>Free Rooms:</h2>
|
||||||
|
{{ rooms.records }}
|
||||||
<p v-if="rooms.records.length == 0">No free rooms right now</p>
|
<p v-if="rooms.records.length == 0">No free rooms right now</p>
|
||||||
<ul v-for="(slot, index) in rooms.records">
|
<ul v-for="(slot, index) in rooms.records">
|
||||||
<li :id="index">{{ slot }}</li>
|
<li :id="index">{{ slot }}</li>
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ async function login(e: SubmitEvent) {
|
|||||||
});
|
});
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
cookieStore.set("loggedIn", "true");
|
cookieStore.set("loggedIn", "true");
|
||||||
|
let uid = await res.json();
|
||||||
|
cookieStore.set("userId", uid.uid.Id);
|
||||||
emit('nextPage');
|
emit('nextPage');
|
||||||
} else {
|
} else {
|
||||||
text.value = await res.text();
|
text.value = await res.text();
|
||||||
@@ -33,6 +35,8 @@ async function signup(e: Event) {
|
|||||||
});
|
});
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
cookieStore.set("loggedIn", "true");
|
cookieStore.set("loggedIn", "true");
|
||||||
|
let uid = await res.json();
|
||||||
|
cookieStore.set("userId", uid.uid.Id);
|
||||||
emit('nextPage');
|
emit('nextPage');
|
||||||
} else {
|
} else {
|
||||||
text.value = await res.text();
|
text.value = await res.text();
|
||||||
@@ -42,6 +46,7 @@ async function signup(e: Event) {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<h1>Login</h1>
|
||||||
<form @submit="login">
|
<form @submit="login">
|
||||||
<label for="email">Email</label> <br>
|
<label for="email">Email</label> <br>
|
||||||
<input type="email" id="email" v-model="email"/> <br>
|
<input type="email" id="email" v-model="email"/> <br>
|
||||||
|
|||||||
Reference in New Issue
Block a user