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 ERPFiles/backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
.env
19 changes: 19 additions & 0 deletions ERPFiles/backend/config/db.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// config/db.js
const mongoose = require('mongoose');
require('dotenv').config();

const connectDB = async () => {
try {
await mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('MongoDB Connected...');
} catch (err) {
console.error(err.message);
// Exit process with failure
process.exit(1);
}
};

module.exports = connectDB;
27 changes: 27 additions & 0 deletions ERPFiles/backend/middleware/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
const jwt = require('jsonwebtoken');
require('dotenv').config();

module.exports = function (req, res, next) {
// Get token from header
const token = req.header('x-auth-token');

// Check if not token
if (!token) {
return res.status(401).json({ msg: 'No token, authorization denied' });
}

try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded.user;
next();
} catch (err) {
console.error('Token validation error:', err.message);
if (err.name === 'TokenExpiredError') {
res.status(401).json({ msg: 'Token has expired. Please login again.' });
} else if (err.name === 'JsonWebTokenError') {
res.status(401).json({ msg: 'Invalid token. Please login again.' });
} else {
res.status(401).json({ msg: 'Token is not valid' });
}
}
};
43 changes: 43 additions & 0 deletions ERPFiles/backend/models/Order.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const mongoose = require('mongoose');

const OrderSchema = new mongoose.Schema({
user: { type: mongoose.Schema.Types.ObjectId, ref: 'user', required: true },
items: [
{
product: { type: mongoose.Schema.Types.ObjectId, ref: 'product' },
// When ordering without predefined product
custom: {
name: { type: String },
description: { type: String },
color: { type: String },
finish: { type: String },
background: { type: String },
size: { type: String },
unitPrice: { type: Number },
imageUrl: { type: String },
},
quantity: { type: Number, required: true, min: 1 },
},
],
status: {
type: String,
enum: ['placed', 'reviewed_by_sales', 'user_confirmed', 'sent_to_production'],
default: 'placed',
},
notes: { type: String },
salesReviewer: { type: mongoose.Schema.Types.ObjectId, ref: 'user' },
reviewComment: { type: String },
reviewedBy: { type: String },
reviewedAt: { type: Date },
createdAt: { type: Date, default: Date.now },
updatedAt: { type: Date, default: Date.now },
});

OrderSchema.pre('save', function (next) {
this.updatedAt = new Date();
next();
});

module.exports = mongoose.model('order', OrderSchema);


17 changes: 17 additions & 0 deletions ERPFiles/backend/models/Product.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const mongoose = require('mongoose');

const ProductSchema = new mongoose.Schema({
user: { type: mongoose.Schema.Types.ObjectId, ref: 'user' },
name: { type: String, required: true },
productId: { type: String, required: true, unique: true },
description: { type: String },
cost: { type: Number, required: true },
procedure: [{ type: String }], // Stored as an array of steps
procedureEnabled: { type: Boolean, default: true },
imageUrl: { type: String },
date: { type: Date, default: Date.now },
});

ProductSchema.index({ productId: 1, user: 1 }, { unique: true });

module.exports = mongoose.model('product', ProductSchema);
29 changes: 29 additions & 0 deletions ERPFiles/backend/models/User.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// models/User.js
const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
email: {
type: String,
required: true,
unique: true,
},
password: {
type: String,
required: true,
},
role: {
type: String,
enum: ['user', 'sales', 'production', 'admin'],
default: 'user',
},
date: {
type: Date,
default: Date.now,
},
});

module.exports = mongoose.model('user', UserSchema);
Loading