Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions dev_db.sql
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ CREATE TABLE `Users` (
`sessionID` varchar(32),
`fname` varchar (255),
`lname` varchar (255),
`email` varchar (255),
`email` varchar (255) UNIQUE,
PRIMARY KEY (`userID`)
);

Expand All @@ -23,6 +23,7 @@ CREATE TABLE `Tasks` (
`summary` text,
`description` text,
`dueDate` DATE,
`userId` int(11),
PRIMARY KEY (`taskID`),
CONSTRAINT FK_MT_Parent FOREIGN KEY (`parentID`) REFERENCES `Tasks`(`taskID`) ON DELETE CASCADE
);
Expand Down Expand Up @@ -54,4 +55,28 @@ CREATE TABLE `Commits` (
FOREIGN KEY (`parentTaskID`) REFERENCES `Tasks` (`taskID`) ON DELETE CASCADE
);

INSERT INTO `Commits` VALUES (1, 'Test commit', 1, 'Added subtasks to project 1 so reduced project overhead time', -8, 1, 0, '2021-01-020 2:19:03');
INSERT INTO `Commits` VALUES (1, 'Test commit', 1, 'Added subtasks to project 1 so reduced project overhead time', -8, 1, 0, '2021-01-020 2:19:03');

CREATE TABLE `Teams` (
`teamID` int(11) NOT NULL AUTO_INCREMENT,
`teamName` varchar(255) NOT NULL,
PRIMARY KEY (`teamID`)
)

CREATE TABLE `TeamUsers` (
`teamID` int(11) NOT NULL AUTO_INCREMENT,
`userEmail` varchar (255),
`teamAdmin` boolean,
`acceptedInvite` boolean,
PRIMARY KEY (`teamID`, `userEmail`),
FOREIGN KEY (`teamID`) REFERENCES `Teams` (`teamID`) ON DELETE CASCADE,
FOREIGN KEY (`userEmail`) REFERENCES `Users` (`email`) ON DELETE CASCADE
)

CREATE TABLE `TeamsAccessibleTasks` (
`teamID` int(11) NOT NULL,
`taskID` int(11) NOT NULL,
PRIMARY KEY (`teamID`, `taskID`),
FOREIGN KEY (`teamID`) REFERENCES `Teams` (`teamID`) ON DELETE CASCADE,
FOREIGN KEY (`taskID`) REFERENCES `Tasks` (`taskID`) ON DELETE CASCADE
);
3 changes: 3 additions & 0 deletions express-backend/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ app.use(bodyParser.json());
const usersRouter = require("./routes/users");
app.use("/users", usersRouter);

const teamsRouter = require("./routes/teams");
app.use("/teams/", teamsRouter);

const tasksRouter = require("./routes/tasks");
app.use("/tasks/", tasksRouter);

Expand Down
8 changes: 5 additions & 3 deletions express-backend/routes/commits.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ router.get("/get", async (req, res) => {
try {
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
user = await conn.query("SELECT `userID`, `email` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
console.log(user[0].userID);
// commits = await conn.query("SELECT `commitID`, `commitName`, `parentTaskID`, `commitMessage`, `timeWorked`, `committingUserID`, `commitCompleted`, `commitTime` FROM `Commits` c JOIN `UserAccessibleTasks` uat ON c.parentTaskID=uat.taskID WHERE uat.userID=?", [1]);
commits = await conn.query("SELECT `commitID`, `commitName`, `parentTaskID`, `commitMessage`, `timeWorked`, `committingUserID`, `commitCompleted`, `commitTime` FROM `Commits` c JOIN `UserAccessibleTasks` uat ON c.parentTaskID=uat.taskID WHERE uat.userID=?", [user[0].userID]);
commits = await conn.query("SELECT `commitID`, `commitName`, `parentTaskID`, `commitMessage`, `timeWorked`, `committingUserID`, `commitCompleted`, `commitTime` FROM `Commits` c JOIN `UserAccessibleTasks` uat ON c.parentTaskID=uat.taskID WHERE uat.userID=?", [user[0].userID]);
teamCommits = await conn.query("SELECT `commitID`, `commitName`, `parentTaskID`, `commitMessage`, `timeWorked`, `committingUserID`, `commitCompleted`, `commitTime` FROM `Commits` WHERE `parentTaskID` IN (SELECT `taskID` FROM `TeamsAccessibleTasks` WHERE `teamID` IN (SELECT `teamID` FROM `TeamUsers` WHERE `userEmail` = ?))", [user[0].email]);
delete commits.meta;
delete teamCommits.meta;
console.log("after query");

} catch (err) {
Expand All @@ -32,7 +34,7 @@ router.get("/get", async (req, res) => {
console.log("sessionID: ", req.sessionID)

res.status(201);
res.json(commits);
res.json(commits.concat(teamCommits));

if (conn) return conn.end();
}
Expand Down
6 changes: 4 additions & 2 deletions express-backend/routes/tasks.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ router.get("/get", async (req, res) => {
try {
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
user = await conn.query("SELECT `userID`, `email` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
console.log(user[0].userID);
// tasks = await conn.query("SELECT t.`taskID`, `parentID`, `tname`, `timeEstimate`, `summary`, `description`, `dueDate` FROM `Tasks` t JOIN `UserAccessibleTasks` uat ON t.taskID=uat.taskID WHERE uat.userID=?", [1]);
tasks = await conn.query("SELECT t.`taskID`, `parentID`, `tname`, `timeEstimate`, `summary`, `description`, `dueDate` FROM `Tasks` t JOIN `UserAccessibleTasks` uat ON t.taskID=uat.taskID WHERE uat.userID=?", [user[0].userID]);
teamTasks = await conn.query("SELECT t.`taskID`, `parentID`, `tname`, `timeEstimate`, `summary`, `description`, `dueDate` FROM `Tasks` as t WHERE `taskID` IN (SELECT `taskID` FROM `TeamsAccessibleTasks` WHERE `teamID` IN (SELECT `teamID` FROM `TeamUsers` WHERE `userEmail` = ?))", [user[0].email]);
delete tasks.meta;
delete teamTasks.meta;
console.log("after query");

} catch (err) {
Expand All @@ -32,7 +34,7 @@ router.get("/get", async (req, res) => {
console.log("sessionID: ", req.sessionID)

res.status(201);
res.json(tasks);
res.json(tasks.concat(teamTasks));

if (conn) return conn.end();
}
Expand Down
149 changes: 149 additions & 0 deletions express-backend/routes/teams.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
const mariadb = require('mariadb');
const pool = mariadb.createPool({
host: 'classmysql.engr.oregonstate.edu',
database: 'capstone_2021_group60',
user:'capstone_2021_group60',
password: 'Perro109*',
connectionLimit: 5
});

const express = require("express");
const router = express.Router();

router.get("/get", async (req, res) => {

let conn;
let teamUsers;
let teamInvs;
try {
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID`, `email` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
teams = await conn.query("SELECT * FROM `Teams` WHERE `teamID` IN (SELECT `teamID` FROM `TeamUsers` WHERE `userEmail`=?)", [user[0].email])
teamUsers = await conn.query("SELECT * FROM `TeamUsers` WHERE `teamID` IN (SELECT `teamID` FROM `TeamUsers` WHERE `userEmail`=?)", [user[0].email, user[0].email])
teamInvs = await conn.query("SELECT teamName, t.teamID as teamId FROM `TeamUsers` tu JOIN `Teams` t ON tu.teamID = t.teamID WHERE `userEmail`=? AND `acceptedInvite`=0", [user[0].email, user[0].email])
console.log("after query");

} catch (err) {
console.log(err)
throw err;
} finally {
res.status(201);
res.json({teams: teams, teamUsers: teamUsers, invitations: teamInvs});

if (conn) return conn.end();
}
});

router.post("/create", async (req, res) => {

let conn;
let team;
let teamUser;
try {
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID`, `email` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
team = await conn.query("INSERT INTO `Teams` VALUES (?, ?) ON DUPLICATE KEY UPDATE `teamID`=VALUES(`teamID`), `teamName`=VALUES(`teamName`)", [req.body.teamId, req.body.teamName])
teamUser = await conn.query("INSERT INTO `TeamUsers` VALUES (?, ?, ?, ?)", [team.insertId, user[0].email, true, true])
console.log("after query");

} catch (err) {
console.log(err)
throw err;
} finally {
res.status(201);
res.json(team);

if (conn) return conn.end();
}
});

router.post("/add", async (req, res) => {

let conn;
let teamUser;
try {
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID`, `email` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
teamUser = await conn.query("INSERT INTO `TeamUsers` VALUES (?, ?, ?, ?)", [req.body.teamId, req.body.email, false, false])
console.log("after query");

} catch (err) {
console.log(err)
throw err;
} finally {
res.status(201);
res.json(teamUser);

if (conn) return conn.end();
}
});

router.post("/declineInv", async (req, res) => {

let conn;
let teamUser;
try {
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID`, `email` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
teamUser = await conn.query("DELETE FROM `TeamUsers` WHERE `userEmail`=? AND `teamID`=?", [req.body.email, req.body.teamId])
console.log("after query");

} catch (err) {
console.log(err)
throw err;
} finally {
res.status(201);
res.json(teamUser);

if (conn) return conn.end();
}
});

router.post("/acceptInv", async (req, res) => {

let conn;
let teamUser;
try {
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID`, `email` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
teamUser = await conn.query("UPDATE `TeamUsers` SET `acceptedInvite`=? WHERE `userEmail`=? AND `teamID`=?", [true, req.body.email, req.body.teamId])
console.log("after query");

} catch (err) {
console.log(err)
throw err;
} finally {
res.status(201);
res.json(teamUser);

if (conn) return conn.end();
}
});

router.post("/delete", async (req, res) => {
let conn;
let team;
try {
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
team = await conn.query("DELETE FROM `Teams` WHERE `teamID`=?", [req.body.teamId])
console.log("after query");

} catch (err) {
console.log(err)
throw err;
} finally {
res.status(201);
res.json(team);

if (conn) return conn.end();
}
});

module.exports = router;
39 changes: 29 additions & 10 deletions express-backend/routes/users.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,37 @@
const mariadb = require('mariadb');
const pool = mariadb.createPool({
host: 'classmysql.engr.oregonstate.edu',
database: 'capstone_2021_group60',
user:'capstone_2021_group60',
password: 'Perro109*',
connectionLimit: 5
});

const express = require("express");
const router = express.Router();

let users = require("../dummyDatabase");

router.get("/list", async (req, res) => {
// SELECT * FROM `Users` WHERE `email` IN (SELECT `userEmail` FROM `TeamUsers` WHERE `teamID` IN (SELECT `teamID` FROM `TeamUsers` WHERE `userEmail`="jonetrev@oregonstate.edu" ))
router.get("/accessibleUsers", async (req, res) => {
let conn;
let teamUsers;
let user;
try {
res.status(200).json({
data: users
});
conn = await pool.getConnection();
console.log("after conn")
user = await conn.query("SELECT `userID`, `email` FROM `Users` WHERE `sessionID`=?", [req.sessionID]);
teamUsers = await conn.query("SELECT `userID`, `email`, `fname`, `lname` FROM `Users` WHERE `email` IN (SELECT `userEmail` FROM `TeamUsers` WHERE `teamID` IN (SELECT `teamID` FROM `TeamUsers` WHERE `userEmail`=?))", [user[0].email]);
delete teamUsers.meta;
console.log("after query");

} catch (err) {
res.status(400).json({
message: "Error retrieving list of users",
err
});
console.log(err)
throw err;
} finally {

res.status(201);
res.json(teamUsers);

if (conn) return conn.end();
}
});

Expand Down
Loading