first commit
This commit is contained in:
commit
beb65349b6
16
app.js
Normal file
16
app.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// app.js
|
||||||
|
const express = require('express');
|
||||||
|
const bodyParser = require('body-parser');
|
||||||
|
const apiRoutes = require('./routes/apiRoutes');
|
||||||
|
const cors = require('cors');
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
const PORT = process.env.PORT || 3000;
|
||||||
|
|
||||||
|
app.use(bodyParser.json());
|
||||||
|
app.use(cors());
|
||||||
|
app.use('/api', apiRoutes);
|
||||||
|
|
||||||
|
app.listen(PORT, () => {
|
||||||
|
console.log(`Server is running on port ${PORT}`);
|
||||||
|
});
|
24
config/dbConfig.js
Normal file
24
config/dbConfig.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// dbConfig.js
|
||||||
|
const mysql = require('mysql');
|
||||||
|
|
||||||
|
const connection = mysql.createConnection({
|
||||||
|
host: 'localhost',
|
||||||
|
user: 'root',
|
||||||
|
password: '',
|
||||||
|
database: 'community_rule',
|
||||||
|
});
|
||||||
|
// const mysql = require('mysql2');
|
||||||
|
|
||||||
|
// const connection = mysql.createConnection({
|
||||||
|
// host: 'localhost',
|
||||||
|
// user: 'root',
|
||||||
|
// password: 'your_mysql_password',
|
||||||
|
// database: 'your_database_name',
|
||||||
|
// });
|
||||||
|
|
||||||
|
connection.connect((err) => {
|
||||||
|
if (err) throw err;
|
||||||
|
console.log('Connected to the database');
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = connection;
|
52
controllers/emailController.js
Normal file
52
controllers/emailController.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
const db = require('../config/dbConfig');
|
||||||
|
|
||||||
|
exports.sendOtp = (req, res) => {
|
||||||
|
const email = req.body.email;
|
||||||
|
const otp = generateRandom4DigitNumber();
|
||||||
|
try {
|
||||||
|
db.query(
|
||||||
|
'INSERT INTO email_otp (email, otp) VALUES (?, ?) ON DUPLICATE KEY UPDATE otp = ?',
|
||||||
|
[email, otp, otp]
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
|
||||||
|
const errorMessage = {
|
||||||
|
error: true,
|
||||||
|
message: error.message,
|
||||||
|
};
|
||||||
|
return errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// send an email using api
|
||||||
|
res.json({ success: true, message: 'You must have received an email with otp successfully.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.validateOtp = async (req, res) => {
|
||||||
|
const otp = req.body.otp;
|
||||||
|
const email = req.body.email;
|
||||||
|
const otpQuery = "SELECT * from email_otp where otp = ? and email = ?";
|
||||||
|
const deleteOtpQuery = "DELETE from email_otp WHERE email = ?";
|
||||||
|
db.query(otpQuery, [otp, email], (err, results) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Error executing query:', err);
|
||||||
|
res.status(500).json({ success: false, message: 'Internal Server Error' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (results.length > 0) {
|
||||||
|
db.query(deleteOtpQuery, [email], (err, results) => {
|
||||||
|
res.status(200).json({ success: true, message: 'Valid OTP' });
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// OTP is invalid
|
||||||
|
res.status(400).json({ success: false, message: 'Invalid OTP' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function generateRandom4DigitNumber() {
|
||||||
|
// Generate a random number between 1000 and 9999
|
||||||
|
const random4DigitNumber = Math.floor(Math.random() * 9000) + 1000;
|
||||||
|
return random4DigitNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
127
controllers/ruleController.js
Normal file
127
controllers/ruleController.js
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
const db = require('../config/dbConfig');
|
||||||
|
const url = require('url');
|
||||||
|
const querystring = require('querystring');
|
||||||
|
|
||||||
|
|
||||||
|
exports.getRules = (req, res) => {
|
||||||
|
const query = 'SELECT * FROM rules WHERE deleted = 0 ORDER BY rule_id DESC';
|
||||||
|
|
||||||
|
// Execute the query
|
||||||
|
db.query(query, (error, results) => {
|
||||||
|
if (error) {
|
||||||
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
|
} else {
|
||||||
|
// Convert the results to JSON
|
||||||
|
const jsonResult = JSON.stringify(results);
|
||||||
|
// Send the JSON response
|
||||||
|
|
||||||
|
res.json({ rules: jsonResult });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getRule = (req, res) => {
|
||||||
|
const query = 'SELECT * FROM rules where rule_id = ?';
|
||||||
|
|
||||||
|
const parsedUrl = url.parse(req.originalUrl);
|
||||||
|
const queryParams = querystring.parse(parsedUrl.query);
|
||||||
|
|
||||||
|
db.query(query, [req.query.ruleId], (error, results) => {
|
||||||
|
if (error) {
|
||||||
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
|
} else {
|
||||||
|
// Convert the results to JSON
|
||||||
|
|
||||||
|
const jsonResult = JSON.stringify(results);
|
||||||
|
|
||||||
|
// Send the JSON response
|
||||||
|
res.json({ rules: jsonResult });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.deleteRule = (req, res) => {
|
||||||
|
const query = 'UPDATE rules SET deleted = 1 where rule_id = ?';
|
||||||
|
|
||||||
|
console.log("ruld to delete" + req.body.ruleID)
|
||||||
|
db.query(query, [req.body.ruleID], (error, results) => {
|
||||||
|
if (error) {
|
||||||
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
|
} else {
|
||||||
|
const jsonResult = JSON.stringify(results);
|
||||||
|
res.json({ rules: jsonResult });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.publishRule = async (req, res) => {
|
||||||
|
|
||||||
|
const edit = req.body.edit;
|
||||||
|
|
||||||
|
if (!edit) {
|
||||||
|
const publishQuery = "INSERT INTO rules "
|
||||||
|
+ "(rule_id, time_stamp, name, lineage, summary, modules, creator_name, creator_url, deleted, list, icon, latest_version, email)"
|
||||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
|
|
||||||
|
db.query(publishQuery, [req.body.ruleID, req.body.timestamp, req.body.name, req.body.lineage, req.body.summary, req.body.modules, req.body.creatorName, req.body.creatorUrl, 0, req.body.list, req.body.icon, req.body.latest_version, req.body.email], (err, results) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Error executing query:', err);
|
||||||
|
res.status(500).json({ success: false, message: 'OTP Validated but issue while creating entry for rule ' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
res.status(200).json({ success: true, message: 'OTP is valid and your rule is now published' });
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
const publishQueryVersionHistory = "INSERT INTO version_history "
|
||||||
|
+ "(rule_id, time_stamp, name, lineage, summary, modules, creator_name, creator_url, list, icon, rule_version)"
|
||||||
|
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
|
const selectVersionHistory = "SELECT * FROM rules WHERE rule_id = ?"
|
||||||
|
|
||||||
|
db.query(selectVersionHistory, [req.body.ruleID], (err, results) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Error executing query:', err);
|
||||||
|
res.status(500).json({ success: false, message: 'Internal Server Error' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log("rule =>" + req.body.ruleID)
|
||||||
|
if (results.length > 0) {
|
||||||
|
|
||||||
|
const versionHistoryData = results[0];
|
||||||
|
// Execute the second query to insert data
|
||||||
|
db.query(
|
||||||
|
publishQueryVersionHistory,
|
||||||
|
[
|
||||||
|
versionHistoryData.rule_id,
|
||||||
|
versionHistoryData.time_stamp,
|
||||||
|
versionHistoryData.name,
|
||||||
|
versionHistoryData.lineage,
|
||||||
|
versionHistoryData.summary,
|
||||||
|
versionHistoryData.modules,
|
||||||
|
versionHistoryData.creator_name,
|
||||||
|
versionHistoryData.creator_url,
|
||||||
|
versionHistoryData.list,
|
||||||
|
versionHistoryData.icon,
|
||||||
|
req.body.latest_version - 1
|
||||||
|
],
|
||||||
|
(err, insertResults) => {
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
console.log(err)
|
||||||
|
console.error('Error executing insert query:', err);
|
||||||
|
res.status(500).json({ success: false, message: 'Internal Server Error' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const updateQuery = "UPDATE rules SET time_stamp = ?, name = ?, lineage = ?, summary = ?, modules = ?, creator_name = ?, creator_url = ?, version = ?, list = ?, icon = ?, latest_version = ? WHERE rule_id = ?;"
|
||||||
|
db.query(updateQuery, [req.body.timestamp, req.body.name, req.body.lineage, req.body.summary, req.body.modules, req.body.creatorName, req.body.creatorUrl, req.body.version, req.body.list, req.body.icon, req.body.latest_version, req.body.ruleID], (err, results) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Error executing query:', err);
|
||||||
|
res.status(500).json({ success: false, message: 'OTP Validated but issue while creating entry for rule ' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
res.status(200).json({ success: true, message: 'OTP is valid and your rule is now published' });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
13
controllers/userController.js
Normal file
13
controllers/userController.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// userController.js
|
||||||
|
const userModel = require('../models/userModel');
|
||||||
|
|
||||||
|
exports.getAllUsers = (req, res) => {
|
||||||
|
userModel.getAllUsers((err, results) => {
|
||||||
|
// if (err) throw err;
|
||||||
|
res.json({});
|
||||||
|
// console.log("asdfasdf");
|
||||||
|
// res.json({});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
10
models/userModel.js
Normal file
10
models/userModel.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// userModel.js
|
||||||
|
const db = require('../config/dbConfig');
|
||||||
|
|
||||||
|
class User {
|
||||||
|
getAllUsers(callback) {
|
||||||
|
//db.query('SELECT * FROM users', callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = new User();
|
1473
package-lock.json
generated
Normal file
1473
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
85
package.json
Normal file
85
package.json
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
"name": "community_rule_backend",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "app.js",
|
||||||
|
"dependencies": {
|
||||||
|
"accepts": "^1.3.8",
|
||||||
|
"array-flatten": "^1.1.1",
|
||||||
|
"body-parser": "^1.20.2",
|
||||||
|
"bytes": "^3.1.2",
|
||||||
|
"call-bind": "^1.0.5",
|
||||||
|
"content-disposition": "^0.5.4",
|
||||||
|
"content-type": "^1.0.5",
|
||||||
|
"cookie": "^0.5.0",
|
||||||
|
"cookie-signature": "^1.0.6",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"debug": "^2.6.9",
|
||||||
|
"define-data-property": "^1.1.1",
|
||||||
|
"denque": "^2.1.0",
|
||||||
|
"depd": "^2.0.0",
|
||||||
|
"destroy": "^1.2.0",
|
||||||
|
"ee-first": "^1.1.1",
|
||||||
|
"encodeurl": "^1.0.2",
|
||||||
|
"escape-html": "^1.0.3",
|
||||||
|
"etag": "^1.8.1",
|
||||||
|
"express": "^4.18.2",
|
||||||
|
"finalhandler": "^1.2.0",
|
||||||
|
"forwarded": "^0.2.0",
|
||||||
|
"fresh": "^0.5.2",
|
||||||
|
"function-bind": "^1.1.2",
|
||||||
|
"generate-function": "^2.3.1",
|
||||||
|
"get-intrinsic": "^1.2.2",
|
||||||
|
"gopd": "^1.0.1",
|
||||||
|
"has-property-descriptors": "^1.0.1",
|
||||||
|
"has-proto": "^1.0.1",
|
||||||
|
"has-symbols": "^1.0.3",
|
||||||
|
"hasown": "^2.0.0",
|
||||||
|
"http-errors": "^2.0.0",
|
||||||
|
"iconv-lite": "^0.4.24",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"ipaddr.js": "^1.9.1",
|
||||||
|
"is-property": "^1.0.2",
|
||||||
|
"long": "^5.2.3",
|
||||||
|
"lru-cache": "^8.0.5",
|
||||||
|
"media-typer": "^0.3.0",
|
||||||
|
"merge-descriptors": "^1.0.1",
|
||||||
|
"methods": "^1.1.2",
|
||||||
|
"mime": "^1.6.0",
|
||||||
|
"mime-db": "^1.52.0",
|
||||||
|
"mime-types": "^2.1.35",
|
||||||
|
"ms": "^2.0.0",
|
||||||
|
"mysql2": "^3.6.5",
|
||||||
|
"named-placeholders": "^1.1.3",
|
||||||
|
"negotiator": "^0.6.3",
|
||||||
|
"object-inspect": "^1.13.1",
|
||||||
|
"on-finished": "^2.4.1",
|
||||||
|
"parseurl": "^1.3.3",
|
||||||
|
"path-to-regexp": "^0.1.7",
|
||||||
|
"proxy-addr": "^2.0.7",
|
||||||
|
"qs": "^6.11.0",
|
||||||
|
"range-parser": "^1.2.1",
|
||||||
|
"raw-body": "^2.5.2",
|
||||||
|
"safe-buffer": "^5.2.1",
|
||||||
|
"safer-buffer": "^2.1.2",
|
||||||
|
"send": "^0.18.0",
|
||||||
|
"seq-queue": "^0.0.5",
|
||||||
|
"serve-static": "^1.15.0",
|
||||||
|
"set-function-length": "^1.1.1",
|
||||||
|
"setprototypeof": "^1.2.0",
|
||||||
|
"side-channel": "^1.0.4",
|
||||||
|
"sqlstring": "^2.3.3",
|
||||||
|
"statuses": "^2.0.1",
|
||||||
|
"toidentifier": "^1.0.1",
|
||||||
|
"type-is": "^1.6.18",
|
||||||
|
"unpipe": "^1.0.0",
|
||||||
|
"utils-merge": "^1.0.1",
|
||||||
|
"vary": "^1.1.2"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
14
routes/apiRoutes.js
Normal file
14
routes/apiRoutes.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// apiRoutes.js
|
||||||
|
const express = require('express');
|
||||||
|
const router = express.Router();
|
||||||
|
const ruleController = require('../controllers/ruleController');
|
||||||
|
const emailController = require('../controllers/emailController');
|
||||||
|
// router.get('/users', userController.getAllUsers);
|
||||||
|
router.post('/send_otp', emailController.sendOtp);
|
||||||
|
router.post('/validate_otp', emailController.validateOtp);
|
||||||
|
router.post('/publish_rule', ruleController.publishRule);
|
||||||
|
router.get('/get_rules', ruleController.getRules);
|
||||||
|
router.delete('/delete_rule', ruleController.deleteRule);
|
||||||
|
router.get('/get_rule', ruleController.getRule);
|
||||||
|
// router.post('/publish_rule', ruleController.)
|
||||||
|
module.exports = router;
|
Loading…
x
Reference in New Issue
Block a user