CSC309 Express Routes
===
###### tags: `CSC309`
## Schema
### User
```json=
{
_id: "default User Id",
icon_img: "url",
name: "UserName",
email: "xxxx@gmail.com",
password:"encodedpassword_0asdfadfawer",
description: "I am an Academic waste",
manageProjectList: ["pid1", "pid2"],
contributeProjectList: ["pid3", "pid4", "pid5"]
}
```
### Project
```json=
{
_id: "default project Id",
name: "projectName",
teamList: ["teamID1", "teamID2", "teamID3"],
description: "description about this project"
}
```
### team
```json=
{
_id: "team id",
name: "teamName",
managers: "user_id",
contributors: [
{userId: "uid_3", userName: "userName3",
taskList: ["tid1", "tid2"]},
{userId: "uid_4", userName: "userName4",
taskList: ["tid3", "tid4"]},
{userId: "uid_4", userName: "userName4",
taskList: ["tid5"]}
],
projects: "pid"
}
```
### task
note that progress is 0-6, where 0 is the initial state and 6 means 100% complete.
```json=
_id:"task Id",
name: "taskName",
description: "What is this task",
progess: 1
```
## Routes
### admin.js
HTTP Request Methods: get
Route: "admin/users"
Purpose: Allows admin users to get every users in the system
Usage: **actions** -> **admin.js** -> **adminGetUsers**
HTTP Request Methods: delete
Route: "admin/:user_id"
Purpose: Allows admin users to delete a specific user given a user_id in the route
Usage: **actions** -> **admin.js** -> **deleteUsers**
---
### auth.js
HTTP Request Methods: get
Route: "auth/currentUser"
Purpose: Get the current session user, use to see if the current user is still valid to perform any other requests
Usage: **actions** -> **user.js** -> **getCurrentUser**
HTTP Request Methods: post
Route: "auth/signup"
Purpose: Sign up for the new user. Expect req.body to contain name, email and password of the new users.
Usage: **actions** -> **user.js** -> **signUp**
HTTP Request Methods: post
Route: "auth/login"
Purpose: Allows the user to login. Expect the user to have either email or username and the correct password for login.
Usage: **actions** -> **user.js** -> **login**
HTTP Request Methods: get
Route: "auth/logout"
Purpose: Logout the current user, destroy the session cookies and clear any local storage.
Usage: **actions** -> **user.js** -> **logout**
---
### project.js
HTTP Request Methods: get
Route: "api/project/details/:id"
Purpose: return a JSON to populate ProjectPage. Will get team of this project, not just the team_ids.
Usage: used in **actions** -> **project.js** -> **getProjectInfo**
Called: **ProjectPage** in `componentWillMount()`
sample JSON Format:
```json=
{
name: "projectName",
description: "project.description",
teamList: [team1, team2, team3],
}
}
```
note: team1, team2, and team3 are JSON object, it's format is pretty much the same as getTeam object
HTTP Request Methods: put
Route: "api/project/"
Purpose: Create a project, Expect a teamList, name of the project, and a description in the req.body
Usage: used in **actions** -> **project.js** -> **createProject**
Called: **UserPage** in Create New Project button
---
### task.js
HTTP Request Methods: get
Route: "api/task/:id"
Purpose: get the task information based on task id.
Usage: used in **actions** -> **project.js** -> **getTaskInfo**
HTTP Request Methods: put
Route: "api/task/"
Purpose: create a task that doesn't have to belong to any team or project. Expect name and description of this task. It's progress is default 0 when created.
Usage: used in **actions** -> **project.js** -> **createTask**
---
### team.js
HTTP Request Methods: get
Route: "api/team/:id"
Purpose: get the entire team information, including all the members and their specific tasks.
Usage: used in **actions** -> **project.js** -> **getTeam**
sample JSON Format:
```json=
{
_id: "team id",
name: "teamName",
contributors: [
{userId: "uid_3", userName: "userName3",
taskList: [task1, task2]},
{userId: "uid_4", userName: "userName4",
taskList: [task3]}
],
projects: "pid"
}
```
note: task1, task2, and task3 are JSON object that maps to a specific task, they are not just task_ids
HTTP Request Methods: put
Route: "api/team/"
Purpose: Add a new team into the database. Expect given a project_id, contributors, and the name of this team in the req.body. The contributors are default an empty list.
Usage: used in **actions** -> **project.js** -> **createTeam**
HTTP Request Methods: post
Route: "api/team/:team_id/:member_id"
Purpose: Add a member to the team corresponding to team_id
Usage: **actions** -> **project.js** -> **addMember**
HTTP Request Methods: patch
Route: "api/team/:team_id/:user_id"
Purpose: Update task list of a member in a team. This is used to assign task to members of the team.
Usage: used in **actions** -> **project.js** -> **assignTaskToContributor**
---
### user.js
HTTP Request Methods: get
Route: "/api/user/:id"
Purpose: Retrieve a user with corresponding id from database
Usage: used in **actions** -> **user.js** -> **getUserInfo**