Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CA-ecommerce-node-API/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/node_modules/
.env
13 changes: 13 additions & 0 deletions CA-ecommerce-node-API/Db/db.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const mongoose = require("mongoose");
require("dotenv/config");

const connectDb = async (cb) => {
try {
const connection = await mongoose.connect(process.env.MONGO_URI);
connection && cb();
} catch (err) {
console.log(err.message);
}
};

module.exports = connectDb;
2 changes: 2 additions & 0 deletions CA-ecommerce-node-API/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# E-commerce
E-commerce Platform as a Service.
57 changes: 57 additions & 0 deletions CA-ecommerce-node-API/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
const express = require("express");
const helmet = require("helmet");
const morgan = require("morgan");
const cors = require("cors");
const ngrok = require('ngrok')
// const passport = require("passport");
require("dotenv/config");

// Custom imports
const connectDb = require("./Db/db");
const authRoutes = require("./routes/authRoutes/auth");
// const passportSetup = require("./middleware/passport")

const app = express();

app.use(express.json()) // For handling json payloads... i.e request bodies in json format
app.use(express.urlencoded({ extended: false })) // For handling requests in x-www-urlencoded-form
app.use(helmet());
// app.use(morgan());
// app.use(passport.initialize());
// app.use(passport.session());

// Configuring the server permissions for CORS protocols...
app.use(
cors({
origin: "*",
methods: "POST, GET, PUT, PATCH, DELETE",
allowedHeaders: "Content-Type, Authorization",
})
);

app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Methods",
"POST, GET, PUT, PATCH, DELETE"
);
next()
});

// Regular API's
app.use("/auth", authRoutes)


// Dedicated middleware for handling errors/exceptions
app.use((error, req, res, next) => {
res.status(error.statusCode || 500).json(error.message);
});

const port = process.env.PORT || 5050;

connectDb(() => {
app.listen(port, () => {
console.log(`Connected to port ${port}`)
});
});
36 changes: 36 additions & 0 deletions CA-ecommerce-node-API/controllers/authControllers/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const User = require("../../model/User");

const bcrypt = require("bcrypt");
const { validationResult } = require("express-validator");
require("dotenv/config");
const saltRounds = +process.env.SALT_ROUND;

exports.postSignup = async (req, res, next) => {
const { username, email, password, phoneNumber } = req.body;
try {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const error = new Error(errors.array()[0].msg);
error.statusCode = 401;
throw error;
}
const salt = await bcrypt.genSalt(saltRounds);
const hashedPassword = await bcrypt.hash(password, salt);
const newUser = new User({
username,
email,
password: hashedPassword,
phoneNumber,
role: ["user"],
cart: { items: [] },
});
await newUser.save();
res.status(200).json(newUser);
} catch (err) {
next(err);
}
};

exports.postLogin = (req, res, next) => {
res.send("Login");
};
Empty file.
12 changes: 12 additions & 0 deletions CA-ecommerce-node-API/middleware/passport.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const GoogleStrategy = require("passport-google-oauth20").Strategy;
const passport = require("passport");
require('dotenv/config');

passport.use(
new GoogleStrategy({
clientID: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
callbackURL: process.env.CLIENT_URL,
scope: ["profile", "email"]
})
)
Empty file.
Empty file.
39 changes: 39 additions & 0 deletions CA-ecommerce-node-API/model/User.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const userSchema = new Schema({
username: {
type: String,
required: true,
},
phoneNumber: {
type: String,
required: true,
},
email: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
role: {
type: Array,
},
cart: {
items: [
{
productId: {
type: Schema.Types.ObjectId,
ref: "Product",
required: true,
},
quantity: { type: Number, required: true },
},
],
},
});

module.exports = mongoose.model("User", userSchema);
Loading