This project is part of the Udacity React Nanodegree and utilises a provided backend/API to display Would You Rather style questions and responses. The main page of the project initially displays a login form where a user can be selected. Once authenticated a dashboard page is shown which seperates questions into two categories — unanswered and answered. Unanswered questions can be viewed and answered. All answered questions can also be viewed and statistics relating to the answers are provided.
New questions can be added and answered and these will show up in the relevant category on the dashboard page.
A leaderboard page can also be viewed which displays users in order of who has asked/answered the most questions.
Using Redux, React-Redux and Redux Thunk along with middleware users and questions are fetched, the logged in user is authenticated, new questions can be added and both user id's and question id's are exchanged and applied to question and user data.
React Router is used to create routes to specific URLs such as /leaderboard /add and to individual questions /question/:question_id. If a route does not exist a 404 page is displayed.
The project is styled using tailwindcss and user avatars are sourced from Pixabay.
To start the project use:
npm install
to install project dependencies- Then start the web server with
npm start
This project utilises backend data provided by Udacity. _DATA.js
contains methods which perform necessary operations on the provided data.
There are two types of objects stored in the database:
- Users
- Questions
Users include:
Attribute | Type | Description |
---|---|---|
id | String | The user’s unique identifier |
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.
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.
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" |