Giter Club home page Giter Club logo

teamstudy's Introduction

SOEN341 / TeamStudy Build Status Coverage Status

E-Learning application repository for SOEN 341 team 5 tutorial A.

Goal

The goal of TeamStudy is to have a platform that will allow for easy formation of study groups for students. They will be able to manually join a study group for a particular class or have the system match them with others. The groups them selves will have unique functionalities that will help students succeed, such as: Setting important date reminders, booking meetings with TAs/Profs and document distribution. There will also be a live chat to ask pertinent questions to the right people.

Authors

  • Jacob Gagné (Technical Lead)
  • Martin Spasov (Team Lead)
  • Simon Bourque
  • Pablo Gonzalez
  • Olivier Nourry
  • Philippe Li
  • Dylan Fernandes
  • Samantha Kerr

Tools

TeamStudy makes use of the MERN stack which inclindes but does not limit to

  • MongoDB
  • Express
  • React
  • Node.js
  • Redux

How to run

  1. clone the repository git clone https://github.com/jacobrs/SOEN341
  2. enter the application directory cd soen341
  3. install the npm dependencies npm install
  4. start the application in dev mode on port 8000 npm start

Coding standards

All coding standards have been taken from the following url: https://github.com/airbnb/javascript
To run the tests, the following command must be executed: npm test

Testing

Acceptance Tests are done using Travis with the AVA test suite.

teamstudy's People

Contributors

dylanfernandes avatar jacobrs avatar onourry avatar pbgnz avatar philippe229 avatar samantha-kerr avatar simon-bourque avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

teamstudy's Issues

Users do not get redirected to the profile page on successful log in

Task Description

When I log in I do not get redirected to the profile page, instead I get this error message printed to the console: UserActions.js?a266:31 SyntaxError: Unexpected token U in JSON at position 0

repo steps:

  1. register a new account
  2. navigate back to the login screen
  3. enter correct email and password
  4. click login button

Task Breakdown

  • fix bug

Agile Information

Priority: urgent
Risk: None
Estimated time: 1hr

USER: Profile Page

Task Description

As an user, I can access by profile when by the /profile route and I can then view the the user info.

Task Breakdown

  • Profile Page Required FrontEnd Information
  • Username
  • Full Name
  • StudentId (Only shown if on your own profile)
  • Email (Links to a mailto action)
  • UI Requirements
  • Logo of the application (graduation cap) should be displayed top left in nav bar
  • The nav bar should be (#446CB3) with white text
  • The background of the content should be white.
  • Bootstrap Components
  • Responsive Design
  • Route/URL

http://localhost:8000/profile
http://localhost:8000/profile/username (links to other users' profiles)

Agile Information

Priority: Medium
Risk: Low
Agile Points: 5

Chat Backend API

Task Description

Create an API to save messages, get messages, etc. Back-end for issue #76.

Task Breakdown

  • Create a new model chat messages and update existing models
  • Create the GET, POST, DELETE endpoints for the chat messages
  • Create the controller and routes for the chat messages
  • Implement basic socket.io functionality
  • Link API with socket.io

Agile Information

Priority: High
Risk: Low
Story Points: 5

Calender & Reminders

Implement a page with a calendar on which students can mark important days such as exams, assigment due dates etc.

  • Ability to mark events on dates
  • Legend for events, example: green -> assignments, red -> exams
  • Synced personal calendar for every student that shows all events from all his study groups
  • A external library can be used if such exists and is free.

USERSTORY: Refresh API Endpoint

The user requires an API endpoint to refresh the user information based off a cookie. This endpoint should be located at /api/users/me. Returns forbidden status code if the session has timed out or is invalid.

Risk: low
Story Points: 1
Priority: High

USERSTORY: New Loading Icon

Task Description

As a user, I would like to have a more appealing loading screen.

Task Breakdown

  • Design a more visually appealing loading screen that fits with the theme
  • Replace current loading screen with the new one

Agile Information

Priority: low
Risk: low
Story points: 1

Document distribution within study groups

Inside the SG we can have a folder system in which students can organize and distribute usefull documents

  • Implement folder system
  • Document upload
  • Adds permissions for files so that admins can remove files
    • Make sure that opening PDFs is done in a new tab!

Course lists

Once the User Profile is complete. We need to implement the ability for students to add which courses they are registered to. We can implement a system that will show classes based on what otehrs have entered previously.

Generate Burndown for sprint 2

Task Description

A burdown chart is required at the end of every sprint so that the developpers can have an idea if the sprint had to much work or not enought. A velocity should be calculated so that an approximate relation between story points and time can be observed.

Task Breakdown

  • Create a burndown chart for sprint two
  • Calculate velocity for sprint 2

Agile Information

Priority: urgent
Risk: none
Estimated time: 30 minutes

Authors Readme

TASK

Description
Everyone on the team needs to clone the repository, branch out with git checkout -b branchname, modify the readme to include themselves in it and then create a pull request with a reviewer to merge the new authors list with master.

  • Jacob
  • Dylan
  • Simon
  • Martin
  • Olivier
  • Philippe
  • Pablo
  • Sam

Points: 0.5

Create Homepage(Landing Page)

Task Description

As a user, when I access the teamstudy webpage, I should be redirected to the home page/landing page of the website. I can also redirect to the login page and to the register page by clicking their according buttons. Finally, I can also read a description of what team study is about.

Task Breakdown

  • Create the home page design
  • Add the login and register buttons
  • Add a description of the website

Agile Information

Risk: Low
Story Points: 3

Booking meetings with TA/Teacher

The TA/And teacher should be able to indicate free time slots for meeting on their calendars.

  • Within a single click, a study group should be able book a meeting in an available time slots; adding the meeting in the calendar of all students in that SG

SG chat/forums

Every study group should have its own forums and/or live chat.

  • Posting on the forum will display your username and picture, clicking on it will redirect to your profile
  • Ability to insert basic emojis
  • Search feature for the forums
  • Attach documents to posts

Live chat is optional, we should discuss with client to see if it has any added value

Create UPDATE API User endpoint

Task Description

The PUT API endpoint for the Users is missing. The endpoint should allow to modify

  • name
  • student id
  • email
  • password

Task Breakdown

  • make the PUT api endpoint

  • make the reducers for the PUT endpoint

Agile Information

Priority: high
Risk: low
Estimated time: 2hrs

Set up Server

Task Description

Set up a server on which we can host the website

Task Breakdown

  • Use Free Amazon server or purchase server

  • Set up a DNS with a nice URL

  • Host website on server

Agile Information

Priority: Urgent
Risk: None
Estimated Time: 1 hour

AT:Registration

Task Description

Validate registration process using the ADA modules. Tests will run every time a new change is committed. First test therefore initial setup will take more time than future tests.

Task Breakdown

  • Validate the registration process using ada modules
  • Tests should run every time a new change is committed

Agile Information

Priority: high
Risk: Low
Estimated Time: 3hrs

USER: Login Page

Task Description

As a user, when I go to main page the login page should appear and it should consist of a form for the user information and a submit button.

Task Breakdown

  • Login Page Required field
  • Email field
  • Password field
  • Sign In button (Empty action until the API for login complete)
  • Sign up button (Links to Registration Page)
  • UI Requirements
  • Logo of the application (graduation cap) should be displayed
  • The blue background (#446CB3) with white text
  • Bootstrap Components
  • Responsive Design
  • the page can be accessed by the Route/URL

http://localhost:8000/ (the login page acts as the home/landing page)

Agile Information

Risk: Low
Story Points: 2

Setup and define roles

Discuss with the team and try and define roles

  • Designer: Sam
  • Front-end: Simon, Sam, Olivier
  • Back-end: Philippe, Pablo, Dylan
  • Team lead: Martin
  • Technical lead: Jacob
  • Testers: everyone

Agile Information

Story Points: 0 (Not a Story)

TA/Teacher profile

Have the ability to create TA/Teacher profile

  • The profile should be able to oversee all study groups to the related class
  • Profile is automatically admin for these study groups

Study group page

A page should be implemented where students can create and search for study groups.

  • There should be an option to create their own SG and one to join existing ones.
  • SG can be private or public and are for a single class only.
  • Implement a side menu were we can add the different options for the SG

USERSTORY: Form Validation for Profile edit

Task Description

As a user , when I edit my account information, I want to know that all the information I entered is valid. If something is not correct during that process I want to receive a notification clearly indicating what is wrong. I also want my password to have a security standard if I decide to edit it.

Task Breakdown

  • Validate the information when editing an account (same as #48)
  • Password fits a certain standard (ex: 1 letter, 1 number, minimum 8 characters)
  • Email is valid ([email protected])
  • Student id contains only numbers
  • If any of above points are not correct, a message should indicate the user what is not correct
  • If edit is successful a message should indicate so
  • The user does not need to fill in all the areas. He might want to only change his password or name. etc.

Agile Information

Priority: low
Risk: low
Story points: 3

Registration Validation

Task Description

As a user , when I create a new account, I want to have a confirmation that the account is successfully created. If something is not correct during that process I want to receive a notification clearly indicating what is wrong. I also want my password to have a security standard.

Task Breakdown

  • Validation of registration for a new account
    • Password fits a certain standard (ex: 1 letter, 1 number, minimum 8 characters)
    • Student id contains only numbers
  • If any of above points are not correct, a message should indicate the user what is missing
  • If creation is successful a message should indicate so

Agile Information

Priority: high
Risk: low
Story points: 3

TESTING: Test API endpoints

Task Description

The User API endpoints have been created and merged in issues #20 and #54. However, there are no unit tests done on the back-end.

Task Breakdown

This issue is divided in two parts:

  • Setup mocha and chai for the back-end testing

  • Test the User API endpoint

  • Test the User authenticate /me endpoint

  • Test the User logout /logout endpoint

  • Test the StudyGroup API endpoint

  • Test the Chat Api and related enpoints

Agile Information

Risk: low
Estimated time: 3hrs

USERSTORY: Login with enter

Task Description

As a user , when I login into my account, I want to be able to do it by pressing enter.

Task Breakdown

  • Enter key should be mapped to the Login Button on the Login page

Agile Information

Priority: low
Risk: low
Story points: 1

USERSTORY: When the user navigates the webpage he must still be logged

Task Description

As a user , when I navigate through the website, I want my account to stay logged in. Currently if I refresh the page or go to a different page, I need to log in again when I come back.

Task Breakdown

  • When on website page, check cookies if user has already been authenticated
  • If user is already authenticated previously, retrieve that data and log in the user directly
  • If the user is authenticated when landing on / he/she should be redirected to /profile

Agile Information

Priority: high
Risk: low
Story points: 3

Component: Profile Page

Task Description

As a user, I want to see my information on the profile component on the dashboard.

Task Breakdown

  • Implement the design in #39 and ensure the information shown is that of the logged in user

Agile Information

Priority: medium
Risk: low
Story points: 3

Scratch Pad

Implement a scratch pad on which students can join and solve problems together real time.

  • Draw on white board using mouse
  • Have multiple color pens
  • Ability to erase what was drawn
  • Possibility to save the scratch pad and reuse it, if to complicated save it as an image and store it within the file system
  • Can use a library for this if any are available for free

USERSTORY: Update information in profile page

Task Description

As a user , I want to have the ability to edit my information under my profile page.

Task Breakdown

  • Have an edit information button on the profile page which will redirect you to an edit page
  • Edit page should allow you to change your information and use the validation on #44

Agile Information

Priority: low
Risk: low
Story points: 3

Implement Backend API for profile page

Task Description

Profile page #41 should grab its information from the backend API

Task Breakdown

  • The API should fetch logged in user information from the server and update the user information in the redux store (which is used in the front end).

Agile Information

Priority: high
Risk: low
Time Estimated: 2hrs

USERSTORY: Chat Frontend

The user wants a page for each study group he is a part of to chat with other members of the study group. An array will be fetched from the backend API and used to populate the chat component.

Task Description

As an user I want to have acces to a chat group for every study group that I am part of.

Task Breakdown

  • Design a chat interface and position it in somewhere easy to acces in the dashboard
  • Populate the chat with an array fetched from the backend API
  • Have a different chat available for every study group

Agile Information

Priority: medium
Risk: medium
Story points: 5

Setup MERN Stack

TASK

Description
There needs to be an initial commit with a functional MERN stack. This means before everyone starts coding pieces of the project we need to commit the foundation. The stack will consist of:

  • Mongodb
  • Express
  • React
  • NodeJS

Agile Information

Story Points: 5

Refactor Redux Store

Task Description

Refactor the redux storage as mentioned in the discussion in #52. The way the json is set up for the store is very messy and all over the place at the moment.

Task Breakdown

  • should be able to check whether user the our store is null or not as opposed to having an extra boolean

  • remove users.data.user and replace it with just users.user

Agile Information

Risk: Medium
Story points: 5

Persistent Cookies

Bug Description

The Redux client server doesn't cache cookies returned by the API server. This means the subsequent API calls will not send the authentication tokens and the initial login call is the only working authenticated page. This means that other API calls will not be authenticated by the passport middleware and hence won't return a user object when calls are complete. The lack of tracking the current user defies the purpose of a login.

Solution

Look into redux-cookies or redux-cookie to merge API cookies into the global client store and then unload them in the browser's cookies. An authentication test will need to be conducted in order to make sure the cookies are persistent.

Login Flow (Yellow Box is Missing)

login_flow

Agile Information

Priority: high
Risk: low
Estimated time: 8 hours

USER: Authentication

User Model

The following properties are necessary for the user model

  • firstName (String)
  • lastName (String)
  • email (String)
  • studentId (Number)
  • dateAdded (Date)
  • lastLogin (Date)
  • password (String)
  • cuid (String)

Session Model

The following properties are necessary to link session cookies to server sessions

  • sessionId (128 character long String)
  • cuid (String relating to user)

Agile Information

Story Points: 5

USERSTORY: Sign Out Button Functionality

Task Description

As a user, I need to be able to sign out of my account securely.

Task Breakdown

  • Sign Out button on dashboard
  • Upon press, account session must be terminated

Agile Information

Priority: high
Risk: low
Story points: 1

Navigation Bar

Task Description

As a user I want to have a navigation bar that always stays on top of the website. It should allow me to access the important pages of the website.

Task Breakdown

  • Create a Navigation bar following the design at #39
  • The Navigation bar should always stay on the top on every webpage at the exception of the register page
  • Every button should redirect the user to the corresponding page.

Agile Information

Priority: medium
Risk: low
Story points: 5

Integrate with facebook

Task Description

As a new user, when I go to the register page there must be an option that allows me to create an account using my facebook account. As an old user, there must be an option to link my teamstudy account to my facebook page and login using my facebook account.

Task Breakdown

  • Add facebook auth
  • There should be an option to have your Facebook public or private
  • If account is not initially created with Facebook, and option to link it should be available

Agile Info

Risk: Low
Story Points: 5

ATs for Login

Task Description

Using the AT system implemented at #33 write ATs for the login procedure to confirm it all works. Tests need to run every time a new change is committed.

Task Breakdown

  • Validate registration process using the ADA modules

  • Make sure that tests run every time a new change is committed.

Agile Information

Priority: high
Risk: low
Estimated time: 3 hours

BUG: Error message displaying on first login attempt.

Currently, if the user enters the right credentials on his first try, he will see an error message for a split second before being redirected to the profile page. If the user fails on his first try or logins, disconnects and then re-logins then this issue does not happen. This is due to the user object being created after the submission of the form to the server.

USER: Registration Page

Registration Required fields

  • Full Name
  • Email field
  • Student ID
  • Password field
  • Sign up button (Empty action until the API for registration is complete)
  • Sign In button (Link to the login page /)

UI Requirements

  • Logo of the application (graduation cap) should be displayed
  • The blue background (#446CB3) with white text
  • Bootstrap Components
  • Responsive Design

Route/URL

http://localhost:8000/register

Agile Information

Story Points: 2

Design: Profile page and Dashboard

Task Description

As a User I want the Dashboard(Profile Page) to look appealing. I want everything to be labeled clearly for easy and intuitive navigation.

Task Breakdown

  • Create a design page for the profile component, dashboard and navigation bar
  • The profile component should have the following items
  • Profile picture
  • Name
  • Email
  • Student ID
  • Currently enrolled classes

Agile Information

Priority: urgent
Risk: low
Story points: 3

USERSTORY: Logout API Endpoint

The user requires an API endpoint to logout the user based off the cookie provided. This endpoint should be located at /api/users/logout. Returns forbidden status code if the session has timed out or is invalid.

Risk: low
Story Points: 1
Priority: low

BACK END: Registration form validation

Task Description

The registration form must be validated in the server side before submission to the database

Task Breakdown

  • add regex to the addUser controller to make sure the data has proper format

Agile Information

Priority: High
Risk: None
Time Estimated: 30 mins

USERSTORY: Study Group Component

Task Description

As a user, I would need to be able to see all the study groups I am currently enrolled into. They need to be visually appealing and simple to understand.

Task Breakdown

  • Design a neat study group component, updating the initial design as needed.
  • Implement the new design into the dashboard
  • Using the backend API update the information in the new component with the study groups the user is enrolled into

Agile Information

Priority: medium
Risk: low
Story points: 5

Login Validation

Task Description

As a user, I want to have a notification that I entered the wrong information if I failed to login.

Task Breakdown

  • Validation of login by fetching list of users and passwords
  • If login is unsuccessful display an error message

Agile Information

Priority: high
Risk: low
Story points: 2

Set up Continuous Deployment

Task Description

Set up Travis for continuous deployment

Task Breakdown

  • Set up Travis for continuous deployment

Agile Information

Priority: high
Risk: low
Estimate Time: 8 hours

Create backlog

Meet with the full team to decide of the direction of the project, create issues in the backlog for future so we have a general idea of where it is heading towards.

USERSTORY: Study Group API

Task Description

As a user , I want to have the ability to create, join and delete study groups.

Task Breakdown

  • Created a new model for study groups
  • Created the GET, POST, DELETE endpoints for the study groups
  • Created the controller and routes for the study groups

Agile Information

Priority: High
Risk: med
Story points: 5

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.