Coder Social home page Coder Social logo

demesibere / -18-nosql-social-network-api Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 28.83 MB

Your Challenge is to build an API for a social network web application where users can share their thoughts, react to friends’ thoughts, and create a friend list. You’ll use Express.js for routing, a MongoDB database, and the Mongoose ODM. In addition to using the Express.js and Mongoose packages, you may also optionally use a JavaScript date library of your choice or the native JavaScript Date object to format timestamps.

JavaScript 100.00%
nosql social-network-api

-18-nosql-social-network-api's Introduction

18 NoSQL: Social Network API

Your Task

MongoDB is a popular choice for many social networks due to its speed with large amounts of data and flexibility with unstructured data. Over the last part of this course, you’ll use several of the technologies that social networking platforms use in their full-stack applications. Because the foundation of these applications is data, it’s important that you understand how to build and structure the API first.

Your Challenge is to build an API for a social network web application where users can share their thoughts, react to friends’ thoughts, and create a friend list. You’ll use Express.js for routing, a MongoDB database, and the Mongoose ODM. In addition to using the Express.js and Mongoose packages, you may also optionally use a JavaScript date library of your choice or the native JavaScript Date object to format timestamps.

No seed data is provided, so you’ll need to create your own data using Insomnia after you’ve created your API.

Because this application won’t be deployed, you’ll also need to create a walkthrough video that demonstrates its functionality and all of the following acceptance criteria being met. You’ll need to submit a link to the video and add it to the README of your project.

User Story

AS A social media startup
I WANT an API for my social network that uses a NoSQL database
SO THAT my website can handle large amounts of unstructured data

Acceptance Criteria

GIVEN a social network API
WHEN I enter the command to invoke the application
THEN my server is started and the Mongoose models are synced to the MongoDB database
WHEN I open API GET routes in Insomnia for users and thoughts
THEN the data for each of these routes is displayed in a formatted JSON
WHEN I test API POST, PUT, and DELETE routes in Insomnia
THEN I am able to successfully create, update, and delete users and thoughts in my database
WHEN I test API POST and DELETE routes in Insomnia
THEN I am able to successfully create and delete reactions to thoughts and add and remove friends to a user’s friend list

Mock Up

The following animations show examples of the application's API routes being tested in Insomnia.

The following animation shows GET routes to return all users and all thoughts being tested in Insomnia:

Demo of GET routes to return all users and all thoughts being tested in Insomnia.

The following animation shows GET routes to return a single user and a single thought being tested in Insomnia:

Demo that shows GET routes to return a single user and a single thought being tested in Insomnia.

The following animation shows the POST, PUT, and DELETE routes for users being tested in Insomnia:

Demo that shows the POST, PUT, and DELETE routes for users being tested in Insomnia.

In addition to this, your walkthrough video should show the POST, PUT, and DELETE routes for thoughts being tested in Insomnia.

The following animation shows the POST and DELETE routes for a user’s friend list being tested in Insomnia:

Demo that shows the POST and DELETE routes for a user’s friend list being tested in Insomnia.

In addition to this, your walkthrough video should show the POST and DELETE routes for reactions to thoughts being tested in Insomnia.

Video

🎥 To find the full movie file showing the functionality of the application, click 👉 here

Getting Started

Be sure to have MongoDB installed on your machine. Follow the MongoDB installation guide on The Full-Stack Blog to install MongoDB locally.

Use the following guidelines to set up your models and API routes:

Models

User:

  • username

    • String
    • Unique
    • Required
    • Trimmed
  • email

    • String
    • Required
    • Unique
    • Must match a valid email address (look into Mongoose's matching validation)
  • thoughts

    • Array of _id values referencing the Thought model
  • friends

    • Array of _id values referencing the User model (self-reference)

Schema Settings:

Create a virtual called friendCount that retrieves the length of the user's friends array field on query.


Thought:

  • thoughtText

    • String
    • Required
    • Must be between 1 and 280 characters
  • createdAt

    • Date
    • Set default value to the current timestamp
    • Use a getter method to format the timestamp on query
  • username (The user that created this thought)

    • String
    • Required
  • reactions (These are like replies)

    • Array of nested documents created with the reactionSchema

Schema Settings:

Create a virtual called reactionCount that retrieves the length of the thought's reactions array field on query.


Reaction (SCHEMA ONLY)

  • reactionId

    • Use Mongoose's ObjectId data type
    • Default value is set to a new ObjectId
  • reactionBody

    • String
    • Required
    • 280 character maximum
  • username

    • String
    • Required
  • createdAt

    • Date
    • Set default value to the current timestamp
    • Use a getter method to format the timestamp on query

Schema Settings:

This will not be a model, but rather will be used as the reaction field's subdocument schema in the Thought model.

API Routes

/api/users

  • GET all users

  • GET a single user by its _id and populated thought and friend data

  • POST a new user:

// example data
{
  "username": "lernantino",
  "email": "[email protected]"
}
  • PUT to update a user by its _id

  • DELETE to remove user by its _id

BONUS: Remove a user's associated thoughts when deleted.


/api/users/:userId/friends/:friendId

  • POST to add a new friend to a user's friend list

  • DELETE to remove a friend from a user's friend list


/api/thoughts

  • GET to get all thoughts

  • GET to get a single thought by its _id

  • POST to create a new thought (don't forget to push the created thought's _id to the associated user's thoughts array field)

// example data
{
  "thoughtText": "Here's a cool thought...",
  "username": "lernantino",
  "userId": "5edff358a0fcb779aa7b118b"
}
  • PUT to update a thought by its _id

  • DELETE to remove a thought by its _id


/api/thoughts/:thoughtId/reactions

  • POST to create a reaction stored in a single thought's reactions array field

  • DELETE to pull and remove a reaction by the reaction's reactionId value

Grading Requirements

Note: If a Challenge assignment submission is marked as “0”, it is considered incomplete and will not count towards your graduation requirements. Examples of incomplete submissions include the following:

  • A repository that has no code

  • A repository that includes a unique name but nothing else

  • A repository that includes only a README file but nothing else

  • A repository that only includes starter code

This Challenge is graded based on the following criteria:

Deliverables: 10%

  • Your GitHub repository containing your application code.

Walkthrough Video: 37%

  • A walkthrough video that demonstrates the functionality of the social media API must be submitted, and a link to the video should be included in your README file.

    • The walkthrough video must show all of the technical acceptance criteria being met.

    • The walkthrough video must demonstrate how to start the application’s server.

    • The walkthrough video must demonstrate GET routes for all users and all thoughts being tested in Insomnia.

    • The walkthrough video must demonstrate GET routes for a single user and a single thought being tested in Insomnia.

    • The walkthrough video must demonstrate POST, PUT, and DELETE routes for users and thoughts being tested in Insomnia.

    • Walkthrough video must demonstrate POST and DELETE routes for a user’s friend list being tested in Insomnia.

    • Walkthrough video must demonstrate POST and DELETE routes for reactions to thoughts being tested in Insomnia.

Technical Acceptance Criteria: 40%

  • Satisfies all of the preceding acceptance criteria plus the following:

    • Uses the Mongoose package to connect to a MongoDB database.

    • Includes User and Thought models outlined in the Challenge instructions.

    • Includes schema settings for User and Thought models as outlined in the Challenge instructions.

    • Includes Reactions as the reaction field's subdocument schema in the Thought model.

    • Uses functionality to format queried timestamps properly.

Repository Quality: 13%

  • Repository has a unique name.

  • Repository follows best practices for file structure and naming conventions.

  • Repository follows best practices for class/id naming conventions, indentation, quality comments, etc.

  • Repository contains multiple descriptive commit messages.

  • Repository contains a high-quality README with description and a link to a walkthrough video.

Bonus: +10 Points

  • Application deletes a user's associated thoughts when the user is deleted.

Review

You are required to submit BOTH of the following for review:

  • A walkthrough video demonstrating the functionality of the application and all of the acceptance criteria being met.

  • The URL of the GitHub repository. Give the repository a unique name and include a README describing the project.


© 2022 Trilogy Education Services, LLC, a 2U, Inc. brand. Confidential and Proprietary. All Rights Reserved.

-18-nosql-social-network-api's People

Contributors

demesibere avatar

Watchers

 avatar

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.