GithubHelp home page GithubHelp logo

ecommerce-day-one's Introduction

eCommerce Project - Day 1

Objectives

The start of the eCommerce project for building a fully functional MongoDB, express api for a eCommerce style of application.

Resources

The Domain

Most companies sell some sort of product and service. For this project we will simulate buidling an eCommerce application.

We will start talking about some of the objects that will be needed to be stored into mongo.

Customers

First, most eCommerce applications have a notion of a Customer. Whenever you've purchased something from an online store you usually have to provide some information about yourself as a Customer. Some of the information provided is your name, email address, addresses (billing and shipping), phone numbers (home, work, etc), password, and it's very common to have a mechanism to turn a customer "on" or "off" (soft deleting, think of something like "active" that is a boolean).

Products

There needs to also be the notion of storing Products or Services. For this particular part, keep the Product model simple with a Name, Description, Price, and whether it's active or not (sometimes companies will want to turn things on and off).

Orders

The company will want to store various infomration about an order, for example the customer, the billing address, the shipping address, payment information, subtotal (total of items added to an order), sales tax (for now just use 7%), total (subtotal + total), products added to the order.

Order Details

An order will need to store the product that is applied to the order and the quantity of how many products the customer has added to the order. It might be handy to total up these lines (quantity * product price) to ease the subtotal calculation on the order.

Begin

Step 1: Set up project and create models for the above description

For this project feel free to use additional frameworks to help with development.

  1. NPM install mongoose
  2. Create the models for Moongoose provided the above domain context of the application

Customer

  1. Add the fields as described above.

Product

  1. Add the fields as described above.

Order

  1. Make sure you create a one-to-one relationship between Order and Customer. One of your fields should point to the Customer model, so you know which customer made the order. Each Order should point to one Customer. Since you would always want to keep updated Customer information separate and updated outside of Orders, this would be a reference, not an embedded object (e.g. myRefField: { type: Mongoose.Schema.Types.ObjectId, ref: 'OtherModel' })
  2. You should also have an items or some similar field, whcih represents a one-to-many relationship between products and the Order. However, this is a different relationship than with Customers. For example, if you have a product placed in an order, and then later on the price of that product changes or is modified, you wouldn't want that to change a present or a past order. The order captures the Product at the time it was created and shouldn't be updated whenever the product changes. Therefore, this will be an embedded Model. There will be many products in a single order, so this field should be an array of Product objects. (Hint: myEmbeddedField: [MyOtherModel]).

Step 2: Enhance your models

  1. Add createdAt, updatedAt fields to all your models, making it easy to track the creation and updated timestamps. Use the default of Date.now for both of these fields. (Link).
  2. Add a status to your Order model. This can be an "enum" field, or a field that enumerates certain possible values. Like so:

primaryColor: { type: String, enum: ['blue', 'red', 'green'] }

Make your status field match possible statuses that could be associated with an order.

  1. Have your Order model use its own fields for shipping address and billing address, as customers addresses may change over time and we wouldn't want that to affect the status of a current or past order.
  2. Add some validation to your fields. Think about which fields would be required vs. optional, which fields need to be unique, min or max values or any other validations that would be helpful to make your schemas more robust.

ecommerce-day-one's People

Contributors

cahlan 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.