You have been asked by the HR department of your company to build an application that employees can use internally. In order to improve collaboration and transparency within the company, every employee can access the application and create a poll with two proposed solutions. Employees can then vote on these solutions and see which solutions have the most votes. In addition, HR has requested you have a dashboard that lists every employee ordered by the number of polls they've created and answered. To give employees incentive to use your application, HR will give a prize each quarter for the top employees who have created and answered the most polls.
In the "Employee Polls" Project, you'll build a web app that lets an employee create polls for coworkers. The process goes like this: An employee is asked a question in the form: “Would you rather [option A] or [option B] ?”. Answering "neither" or "both" is not possible.
In your app, users will be able to answer polls, see which polls they haven’t answered, see how other people have voted, post polls, and see the ranking of users on the leaderboard.
Available Scripts In the project directory, you can run:
npm install To install all dependencies
npm start Runs the app in the development mode. Open http://localhost:3000 to view it in your browser.
The page will reload when you make changes. You may also see any lint errors in the console.
npm test Launches the test runner in the interactive watch mode This is the starter code for the final assessment project for Udacity's React & Redux course.
The _DATA.js file represents a fake database and methods that let you access the data. The only thing you need to edit in the _DATA.js file is the value of avatarURL. Each user should have an avatar, so you’ll need to add the path to each user’s avatar.
Using the provided starter code, you'll build a React/Redux front end for the application. We recommend using the Create React App to bootstrap the project.
There are two types of objects stored in our database:
- Users
- Questions
Users include:
| Attribute | Type | Description |
|---|---|---|
| id | String | The user’s unique identifier |
| password | String | The user’s password in order to log in the application |
| name | String | The user’s first name and last name |
| avatarURL | String | The path to the image file |
| questions | Array | A list of ids of the polling questions this user created |
| answers | Object | The object's keys are the ids of each question this user answered. The value of each key is the answer the user selected. It can be either 'optionOne' or 'optionTwo' since each question has two options. |
Questions include:
| Attribute | Type | Description |
|---|---|---|
| id | String | The question’s unique identifier |
| author | String | The author’s unique identifier |
| timestamp | String | The time when the question was created |
| optionOne | Object | The first voting option |
| optionTwo | Object | The second voting option |
Voting options are attached to questions. They include:
| Attribute | Type | Description |
|---|---|---|
| votes | Array | A list that contains the id of each user who voted for that option |
| text | String | The text of the option |
Your code will talk to the database via 4 methods:
_getUsers()_getQuestions()_saveQuestion(question)_saveQuestionAnswer(object)
_getUsers()Method
Description: Get all of the existing users from the database.
Return Value: Object where the key is the user’s id and the value is the user object.
_getQuestions()Method
Description: Get all of the existing questions from the database.
Return Value: Object where the key is the question’s id and the value is the question object.
_saveQuestion(question)Method
Description: Save the polling question in the database. If one of the parameters are missing, an error is thrown.
Parameters: Object that includes the following properties: author, optionOneText, and optionTwoText. More details about these properties:
| Attribute | Type | Description |
|---|---|---|
| author | String | The id of the user who posted the question |
| optionOneText | String | The text of the first option |
| optionTwoText | String | The text of the second option |
Return Value: An object that has the following properties: id, author, optionOne, optionTwo, timestamp. More details about these properties:
| Attribute | Type | Description |
|---|---|---|
| id | String | The id of the question that was posted |
| author | String | The id of the user who posted the question |
| optionOne | Object | The object has a text property and a votes property, which stores an array of the ids of the users who voted for that option |
| optionTwo | Object | The object has a text property and a votes property, which stores an array of the ids of the users who voted for that option |
| timestamp | String | The time when the question was created |
_saveQuestionAnswer(object)Method
Description: Save the answer to a particular polling question in the database. If one of the parameters are missing, an error is thrown.
Parameters: Object that contains the following properties: authedUser, qid, and answer. More details about these properties:
| Attribute | Type | Description |
|---|---|---|
| authedUser | String | The id of the user who answered the question |
| qid | String | The id of the question that was answered |
| answer | String | The option the user selected. The value should be either "optionOne" or "optionTwo" |