KEMBAR78
CRM Backend Setup | PDF | Software | Computing
0% found this document useful (0 votes)
28 views3 pages

CRM Backend Setup

This document outlines a CRM backend starter template for clothing and electronics shops using Node.js, Express, MongoDB, and JWT. It includes a structured project layout, essential dependencies, and example implementations for models, controllers, and routes. The backend is designed to support various functionalities such as customer management, authentication, and sales tracking, ensuring scalability and clear API separation for integration with a frontend application.

Uploaded by

AYUSH NALAWADE
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views3 pages

CRM Backend Setup

This document outlines a CRM backend starter template for clothing and electronics shops using Node.js, Express, MongoDB, and JWT. It includes a structured project layout, essential dependencies, and example implementations for models, controllers, and routes. The backend is designed to support various functionalities such as customer management, authentication, and sales tracking, ensuring scalability and clear API separation for integration with a frontend application.

Uploaded by

AYUSH NALAWADE
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

// CRM Backend Starter for Clothing & Electronics Shops

// Using Node.js + Express + MongoDB + JWT (enterprise-structured, clean)

1️⃣ 1 Project Structure:


1//
// - /src
// - /config (db, jwt)
// - /controllers (business logic)
// - /models (Mongoose schemas)
// - /routes (API endpoints)
// - /middlewares (auth, error handler)
// - /utils (helpers)
// - server.js (entry point)

2️⃣ Dependencies:
//
// npm install express mongoose dotenv bcryptjs jsonwebtoken cors morgan express-
validator

3️⃣ server.js
//
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const morgan = require('morgan');
require('dotenv').config();

const app = express();

app.use(express.json());
app.use(cors());
app.use(morgan('dev'));

// Import routes
const authRoutes = require('./routes/authRoutes');
const customerRoutes = require('./routes/customerRoutes');
const productRoutes = require('./routes/productRoutes');
const purchaseRoutes = require('./routes/purchaseRoutes');
const leadRoutes = require('./routes/leadRoutes');
const reportRoutes = require('./routes/reportRoutes');

// Use routes
app.use('/api/auth', authRoutes);
app.use('/api/customers', customerRoutes);
app.use('/api/products', productRoutes);
app.use('/api/purchases', purchaseRoutes);
app.use('/api/leads', leadRoutes);
app.use('/api/reports', reportRoutes);

// DB Connection
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => console.log('MongoDB connected'))
.catch(err => console.error(err));

const PORT = process.env.PORT || 5000;


app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

4️⃣ Example Model (models/Customer.js)


//
const mongoose = require('mongoose');
const customerSchema = new mongoose.Schema({
name: { type: String, required: true },
phone: { type: String, required: true, unique: true },
email: { type: String },
address: { type: String },
birthday: { type: Date },
customerType: { type: String, enum: ['Walk-in', 'Regular', 'VIP'], default:
'Walk-in' },
notes: { type: String }
}, { timestamps: true });

module.exports = mongoose.model('Customer', customerSchema);

5️⃣ Example Controller (controllers/customerController.js)


//
const Customer = require('../models/Customer');

exports.createCustomer = async (req, res) => {


try {
const customer = new Customer(req.body);
await customer.save();
res.status(201).json(customer);
} catch (err) {
res.status(400).json({ error: err.message });
}
};

exports.getCustomers = async (req, res) => {


try {
const customers = await Customer.find().sort({ createdAt: -1 });
res.json(customers);
} catch (err) {
res.status(500).json({ error: err.message });
}
};

6️⃣ Example Route (routes/customerRoutes.js)


//
const express = require('express');
const router = express.Router();
const customerController = require('../controllers/customerController');
const { protect } = require('../middlewares/authMiddleware');

router.post('/', protect, customerController.createCustomer);


router.get('/', protect, customerController.getCustomers);

module.exports = router;

7️⃣ Authentication (middlewares/authMiddleware.js)


//
const jwt = require('jsonwebtoken');
const User = require('../models/User');

exports.protect = async (req, res, next) => {


let token;
if (req.headers.authorization &&
req.headers.authorization.startsWith('Bearer')) {
try {
token = req.headers.authorization.split(' ')[1];
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = await User.findById(decoded.id).select('-password');
next();
} catch (err) {
res.status(401).json({ error: 'Not authorized' });
}
} else {
res.status(401).json({ error: 'No token provided' });
}
};

// Repeat similar structure for Product, Purchase, Lead, Reports with CRUD
operations.
// Integrate sales tracking, lead stages, purchase logging, and reporting APIs
aligned with your UI flows.

// This backend structure will align cleanly with your attractive React frontend,
ensuring enterprise readiness, scalability, and clear API separation for CRM
deployment and sales.

You might also like