diff --git a/controllers/tasks.js b/controllers/tasks.js new file mode 100644 index 0000000..1af1608 --- /dev/null +++ b/controllers/tasks.js @@ -0,0 +1,19 @@ +const Team = require("../models/Team"); +const User = require("../models/User"); +const Task = require("../models/Task"); + +exports.deleteTask = (req, res) => { + const taskId = req.body.teamId; + + Task.findOneAndDelete({ _id: taskId }, (err, task) => { + if (err) { + return res.status(400).json({ + error: "Unexpected error", + }); + } else { + return res.status(200).json({ + message: "Task deleted successfully", + }); + } + }); +}; diff --git a/controllers/team.js b/controllers/team.js new file mode 100644 index 0000000..cdf2f28 --- /dev/null +++ b/controllers/team.js @@ -0,0 +1,42 @@ +const Team = require("../models/Team"); +const User = require("../models/User"); +const Task = require("../models/Task"); + +exports.deleteTeam = (req, res) => { + const teamId = req.body.teamId; + + Team.findOne({ _id: teamId }, (err, team) => { + if (err) { + return res.status(400).json({ + error: "Unexpected error", + }); + } + if (!team) { + return res.status(404).json({ + error: "Team not found", + }); + } + + const members = team.members; + members.forEach((user, index) => { + //TODO: Delete workspace id from user's teams array + }); + + const tasks = workspace.tasks; + tasks.forEach((task, index) => { + //TODO: remove tasks functionality + }); + + Team.findOneAndDelete({ _id: teamId }, (err) => { + if (err) { + return res.status(400).json({ + error: "Unexpected error while deleting Team", + }); + } else { + return res.status(200).json({ + message: "Team deleted successfully", + }); + } + }); + }); +}; diff --git a/controllers/workspace.js b/controllers/workspace.js new file mode 100644 index 0000000..8cc97a0 --- /dev/null +++ b/controllers/workspace.js @@ -0,0 +1,98 @@ +const Workspace = require("../models/Workspace"); +const User = require("../models/User"); + +exports.createWorkspace = (req, res) => { + const { name, owner, description } = req.body; + + const newWorkspace = new Workspace({ name, owner, description }); + let members = []; + members.push(owner); + newWorkspace.members = members; + + /** + * 1. Checks if owner owns a workspace with same name [ YES: return status 405] + * 2. create a new workspace + * 3. find user and insert workspace inside user's workspace field + * 4. return status 200 + */ + + Workspace.findOne({ $and: [ {name: name}, {owner: owner} ]}, (err, workspace) => { + if (workspace) { + return res.status(405).json({ + error: "Workspace with same name already exists", + }); + } else { + newWorkspace.save((err, workspace) => { + if (err) { + return res.status(400).json({ + error: "Unexpected error", + }); + } else { + User.findOne({ _id: owner }, (err, user) => { + if (err) { + return res.status(400).json({ + error: "Unexpected error", + }); + } else { + if (user.workspaces) user.workspaces.push(workspace._id); + else { + let workspaces = []; + workspaces.push(workspace._id); + user.workspaces = workspaces; + } + user.save((err, user) => { + if (err) { + return res.status(400).json({ + error: "Unexpected error", + }); + } else { + return res.status(200).json({ + message: "Workspace created successfully", + }); + } + }); + } + }); + } + }); + } + }); +}; + +exports.deleteWorkspace = (req, res) => { + const workspaceId = req.body.workspaceId; + + Workspace.findOne({ _id: workspaceId }, (err, workspace) => { + if (err) { + return res.status(400).json({ + error: "Unexpected error", + }); + } else if (!workspace) { + return res.status(404).json({ + error: "Workspace not found", + }); + } else { + const teams = workspace.teams; + teams.forEach((team, index) => { + //TODO: add deleteTeam functionality + }); + + const members = workspace.members; + members.forEach((user, index) => { + //TODO: Delete workspace id from user's workspaces array + }); + + Workspace.findOneAndDelete({ _id: workspaceId }, (err) => { + if (err) { + return res.status(400).json({ + error: "Unexpected error while deleting workspace", + }); + } else { + return res.status(200).json({ + message: "Workspace deleted successfully", + }); + } + }); + } + }); +}; diff --git a/models/User.js b/models/User.js index 67df691..f694fcb 100644 --- a/models/User.js +++ b/models/User.js @@ -49,7 +49,8 @@ const User = new Schema( }, contribution: [{ type: ObjectId }], socialMediaHandles: [{ type: ObjectId }], - teams: [{ type: ObjectId }], + workspaces:[{type:ObjectId, ref:"Workspace"}], + teams: [{ type: ObjectId, red:"Team" }], skypeId: { type: String, default: "", diff --git a/models/Workspace.js b/models/Workspace.js index 44869d7..1e889c9 100644 --- a/models/Workspace.js +++ b/models/Workspace.js @@ -13,8 +13,12 @@ const Workspace = new Schema({ ref: "User", required: true, }, + description:{ + type:String, + default:"" + }, teams: [{ type: ObjectId, ref: "Team" }], members: [{ type: ObjectId, ref: "User" }], }); -module.exports = mongoose.models.User || mongoose.model("Workspace", Workspace); +module.exports = mongoose.models.Workspace || mongoose.model("Workspace", Workspace); diff --git a/routes/dbRoutes.js b/routes/dbRoutes.js index 7f8354f..5b1a6f5 100644 --- a/routes/dbRoutes.js +++ b/routes/dbRoutes.js @@ -1,8 +1,14 @@ const express = require("express"); const { getUserById, updateUserProfile } = require("../controllers/user"); - +const {createWorkspace} = require("../controllers/workspace"); const router = express.Router(); router.get("/getUserById", getUserById); router.put("/updateUserProfile", updateUserProfile); + + +router.post("/createWorkspace",createWorkspace); + + +module.exports = router; \ No newline at end of file