create-myexam-app 1.0.29 → 1.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +9 -7
- package/package.json +1 -1
- package/projects/SMS-/backend-project/.env +3 -0
- package/projects/SMS-/backend-project/controllers/ProductController.js +19 -0
- package/projects/SMS-/backend-project/controllers/StockTransactionController.js +46 -0
- package/projects/SMS-/backend-project/controllers/UserController.js +35 -0
- package/projects/SMS-/backend-project/controllers/WarehouseController.js +19 -0
- package/projects/SMS-/backend-project/db/connectDB.js +11 -0
- package/projects/SMS-/backend-project/middlware/auth.js +16 -0
- package/projects/SMS-/backend-project/models/Product.js +13 -0
- package/projects/SMS-/backend-project/models/StockTransaction.js +9 -0
- package/projects/SMS-/backend-project/models/User.js +8 -0
- package/projects/SMS-/backend-project/models/Warehouse.js +9 -0
- package/projects/SMS-/backend-project/package-lock.json +1568 -0
- package/projects/SMS-/backend-project/package.json +23 -0
- package/projects/SMS-/backend-project/routes/ProductRoutes.js +11 -0
- package/projects/SMS-/backend-project/routes/StockTransactionRoutes.js +14 -0
- package/projects/SMS-/backend-project/routes/UserRoutes.js +10 -0
- package/projects/SMS-/backend-project/routes/WarehouseRoutes.js +10 -0
- package/projects/SMS-/backend-project/server.js +24 -0
- package/projects/SMS-/frontend-project/README.md +16 -0
- package/projects/SMS-/frontend-project/eslint.config.js +21 -0
- package/projects/SMS-/frontend-project/index.html +13 -0
- package/projects/SMS-/frontend-project/package-lock.json +3053 -0
- package/projects/SMS-/frontend-project/package.json +31 -0
- package/projects/SMS-/frontend-project/public/favicon.svg +1 -0
- package/projects/SMS-/frontend-project/public/icons.svg +24 -0
- package/projects/SMS-/frontend-project/src/App.css +184 -0
- package/projects/SMS-/frontend-project/src/App.jsx +41 -0
- package/projects/SMS-/frontend-project/src/assets/hero.png +0 -0
- package/projects/SMS-/frontend-project/src/assets/react.svg +1 -0
- package/projects/SMS-/frontend-project/src/assets/vite.svg +1 -0
- package/projects/SMS-/frontend-project/src/axiosInstance.js +11 -0
- package/projects/SMS-/frontend-project/src/components/Navbar.jsx +37 -0
- package/projects/SMS-/frontend-project/src/index.css +1 -0
- package/projects/SMS-/frontend-project/src/main.jsx +10 -0
- package/projects/SMS-/frontend-project/src/pages/Dashboard.jsx +31 -0
- package/projects/SMS-/frontend-project/src/pages/Login.jsx +79 -0
- package/projects/SMS-/frontend-project/src/pages/Product.jsx +135 -0
- package/projects/SMS-/frontend-project/src/pages/Register.jsx +72 -0
- package/projects/SMS-/frontend-project/src/pages/Reports.jsx +302 -0
- package/projects/SMS-/frontend-project/src/pages/StockTransaction.jsx +185 -0
- package/projects/SMS-/frontend-project/src/pages/Warehouse.jsx +125 -0
- package/projects/SMS-/frontend-project/vite.config.js +10 -0
package/index.js
CHANGED
|
@@ -21,14 +21,15 @@ console.log('[9] School fee Management System')
|
|
|
21
21
|
console.log('[10]Stock Hub Management System')
|
|
22
22
|
console.log('[11]Stock Invetory Management System')
|
|
23
23
|
console.log('[12]Stock Management System')
|
|
24
|
-
console.log('[13]
|
|
25
|
-
console.log('[14]Sales Record Management System
|
|
26
|
-
console.log('[15]
|
|
24
|
+
console.log('[13]Stock Management System __')
|
|
25
|
+
console.log('[14]Sales Record Management System')
|
|
26
|
+
console.log('[15]Sales Record Management System Elysee')
|
|
27
|
+
console.log('[16]userController.js')
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
|
|
31
|
-
rl.question('Pick (1-
|
|
32
|
+
rl.question('Pick (1-16): ', (answer) => {
|
|
32
33
|
|
|
33
34
|
const projects = {
|
|
34
35
|
'1':'crpms',
|
|
@@ -43,9 +44,10 @@ rl.question('Pick (1-15): ', (answer) => {
|
|
|
43
44
|
'10':'SHMS(Ely)',
|
|
44
45
|
'11':'sims',
|
|
45
46
|
'12': 'SMS',
|
|
46
|
-
'13':'
|
|
47
|
-
'14':'SRMS
|
|
48
|
-
'15':'
|
|
47
|
+
'13':'SMS-',
|
|
48
|
+
'14':'SRMS',
|
|
49
|
+
'15':'SRMS(Ely)',
|
|
50
|
+
'16':'user',
|
|
49
51
|
|
|
50
52
|
|
|
51
53
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Product from "../models/Product.js";
|
|
2
|
+
|
|
3
|
+
export const createProduct = async (req, res) => {
|
|
4
|
+
try {
|
|
5
|
+
const product = await Product.create(req.body);
|
|
6
|
+
res.status(201).json(product);
|
|
7
|
+
} catch (error) {
|
|
8
|
+
res.status(500).json({ message: error.message });
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const getAllProducts = async (req, res) => {
|
|
13
|
+
try {
|
|
14
|
+
const products = await Product.find();
|
|
15
|
+
res.status(200).json(products);
|
|
16
|
+
} catch (error) {
|
|
17
|
+
res.status(500).json({ message: error.message });
|
|
18
|
+
}
|
|
19
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import StockTransaction from "../models/StockTransaction.js";
|
|
2
|
+
|
|
3
|
+
export const createTransaction = async (req, res) => {
|
|
4
|
+
try {
|
|
5
|
+
const transaction = await StockTransaction.create(req.body);
|
|
6
|
+
res.status(201).json(transaction);
|
|
7
|
+
} catch (error) {
|
|
8
|
+
res.status(500).json({ message: error.message });
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const getAllTransactions = async (req, res) => {
|
|
13
|
+
try {
|
|
14
|
+
const transactions = await StockTransaction.find();
|
|
15
|
+
res.status(200).json(transactions);
|
|
16
|
+
} catch (error) {
|
|
17
|
+
res.status(500).json({ message: error.message });
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const getTransactionById = async (req, res) => {
|
|
22
|
+
try {
|
|
23
|
+
const transaction = await StockTransaction.findById(req.params.id);
|
|
24
|
+
res.status(200).json(transaction);
|
|
25
|
+
} catch (error) {
|
|
26
|
+
res.status(500).json({ message: error.message });
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const updateTransaction = async (req, res) => {
|
|
31
|
+
try {
|
|
32
|
+
const transaction = await StockTransaction.findByIdAndUpdate(req.params.id, req.body, { new: true });
|
|
33
|
+
res.status(200).json(transaction);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
res.status(500).json({ message: error.message });
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const deleteTransaction = async (req, res) => {
|
|
40
|
+
try {
|
|
41
|
+
await StockTransaction.findByIdAndDelete(req.params.id);
|
|
42
|
+
res.status(200).json({ message: "Deleted successfully" });
|
|
43
|
+
} catch (error) {
|
|
44
|
+
res.status(500).json({ message: error.message });
|
|
45
|
+
}
|
|
46
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import User from "../models/User.js";
|
|
2
|
+
import bcrypt from 'bcrypt'
|
|
3
|
+
import jwt from 'jsonwebtoken'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
//register
|
|
7
|
+
|
|
8
|
+
export const registerUser = async(req,res) => {
|
|
9
|
+
try{
|
|
10
|
+
const {username, password} = req.body;
|
|
11
|
+
const hashedPassword = await bcrypt.hash(password, 10);
|
|
12
|
+
const user = await User.create({username,password:hashedPassword});
|
|
13
|
+
res.status(201).json(user);
|
|
14
|
+
}catch(error){
|
|
15
|
+
res.status(500).json({message:error.message});
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//login
|
|
19
|
+
|
|
20
|
+
export const loginUser = async (req,res) => {
|
|
21
|
+
try{
|
|
22
|
+
const {username, password} = req.body;
|
|
23
|
+
const user = await User.findOne({username});
|
|
24
|
+
if(!user) return res.status(400).json({message:"Invalid credetial.."});
|
|
25
|
+
|
|
26
|
+
const isMatch = await bcrypt.compare(password, user.password);
|
|
27
|
+
if(!isMatch) return res.status(400).json({message:"Invalid password"});
|
|
28
|
+
|
|
29
|
+
const token = jwt.sign({id: user._id}, process.env.JWT_SECRET || "secret", {expiresIn:"4d"});
|
|
30
|
+
res.status(200).json({token, user});
|
|
31
|
+
}catch(error){
|
|
32
|
+
res.status(500).json({message:error.message});
|
|
33
|
+
}
|
|
34
|
+
} ;
|
|
35
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Warehouse from "../models/Warehouse.js";
|
|
2
|
+
|
|
3
|
+
export const createWarehouse = async (req, res) => {
|
|
4
|
+
try {
|
|
5
|
+
const warehouse = await Warehouse.create(req.body);
|
|
6
|
+
res.status(201).json(warehouse);
|
|
7
|
+
} catch (error) {
|
|
8
|
+
res.status(500).json({ message: error.message });
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const getAllWarehouses = async (req, res) => {
|
|
13
|
+
try {
|
|
14
|
+
const warehouses = await Warehouse.find();
|
|
15
|
+
res.status(200).json(warehouses);
|
|
16
|
+
} catch (error) {
|
|
17
|
+
res.status(500).json({ message: error.message });
|
|
18
|
+
}
|
|
19
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import mongoose from 'mongoose'
|
|
2
|
+
|
|
3
|
+
export const connectDB = async () => {
|
|
4
|
+
console.log("Connecting to database");
|
|
5
|
+
try{
|
|
6
|
+
await mongoose.connect(process.env.MONGO_URI);
|
|
7
|
+
console.log("Connected to database");
|
|
8
|
+
}catch(error){
|
|
9
|
+
console.log("Failed to connect to database");
|
|
10
|
+
}
|
|
11
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import jwt from 'jsonwebtoken'
|
|
2
|
+
|
|
3
|
+
const protect = (req, res, next) => {
|
|
4
|
+
const token = req.headers.authorization?.split(" ")[1];
|
|
5
|
+
if (!token) return res.status(401).json({ message: "Not authorized" });
|
|
6
|
+
|
|
7
|
+
try {
|
|
8
|
+
const decoded = jwt.verify(token, process.env.JWT_SECRET);
|
|
9
|
+
req.user = decoded;
|
|
10
|
+
next();
|
|
11
|
+
} catch {
|
|
12
|
+
res.status(401).json({ message: "Invalid token" });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default protect
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
|
|
3
|
+
const productSchema = new mongoose.Schema({
|
|
4
|
+
productCode: { type: String, required: true, unique: true },
|
|
5
|
+
productName: { type: String, required: true },
|
|
6
|
+
category: { type: String, required: true },
|
|
7
|
+
quantityInStock: { type: Number, required: true },
|
|
8
|
+
unitPrice: { type: Number, required: true },
|
|
9
|
+
supplierName: { type: String, required: true },
|
|
10
|
+
dateReceived: { type: Date, required: true }
|
|
11
|
+
}, { timestamps: true });
|
|
12
|
+
|
|
13
|
+
export default mongoose.model("Product", productSchema);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
|
|
3
|
+
const stockTransactionSchema = new mongoose.Schema({
|
|
4
|
+
transactionDate: { type: Date, required: true },
|
|
5
|
+
quantityMoved: { type: Number, required: true },
|
|
6
|
+
transactionType: { type: String, required: true }
|
|
7
|
+
}, { timestamps: true });
|
|
8
|
+
|
|
9
|
+
export default mongoose.model("StockTransaction", stockTransactionSchema);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
|
|
3
|
+
const warehouseSchema = new mongoose.Schema({
|
|
4
|
+
warehouseCode: { type: String, required: true, unique: true },
|
|
5
|
+
warehouseName: { type: String, required: true },
|
|
6
|
+
warehouseLocation: { type: String, required: true }
|
|
7
|
+
}, { timestamps: true });
|
|
8
|
+
|
|
9
|
+
export default mongoose.model("Warehouse", warehouseSchema);
|