pro118njsac/pro118njsac-back-b/authsec_node/Backend/api/cns.controller.js

2759 lines
76 KiB
JavaScript

const { genSaltSync, hashSync, compareSync } = require("bcrypt")
const { sign } = require("jsonwebtoken")
const otpGenerator = require("otp-generator")
const nodemailer = require("nodemailer")
const bcrypt = require("bcrypt")
const { pool, db } = require("../config/database")
const fs = require("fs")
const path = require("path")
const generateRandomHash = require("../Functions/generateRandomHash")
const { execArgv, env } = require("process")
const {
buildExtensionByFormCode,
} = require("../Functions/buildExtensionByFormCode")
const { exec } = require("child_process")
const { v4: uuidv4 } = require("uuid")
const multer = require("multer")
const { promisify } = require("util")
const readFileAsync = promisify(require("fs").readFile)
const transporter = nodemailer.createTransport({
service: "gmail", // e.g., 'Gmail'
host: process.env.NODEMAILER_HOST,
port: process.env.NODEMAILER_PORT,
secure: false,
auth: {
user: process.env.NODEMAILER_USER,
pass: process.env.NODEMAILER_PASSWORD,
},
})
async function dateAndTime() {
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
return dateTime
}
async function executeQuery(sql, values) {
const connection = await db.getConnection()
// console.log("connection..",connection);
try {
const [rows] = await connection.execute(sql, values)
return rows
} finally {
connection.release()
}
}
const login = async (req, res) => {
const body = req.body
pool.query(
"SELECT * FROM sec_users WHERE email = ?",
[body.email],
(err, results) => {
if (err) {
console.error(err)
return res.json({
success: 0,
data: "Error during login",
})
}
if (!results || results.length === 0) {
return res.json({
success: 0,
data: "Invalid email or password",
})
}
const isValidPassword = compareSync(body.password, results[0].user_passw)
if (isValidPassword) {
// console.log(results[0].usr_grp)
const jsontoken = sign(results[0], "secret", {
algorithm: "HS256", // Use a shorter signing algorithm
expiresIn: "5h", // Set a shorter expiration time if appropriate
})
return res.json({
operationStatus: "SUCCESS",
operationMessage: "Login Success",
item: {
token: jsontoken,
userId: results[0].user_id,
fullname: results[0].full_name,
username: results[0].user_name,
email: results[0].email,
firstName: results[0].full_name,
roles: ["ProjectManager", "Developer", "ROLE ADMIN"],
},
})
} else {
res.json({
success: 0,
data: "Invalid email or password",
})
}
}
)
}
// logout
const logout = (req, res) => {
res.json({
success: 1,
message: "Logout successful",
})
}
// reset password
const sendEmailForResetPassword = async (req, res) => {
const userEmail = req.body.email
// console.log(userEmail)
try {
const [userRows] = await executeQuery(
"SELECT * FROM sec_users WHERE email = ?",
[userEmail]
)
// console.log(userRows.email)
const user = userRows
if (user) {
const email = user.email
const subject = "Password Reset"
const hash = generateRandomHash()
const link =
"http://" +
process.env.LOCAL_HOST +
":" +
process.env.FRONTEND_PORT_9191 +
"/#/forgotresetpassword/" +
hash
// Store the reset token in the database
const resetTokenData = {
expiry_date: calculateExpiryDate(), // You need to implement a function to calculate the expiry date
token: hash,
user_user_id: user.user_id,
}
// Assuming you have a database model for password_reset_token
await createPasswordResetToken(resetTokenData)
// req.user.resetHash = hash
const mailOptions = {
from: process.env.NODEMAILER_USER,
to: userEmail,
subject: subject,
text: `${link}`,
}
transporter.sendMail(mailOptions, (error) => {
if (error) {
console.log(error)
return res.status(500).json({ message: "Error sending email" })
}
return res.status(200).json({ message: "Email sent successfully" })
})
} else {
return res.status(400).json({ message: "User not found" })
}
} catch (error) {
console.error(error)
return res
.status(500)
.json({ message: "Error sending email for password reset" })
}
}
const createPasswordResetToken = async (resetTokenData) => {
try {
// Obtain the maximum ID from the password_reset_token table
const sql = `SELECT MAX(id) AS maxId FROM password_reset_token`
const [record] = await executeQuery(sql)
// console.log(record)
// Increment the maxId by 1 to get the new primary key value
const newId = record.maxId + 1
// Insert the record into the password_reset_token table with the new ID
const insertSql = `
INSERT INTO password_reset_token (id, expiry_date, token, user_user_id)
VALUES (?, ?, ?, ?)
`
const results = await executeQuery(insertSql, [
newId,
resetTokenData.expiry_date,
resetTokenData.token,
resetTokenData.user_user_id,
])
return results
} catch (error) {
console.error(error)
throw error
}
}
// Function to calculate expiry date (you may customize this as per your requirements)
const calculateExpiryDate = () => {
const expiryDate = new Date()
expiryDate.setDate(expiryDate.getDate() + 1) // Set expiry date to 1 day from now
return expiryDate
}
const savePassword = async (req, res) => {
const token = req.params.token
// console.log(token)
const { newPassword, confirmPassword } = req.body
try {
// Fetch user by token from the database
const [rows] = await executeQuery(
"SELECT * FROM password_reset_token WHERE token = ?",
[token]
)
if (rows.length === 0) {
return res.status(400).json({ message: "Token expired" })
}
// console.log(rows)
const user_id = rows.user_user_id
// Fetch user by email from the database
const [userRows] = await executeQuery(
"SELECT * FROM sec_users WHERE user_id = ?",
[user_id]
)
// console.log(userRows)
if (userRows.length === 0) {
return res.status(400).json({ message: "User not found" })
}
const a = userRows
if (newPassword === confirmPassword) {
// Update user password
const hashedPassword = await bcrypt.hash(newPassword, 10)
a.user_passw = hashedPassword
a.pwd_changed_cnt = a.pwd_changed_cnt ? a.pwd_changed_cnt + 1 : 1
a.last_pwd_changed_date = new Date()
a.change_passw = newPassword
// Fetch the maximum id from password_reset_token
// const sql = `SELECT MAX(id) AS maxId FROM password_reset_token`
// const [record] = await executeQuery(sql)
// // console.log(record)
// // Increment the maxId by 1 to get the new primary key value
// const newId = record.maxId + 1
// Save the updated user details to the database with the new id
await executeQuery(
"UPDATE sec_users SET user_passw = ?, pwd_changed_cnt = ?, last_pwd_changed_date = ?, change_passw = ? WHERE user_id = ?",
[
a.user_passw,
a.pwd_changed_cnt,
a.last_pwd_changed_date,
a.change_passw,
a.user_id,
]
)
// Delete the password reset token
await executeQuery("DELETE FROM password_reset_token WHERE token = ?", [
token,
])
return res.status(200).json(a)
}
return res
.status(400)
.json({ message: "Password and confirm password do not match" })
} catch (error) {
console.error(error)
return res.status(500).json({ message: "Internal Server Error" })
}
}
const resetPassword = async (req, res) => {
try {
const { oldPassword, newPassword, confirmPassword } = req.body
console.log(oldPassword, newPassword, confirmPassword)
// Check if newPassword and confirmPassword match
if (newPassword !== confirmPassword) {
return res
.status(400)
.json({ message: "New password and confirm password do not match" })
}
const user = req.user
// console.log(user)
if (!user) {
return res.status(400).json({ message: "User not found" })
}
// Validate old password
const isValidOldPassword = compareSync(oldPassword, user.user_passw)
if (!isValidOldPassword) {
return res.status(400).json({ message: "Invalid old password" })
}
// Update the password in the database
await updatePasswordAndUserData(user.user_id, newPassword)
// Optionally, remove the hash from your local storage or mark it as used
// removeHashFromStorage(hash);
return res.status(200).json({ message: "Password reset successful" })
} catch (error) {
console.error(error)
return res.status(500).json({ message: "Error resetting password" })
}
}
// Update Password Controller
const updatePasswordAndUserData = async (userId, newPassword) => {
return new Promise(async (resolve, reject) => {
try {
// Retrieve user details
const [userRows] = await executeQuery(
"SELECT * FROM sec_users WHERE user_id = ?",
[userId]
)
if (userRows.length === 0) {
reject({ message: "User not found" })
return
}
// Hash the new password
const hashedPassword = await bcrypt.hash(newPassword, 10)
// Update user details
const updatedUser = {
user_passw: hashedPassword,
pwd_changed_cnt: userRows.pwd_changed_cnt
? userRows.pwd_changed_cnt + 1
: 1,
last_pwd_changed_date: new Date(),
change_passw: newPassword,
user_id: userId,
}
// Update password and user data in a single query
await executeQuery(
"UPDATE sec_users SET user_passw = ?, pwd_changed_cnt = ?, last_pwd_changed_date = ?, change_passw = ? WHERE user_id = ?",
[
updatedUser.user_passw,
updatedUser.pwd_changed_cnt,
updatedUser.last_pwd_changed_date,
updatedUser.change_passw,
updatedUser.user_id,
]
)
resolve({ message: "Password updated successfully" })
} catch (error) {
console.error(error)
reject({ message: "Internal Server Error" })
}
})
}
// Controllers for User grp maintenance
const getUsersUserGrpMaintenance = (req, res) => {
// pool.query(`SELECT * FROM sec_user_group`, [], (error, results, fields) => {
// if (error) {
// console.log(error)
// return res.json({
// success: 0,
// message: "Table is empty",
// })
// }
// return res.status(200).json(results)
// })
// }
pool.query(
`SELECT * FROM sec_user_group`,
[],
(error, results, fields) => {
if (error) {
console.log(error);
return res.json({
success: 0,
message: "Table is empty",
});
}
// Map the results to the desired format
const formattedResults = results.map((item) => {
// Convert updatedate to a timestamp in milliseconds and a human-readable format
const updatedateTimestamp = item.updatedate ? new Date(item.updatedate).getTime() : null;
const updateDateFormated = item.updatedate
? new Date(item.updatedate).toLocaleString("en-GB", {
day: "2-digit",
month: "short",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
})
: null;
// Re-map the fields
return {
usrGrp: item.usr_grp,
groupName: item.group_name,
groupDesc: item.group_desc,
createby: item.createby,
createdate: item.createdate,
updatedate: updatedateTimestamp, // Converted to timestamp in milliseconds
updateby: item.updateby,
status: item.status,
groupLevel: item.group_level,
createDateFormated: item.createdate, // Keeping it as null or format if needed
updateDateFormated: updateDateFormated, // Human-readable date format
};
});
// Return the newly formatted result
return res.status(200).json(formattedResults);
}
);
};
const getUsersByUserIdUserGrpMaintenance = (req, res) => {
const id = req.params.id
pool.query(
`SELECT * FROM sec_user_group WHERE usr_grp = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
if (!results) {
return res.json({
success: 0,
message: "Record not found",
})
}
return res.status(200).json(results)
}
)
}
const updateUsersUserGrpMaintenance = (req, res) => {
const body = req.body
const id = req.params
pool.query(
`UPDATE INTO sec_user_group SET createby = ?, createdate = ?, group_desc = ?, group_level = ?, group_name = ?, status = ?, updateby = ? WHERE usr_grp = ?`,
[
body.createby,
body.createdate,
body.group_desc,
body.group_level,
body.password,
body.group_name,
body.status,
body.updateby,
id,
],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
if (!results) {
return res.json({
success: 0,
message: "Failed to update user",
})
}
return res.json({
success: 1,
data: "updated succesfully",
})
}
)
}
const createUsersUserGrpMaintenance = (req, res) => {
const body = req.body
pool.query(
`INSERT sec_user_group SET createby = ?,createdate = ?,group_desc = ?,group_level = ?,group_name = ?, status = ?, updateby = ? usr_grp = ?`,
[
body.createby,
body.createdate,
body.groupDesc,
body.group_level,
body.password,
body.groupName,
body.status,
body.updateby,
body.usrGrp,
],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
if (!results) {
return res.json({
success: 0,
message: "Failed to update user",
})
}
return res.json({
success: 1,
data: "updated succesfully",
})
}
)
}
const deleteUsersUserGrpMaintenance = (req, res) => {
const id = req.params.id
pool.query(
`delete from registration where id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
return res.json({
success: 1,
data: "user deleted succesfully",
})
}
)
}
// Controllers for Menu maintainence
const getUsersMenuMaintainence = (req, res) => {
pool.query(`SELECT * FROM sec_menu_det`, [], (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
})
}
const getUsersByUserIdMenuMaintainence = (req, res) => {
const id = req.params.id;
pool.query(
`SELECT * FROM sec_grp_menu_access WHERE usr_grp = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error);
return res.json({
success: 0,
message: "Table is empty",
});
}
if (!results || results.length === 0) {
return res.json({
success: 0,
message: "Record not found",
});
}
// Map the results to the desired format
const formattedResults = results.map((item) => {
// Convert created_at and updated_at to timestamps in milliseconds
const createdAtTimestamp = item.created_at ? new Date(item.created_at).getTime() : null;
const updatedAtTimestamp = item.updated_at ? new Date(item.updated_at).getTime() : null;
return {
usrGrp: item.usr_grp, // Adding usrGrp
menuItemId: item.menu_item_id,
mexport: item.mexport,
menuId: item.menu_id,
createby: item.createby,
createdAt: createdAtTimestamp, // Convert to timestamp
updateby: item.updateby,
updatedAt: updatedAtTimestamp, // Convert to timestamp
isdisable: item.isdisable,
itemSeq: item.item_seq,
menuItemDesc: item.menu_item_desc,
status: item.status,
moduleName: item.module_name,
main_menu_action_name: item.main_menu_action_name,
main_menu_icon_name: item.main_menu_icon_name,
subMenus: [], // Empty array as requested
grpid: null, // Placeholder for grpid, assuming no equivalent field in the database
gmenuid: null, // Placeholder for gmenuid, assuming no equivalent field in the database
mcreate: item.m_create,
mdelete: item.m_delete,
mquery: item.m_query,
mvisible: item.m_visible,
medit: item.m_edit,
};
});
return res.status(200).json(formattedResults);
}
);
};
const updateUsersMenuMaintainence = (req, res) => {
const body = req.body
const { id } = req.params
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
pool.query(
`UPDATE sec_menu_det SET item_seq = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ?, menu_item_desc = ?, module_name = ?, status = ?, updated_at = ? WHERE menu_item_id = ?`,
[
body.itemSeq,
body.main_menu_action_name,
body.main_menu_icon_name,
body.menuId,
body.menuItemDesc,
body.moduleName,
body.status,
dateTime,
id,
],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
if (!results) {
return res.json({
success: 0,
message: "Failed to update user",
})
}
return res.json({
success: 1,
data: "updated succesfully",
})
}
)
}
const createUsersMenuMaintainence = (req, res) => {
const body = req.body
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
pool.query(
`INSERT sec_menu_det SET menu_item_id = ?, item_seq = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ?, menu_item_desc = ?, module_name = ?, status = ?, created_at = ?, updated_at = ?`,
[
body.menuItemId,
body.itemSeq,
body.main_menu_action_name,
body.main_menu_icon_name,
body.menuId,
body.menuItemDesc,
body.moduleName,
body.status,
body.createdAt,
dateTime,
],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
if (!results) {
return res.json({
success: 0,
message: "Failed to create user",
})
}
return res.json({
success: 1,
data: "created succesfully",
})
}
)
}
const deleteUsersMenuMaintainence = (req, res) => {
const id = req.params.id
pool.query(
`DELETE FROM sec_menu_det WHERE menu_item_id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
return res.json({
success: 1,
data: "user deleted succesfully",
})
}
)
}
// Controller for Sub Menu maintainence
const getUsersSubMenuMaintainence = (req, res) => { }
// by rajeev
// const getUsersByIdSubMenuMaintainence = (req, res) => {
// const id = req.params.id
// pool.query(
// `SELECT * FROM sec_menu_det WHERE menu_id = ? ORDER BY item_seq ASC`,
// [id],
// (error, results, fields) => {
// if (error) {
// console.log(error)
// return res.json({
// success: 0,
// message: "Table is empty",
// })
// }
// if (!results) {
// return res.json({
// success: 0,
// message: "Record not found",
// })
// }
// // console.log(results)
// return res.status(200).json(results)
// }
// )
// }
// by Gk
const getUsersByIdSubMenuMaintainence = (req, res) => {
const id = req.params.id;
pool.query(
`SELECT * FROM sec_menu_det WHERE menu_id = ? ORDER BY item_seq ASC`,
[id],
(error, results) => {
if (error) {
console.log(error);
return res.json({
success: 0,
message: "Table is empty",
});
}
if (!results || results.length === 0) {
return res.json({
success: 0,
message: "Record not found",
});
}
// Map the results to the desired format
const formattedResults = results.map((item) => {
return {
createdAt: new Date(item.created_at).getTime(),
updatedAt: new Date(item.updated_at).getTime(),
menuItemId: item.menu_item_id,
itemSeq: item.item_seq,
menuItemDesc: item.menu_item_desc,
status: item.status,
menuId: item.menu_id,
moduleName: item.module_name,
main_menu_action_name: item.main_menu_action_name,
main_menu_icon_name: item.main_menu_icon_name,
subMenus: [], // Empty array as required
};
});
return res.status(200).json(formattedResults);
}
);
};
const updateUsersSubMenuMaintainence = (req, res) => { }
const createUsersSubMenuMaintainence = (req, res) => { }
const deleteUsersSubMenuMaintainence = (req, res) => { }
// Controller for MENU ACCESS CONTROL
const getUsersMenuAccessControl = (req, res) => {
pool.query(
`SELECT * FROM sec_grp_menu_access`,
[],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
}
)
}
const getUsersByMenuAccessControl = (req, res) => { }
const createUsersMenuAccessControl = async (req, res) => {
const { id } = req.params
const sql = `SELECT * FROM sec_menu_det WHERE menu_item_id = ?`
const values = [id]
try {
const [record] = await executeQuery(sql, values)
if (!record) {
return res.status(404).json({ message: "Record not found" })
}
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
const sqlIn = `INSERT INTO sec_grp_menu_access SET menu_item_id = ?, usr_grp = 41, created_at = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ?, menu_item_desc = ?, module_name = ?, status = ?, item_seq = ?, updated_at = ?, isdisable = 'true', m_create = 'true', m_delete = 'true', m_edit = 'true' , m_query = 'true', m_visible = 'true'`
const valuesIn = [
record.menu_item_id,
record.created_at,
record.main_menu_action_name,
record.main_menu_icon_name,
record.menu_id,
record.menu_item_desc,
record.module_name,
record.status,
record.item_seq,
dateTime,
]
try {
const [recordIn] = await executeQuery(sqlIn, valuesIn)
} catch (errorIn) {
console.error("inside", errorIn)
}
} catch (error) {
console.error(error)
res.status(500).json({ message: "error fetching record Outside" })
}
return res.json({
success: 1,
data: "created succesfully",
})
}
// Controller for User maintenance
const getUserMaintainence = (req, res) => {
pool.query(`SELECT * FROM sec_users`, [], (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
})
}
const getByIdUserMaintainence = (req, res) => {
const { id } = req.params
pool.query(
`SELECT * FROM sec_users WHERE user_id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
}
)
}
const getLoggedInUser = async (req, res) => {
const user = req.user
res.json(user)
}
const updateUserMaintainence = async (req, res) => {
try {
const updatedFields = {
full_name: req.body.fullName || null,
pronounce: req.body.pronounce || null,
// role: req.body.role || null,
// department: req.body.department || null,
about: req.body.about || null,
email: req.body.email || null, // Add email field
// Add other fields to update as needed
}
// console.log(updatedFields)
const user = req.user // Assuming req.user contains the user details, adjust accordingly
// Filter out fields with null values
const filteredFields = Object.fromEntries(
Object.entries(updatedFields).filter(([_, value]) => value !== null)
)
// If no fields are provided for update, return a response
if (Object.keys(filteredFields).length === 0) {
return res.json({ success: 1, message: "No fields to update" })
}
// Construct the SQL query dynamically based on the provided filteredFields
const updateFieldsSql = Object.keys(filteredFields)
.map((key) => `${key} = ?`)
.join(", ")
// Add the user_id to the filteredFields
filteredFields.user_id = user.user_id
// Construct the parameters array for the query
const queryParams = Object.values(filteredFields)
// Update the specified non-null fields, including the updateDate, in sec_users
await executeQuery(
`UPDATE sec_users SET ${updateFieldsSql} WHERE user_id = ?`,
queryParams
)
res.json({ success: 1, message: "User profile updated successfully" })
} catch (error) {
console.error(error)
res.status(500).json({ success: 0, message: "Internal Server Error" })
}
}
const uploadPath = path.join(process.cwd(), "uploaded-picture")
// Create the 'uploaded-picture' directory if it doesn't exist
if (!fs.existsSync(uploadPath)) {
fs.mkdirSync(uploadPath)
}
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, uploadPath)
},
filename: (req, file, cb) => {
const userId = req.user.user_id
const ext = path.extname(file.originalname)
const fileName = `profile-pic-${userId}-${uuidv4()}${ext}`
cb(null, fileName)
},
})
const upload = multer({ storage: storage })
const uploadProfilePhoto = (req, res) => {
try {
const userId = req.user.user_id
const usernameFolder = req.user.user_name
const userFolderPath = path.join(
process.cwd(),
"uploaded-picture",
usernameFolder
)
if (!fs.existsSync(userFolderPath)) {
fs.mkdirSync(userFolderPath)
}
const currentDate = new Date()
.toISOString()
.replace(/:/g, "-")
.substring(0, 19)
const fileNewName = `profile-pic-${userId}-${currentDate}.png`
const destinationPath = path.join(
userFolderPath,
fileNewName.replace(/ /g, "_")
)
const updateQuery = "UPDATE sec_users SET photo_name = ? WHERE user_id = ?"
pool.query(updateQuery, [fileNewName, userId], (error, results) => {
if (error) {
console.error(error)
return res
.status(500)
.json({ success: false, message: "Internal Server Error" })
}
// Use req.file.path to get the temporary path of the uploaded file
// console.log(req)
// console.log("Request body:", req.body) // Log the entire request body
// console.log("Request file:", req.file.path) // Log the uploaded file information
// fs.renameSync(req.file.path, destinationPath)
fs.writeFileSync(destinationPath, req.file.buffer)
res.json({
success: true,
message: "Profile picture uploaded successfully",
})
})
} catch (error) {
console.error(error)
res.status(500).json({ success: false, message: "Internal Server Error" })
}
}
const retrieveProfilePhoto = async (req, res) => {
try {
const userId = req.user.user_id.toString()
const usernameFolder = req.user.user_name
// Retrieve the file name from the database
const selectQuery = "SELECT photo_name FROM sec_users WHERE user_id = ?"
const [results] = await executeQuery(selectQuery, [userId])
// console.log(results)
if (results.length === 0 || !results.photo_name) {
return res.status(404).json({
success: false,
message: "Profile picture not found. First try uploading one...!!",
})
}
const fileName = results.photo_name
const filePath = path.join(
process.cwd(),
"uploaded-picture",
usernameFolder,
fileName
)
const imageBuffer = await readFileAsync(filePath)
// Convert the image buffer to a base64-encoded string
const encodeBase64 = imageBuffer.toString("base64")
const ext = path.extname(filePath).substring(1)
// Construct the data URL
const dataURL = `data:image/${ext};base64,${encodeBase64}`
// Send the data URL as a JSON response
res.json({
success: true,
message: "Profile picture retrieved successfully",
image: dataURL,
})
} catch (error) {
console.error(error)
res.status(500).json({ success: false, message: "Internal Server Error" })
}
}
const createUserMaintainence = (req, res) => {
const body = req.body
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
pool.query(
`INSERT sec_users SET user_id = ?, change_passw = ?, email = ?, full_name = ?, is_blocked = ?, mob_no = ?, user_passw = ?, user_name = ?, usr_grp_id = ?, account_id = ?, usr_grp = ?, createdate = ?`,
[
body.user_id,
body.is_complete,
body.change_passw,
body.email,
body.full_name,
body.is_blocked,
body.mob_no,
body.user_passw,
body.user_name,
body.usr_grp_id,
body.account_id,
body.usr_grp,
dateTime,
],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
if (!results) {
return res.json({
success: 0,
message: "Failed to create user",
})
}
return res.json({
success: 1,
data: "created succesfully",
})
}
)
}
const deleteUserMaintainence = (req, res) => {
const id = req.params.id
pool.query(
`DELETE FROM sec_menu_det WHERE menu_item_id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
return res.json({
success: 1,
data: "user deleted succesfully",
})
}
)
}
// By Rajeev
// const loadMenuByUser = async (req, res) => {
// try {
// // Simulate getting the logged-in user's group (usrGrp)
// const usrgrp = req.user.usr_grp // Replace this with your actual logic to get the user's group
// // Find root menu items where menu_id is 0
// let sql = `SELECT * FROM sec_grp_menu_access WHERE menu_id = 0 AND status= 'Enable' AND usr_grp = ${usrgrp} ORDER BY item_seq`
// const root = await executeQuery(sql)
// const renameFields = (obj) => {
// const newObj = {}
// for (const key in obj) {
// switch (key) {
// case "usr_grp":
// newObj["usrGrp"] = obj[key]
// break
// case "menu_item_id":
// newObj["menuItemId"] = obj[key]
// break
// case "item_seq":
// newObj["itemSec"] = obj[key]
// break
// case "menu_id":
// newObj["menuId"] = obj[key]
// break
// case "menu_item_desc":
// newObj["menuItemDesc"] = obj[key]
// break
// case "m_create":
// newObj["mcreate"] = obj[key]
// break
// case "m_delete":
// newObj["mdelete"] = obj[key]
// break
// case "m_edit":
// newObj["medit"] = obj[key]
// break
// case "m_query":
// newObj["mquery"] = obj[key]
// break
// case "m_visible":
// newObj["mvisible"] = obj[key]
// break
// default:
// newObj[key] = obj[key]
// }
// }
// return newObj
// }
// const renameSubmenuFields = (submenu) => {
// const newSubmenu = {}
// for (const key in submenu) {
// switch (key) {
// case "usr_grp":
// newSubmenu["usrGrp"] = submenu[key]
// break
// case "menu_item_id":
// newSubmenu["menuItemId"] = submenu[key]
// break
// case "item_seq":
// newSubmenu["itemSec"] = submenu[key]
// break
// case "menu_id":
// newSubmenu["menuId"] = submenu[key]
// break
// case "menu_item_desc":
// newSubmenu["menuItemDesc"] = submenu[key]
// break
// case "m_create":
// newSubmenu["mcreate"] = submenu[key]
// break
// case "m_delete":
// newSubmenu["mdelete"] = submenu[key]
// break
// case "m_edit":
// newSubmenu["medit"] = submenu[key]
// break
// case "m_query":
// newSubmenu["mquery"] = submenu[key]
// break
// case "m_visible":
// newSubmenu["mvisible"] = submenu[key]
// break
// default:
// newSubmenu[key] = submenu[key]
// }
// }
// return newSubmenu
// }
// // for (let i = 0; i < root.length; i++) {
// // const rootMenuItem = root[i]
// // // Find menu items by menu_id (rootMenuItemId) and usrGrp
// // let sql1 = `SELECT * FROM sec_grp_menu_access a WHERE a.usr_grp =${usrgrp} and a.menu_item_id=${rootMenuItem.menu_item_id}`
// // const menu = await executeQuery(sql1)
// for (const menuItem of root) {
// // Find all submenu items with status
// let sql2 = `SELECT * FROM sec_grp_menu_access a where a.status= 'Enable' and a.menu_id=${menuItem.menu_item_id} and a.usr_grp =${usrgrp} ORDER BY item_seq`
// const allSubmenu = await executeQuery(sql2)
// for (const subMenus of allSubmenu) {
// let sqlNew = `SELECT * FROM sec_user_group where usr_grp=${usrgrp}`
// const sqlNewResult = await executeQuery(sqlNew)
// let sqlMenuItemId = `SELECT * FROM sec_menu_det where menu_item_id=${menuItem.menu_item_id}`
// const sqlMenuItemIdResult = await executeQuery(sqlMenuItemId)
// subMenus.usrGrp = sqlNewResult[0]
// subMenus.menuItemId = sqlMenuItemIdResult[0]
// }
// let sqlNew = `SELECT * FROM sec_user_group where usr_grp=${usrgrp}`
// const sqlNewResult = await executeQuery(sqlNew)
// let sqlMenuItemId = `SELECT * FROM sec_menu_det where menu_item_id=${menuItem.menu_item_id}`
// const sqlMenuItemIdResult = await executeQuery(sqlMenuItemId)
// menuItem.subMenus = allSubmenu.map(renameSubmenuFields)
// menuItem.usrGrp = sqlNewResult[0]
// // updatedUsrGrp = menuItem.usrGrp
// // menuItem.usrGrp = updatedUsrGrp.map(renameSubmenuFields)
// menuItem.menuItemId = sqlMenuItemIdResult[0]
// }
// // rootMenuItem.subMenus = menu
// // }
// for (let i = 0; i < root.length; i++) {
// const rootMenuItem = root[i]
// root[i] = renameFields(rootMenuItem)
// }
// res.status(200).json(root)
// console.log(root);
// } catch (error) {
// console.error(error)
// res.status(500).json({ message: "Internal server error" })
// }
// }
// By Gk
const loadMenuByUser = async (req, res) => {
try {
const usrgrp = req.user.usr_grp; // Get the logged-in user's group
// Batch query to fetch root menu items along with the necessary details
const rootQuery = `
SELECT
a.*,
b.group_name,
c.menu_item_desc AS menu_item_desc_det,
c.main_menu_icon_name,
c.main_menu_action_name
FROM
sec_grp_menu_access a
LEFT JOIN
sec_user_group b ON a.usr_grp = b.usr_grp
LEFT JOIN
sec_menu_det c ON a.menu_item_id = c.menu_item_id
WHERE
a.menu_id = 0 AND a.status = 'Enable' AND a.usr_grp = ?
ORDER BY
a.item_seq;
`;
const root = await executeQuery(rootQuery, [usrgrp]);
// Prepare a map of root menu items to fetch submenus in a single query
const menuItemIds = root.map(item => item.menu_item_id);
if (menuItemIds.length > 0) {
const submenuQuery = `
SELECT
a.*,
b.group_name,
c.menu_item_desc AS menu_item_desc_det,
c.main_menu_icon_name,
c.main_menu_action_name
FROM
sec_grp_menu_access a
LEFT JOIN
sec_user_group b ON a.usr_grp = b.usr_grp
LEFT JOIN
sec_menu_det c ON a.menu_item_id = c.menu_item_id
WHERE
a.status = 'Enable'
AND a.menu_id IN (${menuItemIds.join(',')})
AND a.usr_grp = ?
ORDER BY
a.item_seq;
`;
const submenus = await executeQuery(submenuQuery, [usrgrp]);
// Organize submenus under their respective root menu items
const submenuMap = {};
submenus.forEach(submenu => {
if (!submenuMap[submenu.menu_id]) {
submenuMap[submenu.menu_id] = [];
}
submenuMap[submenu.menu_id].push(renameSubmenuFields(submenu));
});
// Assign submenus to their corresponding root menu items
root.forEach(item => {
item.subMenus = submenuMap[item.menu_item_id] || [];
});
} else {
// If no root items, set subMenus to empty arrays
root.forEach(item => {
item.subMenus = [];
});
}
// Rename fields for root menu items
const formattedRoot = root.map(renameFields);
res.status(200).json(formattedRoot);
console.log(formattedRoot);
} catch (error) {
console.error(error);
res.status(500).json({ message: "Internal server error" });
}
};
const renameFields = (obj) => {
return {
usrGrp: obj.usr_grp,
menuItemId: obj.menu_item_id,
itemSec: obj.item_seq,
menuId: obj.menu_id,
menuItemDesc: obj.menu_item_desc,
mcreate: obj.m_create,
mdelete: obj.m_delete,
medit: obj.m_edit,
mquery: obj.m_query,
mvisible: obj.m_visible,
main_menu_action_name: obj.main_menu_action_name,
main_menu_icon_name: obj.main_menu_icon_name, // Include the main_menu_icon_name
subMenus: obj.subMenus || []
};
};
const renameSubmenuFields = (submenu) => {
return {
usrGrp: submenu.usr_grp,
menuItemId: submenu.menu_item_id,
itemSec: submenu.item_seq,
menuId: submenu.menu_id,
menuItemDesc: submenu.menu_item_desc,
mcreate: submenu.m_create,
mdelete: submenu.m_delete,
medit: submenu.m_edit,
mquery: submenu.m_query,
mvisible: submenu.m_visible,
main_menu_action_name: submenu.main_menu_action_name,
main_menu_icon_name: submenu.main_menu_icon_name // Include the main_menu_icon_name
};
};
// Report
const createReport = async (req, res) => {
const body = req.body
try {
const params = [body.reportName,
body.description,
body.active,
body.isSql
]
// Replace undefined with null in parameters
const sanitizedParams = params.map((param) =>
param !== undefined ? param : null
)
await executeQuery(
`
INSERT INTO rpt_builder2_t (report_name, description, active,is_sql)
VALUES (?, ?, ?,?);
`,
sanitizedParams
);
return res.json({
success: 1,
content: "Report created successfully",
})
} catch (error) {
console.error(error)
return res.status(500).json({
success: 0,
message: "Error creating report",
error: error.message,
})
}
}
const getAllReportBuilder = async (req, res) => {
pool.query(
`SELECT
r.id as reportId,
r.report_name as reportName,
r.description,
r.active,
l.id as lineId,
l.header_id,
l.model
FROM rpt_builder2_t r
LEFT JOIN rpt_builder2_lines_t l ON r.id = l.rpt_builder2_t_id`,
[],
(error, results, fields) => {
if (error) {
console.error("Error executing SQL query:", error)
return res.status(500).json({
success: 0,
message: "Internal Server Error",
})
}
if (results.length === 0) {
return res.json({
success: 0,
message: "No data found",
})
}
// console.log("Data retrieved successfully:", results)
// Group results by report ID
const groupedResults = results.reduce((acc, result) => {
const existingReport = acc.find((item) => item.id === result.reportId)
if (existingReport) {
existingReport.rpt_builder2_lines.push({
id: result.lineId,
header_id: result.header_id,
model: result.model,
})
} else {
acc.push({
id: result.reportId,
reportName: result.reportName,
description: result.description,
active: result.active,
rpt_builder2_lines: [
{
id: result.lineId,
header_id: result.header_id,
model: result.model,
},
],
})
}
return acc
}, [])
return res.status(200).json(groupedResults)
}
)
}
const getAllReportBuilderById = async (req, res) => {
const id = req.params.id
pool.query(
`SELECT
r.id as reportId,
r.report_name as reportName,
r.description,
r.active,
l.id as lineId,
l.header_id,
l.model
FROM rpt_builder2_t r
LEFT JOIN rpt_builder2_lines_t l ON r.id = l.rpt_builder2_t_id
WHERE r.id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.error("Error executing SQL query:", error)
return res.status(500).json({
success: 0,
message: "Internal Server Error",
})
}
if (results.length === 0) {
return res.status(404).json({
success: 0,
message: "No data found for the given ID",
})
}
// Group results by report ID
const groupedResults = results.reduce((acc, result) => {
const existingReport = acc.find((item) => item.id === result.reportId)
if (existingReport) {
existingReport.rpt_builder2_lines.push({
id: result.lineId,
header_id: result.header_id,
model: result.model,
})
} else {
acc.push({
id: result.reportId,
reportName: result.reportName,
description: result.description,
active: result.active,
rpt_builder2_lines: [
{
id: result.lineId,
header_id: result.header_id,
model: result.model,
},
],
})
}
return acc
}, [])
return res.status(200).json(groupedResults)
}
)
}
const getAllReportBuilderByQuery = async (req, res) => {
const query = req.params.query
// console.log(query);
pool.query(query, (error, results, fields) => {
if (error) {
console.log(error)
return res.status(500).json({
success: 0,
message: "Error fetching data from the database",
})
}
if (results.length === 0) {
return res.status(404).json({
success: 0,
message: "No data found",
})
}
return res.status(200).json(results)
})
}
const updateReportBuilder = async (req, res) => {
const id = req.params.id
const body = req.body
pool.query(
`UPDATE rpt_builder2_t SET
report_name = ?,
description = ?,
active = ?,
is_sql = ?
WHERE id = ?`,
[body.report_name, body.description, body.active, body.is_sql, id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.status(500).json({
success: 0,
message: "Error updating record in the database",
})
}
if (results.affectedRows === 0) {
return res.status(404).json({
success: 0,
message: "Record not found",
})
}
return res.status(200).json({
success: 1,
message: "Record updated successfully",
})
}
)
}
const deleteReportBuilder = async (req, res) => {
const id = req.params.id
pool.query(
`DELETE FROM rpt_builder2_t WHERE id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.status(500).json({
success: 0,
message: "Error deleting record from the database",
})
}
if (results.affectedRows === 0) {
return res.status(404).json({
success: 0,
message: "Record not found",
})
}
return res.status(200).json({
success: 1,
message: "Record deleted successfully",
})
}
)
}
// Report Line
const getReportLine = async (req, res) => {
pool.query(
`SELECT * FROM rpt_builder2_lines_t `,
[],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
}
)
}
const getReportLineById = async (req, res) => {
const id = req.params.id
pool.query(
`SELECT * FROM rpt_builder2_lines_t WHERE rpt_builder2_t_id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
}
)
}
const updateReportLine = async (req, res) => {
const id = req.params.id
const body = req.body
pool.query(
`UPDATE rpt_builder2_lines_t SET header_id = ?, model = ? WHERE rpt_builder2_t_id = ?`,
[body.header_id, body.model, id],
(error, results, fields) => {
if (error) {
console.log(error)
}
if (!results) {
return res.status(400).json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json({
success: 1,
message: "Record updated succesfully",
})
}
)
}
// Dashboard
const getAllDashboard = async (req, res) => {
pool.query(
`SELECT
h.id,
h.account_id,
h.created_at AS createdAt,
h.created_by AS createdBy,
h.updated_at AS updatedAt,
h.updated_by AS updatedBy,
CAST(h.is_build AS UNSIGNED) AS build,
CAST(h.testing AS UNSIGNED) AS testing,
h.dashboard_name,
h.module_id,
h.description,
h.menu_name,
h.object_type,
h.secuirity_profile,
h.sub_object_type,
h.tech_stack,
h.is_updated,
l.id AS lineId,
l.created_at AS lineCreatedAt,
l.created_by AS lineCreatedBy,
l.updated_at AS lineUpdatedAt,
l.updated_by AS lineUpdatedBy,
l.account_id AS lineAccountId,
l.header_id,
l.model
FROM dashbord_header h
LEFT JOIN dashbord1_line l ON h.id = l.dashbord_header_id
`,
async (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Error fetching data from the database",
})
}
// If there are no results, return an empty array
if (results.length === 0) {
return res.status(200).json([])
}
// Organize the data into the desired structure
const dashboards = results.map((dashboardHeader) => {
return {
createdAt: dashboardHeader.createdAt,
createdBy: dashboardHeader.createdBy,
updatedBy: dashboardHeader.updatedBy,
updatedAt: dashboardHeader.updatedAt,
accountId: dashboardHeader.account_id,
id: dashboardHeader.id,
menuName: dashboardHeader.menu_name,
updated: dashboardHeader.is_updated === 1,
techStack: dashboardHeader.tech_stack,
object_type: dashboardHeader.object_type,
sub_object_type: dashboardHeader.sub_object_type,
build: !!dashboardHeader.build, // Convert to boolean
testing: !!dashboardHeader.testing, // Convert to boolean
dashboard_name: dashboardHeader.dashboard_name,
module_id: dashboardHeader.module_id,
description: dashboardHeader.description,
secuirity_profile: dashboardHeader.secuirity_profile,
dashbord1_Line: dashboardHeader.lineId
? [
{
createdAt: dashboardHeader.lineCreatedAt,
createdBy: dashboardHeader.lineCreatedBy,
updatedBy: dashboardHeader.lineUpdatedBy,
updatedAt: dashboardHeader.lineUpdatedAt,
accountId: dashboardHeader.lineAccountId,
id: dashboardHeader.lineId,
header_id: dashboardHeader.header_id,
model: dashboardHeader.model, // Parse the JSON model
},
]
: [],
}
})
return res.status(200).json(dashboards)
}
)
}
const getDashboardByModuleId = async (req, res) => {
const module_id = req.query.module_id
pool.query(
`SELECT
h.id,
h.account_id,
h.created_at AS createdAt,
h.created_by AS createdBy,
h.updated_at AS updatedAt,
h.updated_by AS updatedBy,
CAST(h.is_build AS UNSIGNED) AS build,
CAST(h.testing AS UNSIGNED) AS testing,
h.dashboard_name,
h.module_id,
h.description,
h.menu_name,
h.object_type,
h.secuirity_profile,
h.sub_object_type,
h.tech_stack,
h.is_updated,
l.id AS lineId,
l.created_at AS lineCreatedAt,
l.created_by AS lineCreatedBy,
l.updated_at AS lineUpdatedAt,
l.updated_by AS lineUpdatedBy,
l.account_id AS lineAccountId,
l.header_id,
l.model
FROM dashbord_header h
LEFT JOIN dashbord1_line l ON h.id = l.dashbord_header_id
WHERE h.module_id = ?`,
[module_id],
async (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Error fetching data from the database",
})
}
// If there are no results, return an empty array
if (results.length === 0) {
return res.status(200).json([])
}
// Organize the data into the desired structure
const dashboards = results.map((dashboardHeader) => {
return {
createdAt: dashboardHeader.createdAt,
createdBy: dashboardHeader.createdBy,
updatedBy: dashboardHeader.updatedBy,
updatedAt: dashboardHeader.updatedAt,
accountId: dashboardHeader.account_id,
id: dashboardHeader.id,
menuName: dashboardHeader.menu_name,
updated: dashboardHeader.is_updated === 1,
techStack: dashboardHeader.tech_stack,
object_type: dashboardHeader.object_type,
sub_object_type: dashboardHeader.sub_object_type,
build: !!dashboardHeader.build, // Convert to boolean
testing: !!dashboardHeader.testing, // Convert to boolean
dashboard_name: dashboardHeader.dashboard_name,
module_id: dashboardHeader.module_id,
description: dashboardHeader.description,
secuirity_profile: dashboardHeader.secuirity_profile,
dashbord1_Line: dashboardHeader.lineId
? [
{
createdAt: dashboardHeader.lineCreatedAt,
createdBy: dashboardHeader.lineCreatedBy,
updatedBy: dashboardHeader.lineUpdatedBy,
updatedAt: dashboardHeader.lineUpdatedAt,
accountId: dashboardHeader.lineAccountId,
id: dashboardHeader.lineId,
header_id: dashboardHeader.header_id,
model: dashboardHeader.model, // Parse the JSON model
},
]
: [],
}
})
return res.status(200).json(dashboards)
}
)
}
const getAllDashboardHeaderById = async (req, res) => {
const dashboardId = req.params.id
const moduleId = req.query.module_id
pool.query(
`SELECT
h.id,
h.account_id,
h.created_at AS createdAt,
h.created_by AS createdBy,
h.updated_at AS updatedAt,
h.updated_by AS updatedBy,
CAST(h.is_build AS UNSIGNED) AS build,
CAST(h.testing AS UNSIGNED) AS testing,
h.dashboard_name,
h.module_id,
h.description,
h.menu_name,
h.object_type,
h.secuirity_profile,
h.sub_object_type,
h.tech_stack,
h.is_updated,
l.id AS lineId,
l.created_at AS lineCreatedAt,
l.created_by AS lineCreatedBy,
l.updated_at AS lineUpdatedAt,
l.updated_by AS lineUpdatedBy,
l.account_id AS lineAccountId,
l.header_id,
l.model
FROM dashbord_header h
LEFT JOIN dashbord1_line l ON h.id = l.dashbord_header_id
WHERE h.id = ?`,
[dashboardId],
async (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Error fetching data from the database",
})
}
// If there are no results, return a 404 response
if (results.length === 0) {
return res.status(404).json({
success: 0,
message: "No data found for the given ID and module ID",
})
}
// Organize the data into the desired structure
const dashboardHeader = results[0] // Assuming there's only one record
const dashboard = {
createdAt: dashboardHeader.createdAt,
createdBy: dashboardHeader.createdBy,
updatedBy: dashboardHeader.updatedBy,
updatedAt: dashboardHeader.updatedAt,
accountId: dashboardHeader.account_id,
id: dashboardHeader.id,
menuName: dashboardHeader.menu_name,
updated: dashboardHeader.is_updated === 1,
techStack: dashboardHeader.tech_stack,
object_type: dashboardHeader.object_type,
sub_object_type: dashboardHeader.sub_object_type,
build: !!dashboardHeader.build, // Convert to boolean
testing: !!dashboardHeader.testing, // Convert to boolean
dashboard_name: dashboardHeader.dashboard_name,
module_id: dashboardHeader.module_id,
description: dashboardHeader.description,
secuirity_profile: dashboardHeader.secuirity_profile,
dashbord1_Line: dashboardHeader.lineId
? [
{
createdAt: dashboardHeader.lineCreatedAt,
createdBy: dashboardHeader.lineCreatedBy,
updatedBy: dashboardHeader.lineUpdatedBy,
updatedAt: dashboardHeader.lineUpdatedAt,
accountId: dashboardHeader.lineAccountId,
id: dashboardHeader.lineId,
header_id: dashboardHeader.header_id,
model: dashboardHeader.model, // Parse the JSON model
},
]
: [],
}
return res.status(200).json(dashboard)
}
)
}
const createDashboard = (req, res) => {
const body = req.body
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
// Insert into dashbord_header
pool.query(
`INSERT dashbord_header SET
created_at = ?,
updated_at = ?,
is_build = ?,
dashboard_name = ?,
description = ?,
menu_name = ?,
module_id = ?,
secuirity_profile = ?,
tech_stack = ?,
is_updated = ?,
object_type = ?,
sub_object_type = ?,
testing = ?`,
[
dateTime,
dateTime,
body.is_build || null,
body.dashboard_name || null,
body.description || null,
body.menu_name || null,
body.module_id || 0, // Provide a default value for module_id
body.secuirity_profile || null,
body.tech_stack || null,
body.is_updated || null,
body.object_type || null,
body.sub_object_type || null,
body.testing || false,
],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Failed to create dashboard",
})
}
if (!results.insertId) {
return res.json({
success: 0,
message: "Failed to create dashboard",
})
}
const dashboardId = results.insertId
// Insert into dashbord1_line
pool.query(
`INSERT dashbord1_line SET
created_at = ?,
updated_at = ?,
model = ?,
header_id = ?,
dashbord_header_id = ?`,
[
dateTime,
dateTime,
body.model || null, // Assuming you have 'model' in your request body
body.header_id || null, // Assuming you have 'header_id' in your request body
dashboardId,
],
(lineError, lineResults, lineFields) => {
if (lineError) {
console.log(lineError)
// Handle error, you might want to rollback the dashboard_header insertion
return res.json({
success: 0,
message: "Failed to create dashboard and line",
})
}
return res.json({
success: 1,
data: "created successfully",
})
}
)
}
)
}
const updateDashboard = (req, res) => {
const { id } = req.params
const body = req.body
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
pool.query(
`UPDATE dashbord_header SET
updated_at = ?,
is_build = ?,
dashboard_name = ?,
description = ?,
menu_name = ?,
module_id = ?,
secuirity_profile = ?,
tech_stack = ?,
is_updated = ?,
object_type = ?,
sub_object_type = ?,
testing = ?
WHERE id = ?`,
[
dateTime,
body.is_build || null,
body.dashboard_name || null,
body.description || null,
body.menu_name || null,
body.module_id || null,
body.secuirity_profile || null,
body.tech_stack || null,
body.is_updated || null,
body.object_type || null,
body.sub_object_type || null,
body.testing || null,
id,
],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Failed to update dashboard",
})
}
if (results.affectedRows === 0) {
return res.json({
success: 0,
message: "No records found for the given ID",
})
}
return res.json({
success: 1,
data: "updated successfully",
})
}
)
}
const deleteDashboard = async (req, res) => {
const id = req.params.id
pool.query(
`DELETE FROM dashbord_header WHERE id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
return res.json({
success: 1,
data: "Deleted succesfully",
})
}
)
}
//// Dashboard Line
const getDashboardLine = async (req, res) => {
const id = req.params.id
pool.query(`SELECT * FROM dashbord1_line`, [id], (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
})
}
const getDashboardLineById = async (req, res) => {
const id = req.params.id
pool.query(
`SELECT * FROM dashbord1_line WHERE id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
}
)
}
const updateDashboardLineById = async (req, res) => {
const id = req.params.id
const body = req.body
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
pool.query(
`UPDATE dashbord1_line SET updated_at = ?, created_by = ?, updated_by = ?, model = ? WHERE id = ${id}`,
[dateTime, body.created_by, body.updated_by, body.model, id],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
if (!results) {
return res.json({
success: 0,
message: "Failed to update dashboard",
})
}
return res.json({
success: 1,
data: "Updated succesfully",
})
}
)
}
//// System Parameter
const getSystemParameter = async (req, res) => {
pool.query(`SELECT * FROM system_paramaters`, (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
})
}
const getSystemParameterById = async (req, res) => {
var id = req.params.id
if (id == null) {
id = 1
}
pool.query(
`SELECT * FROM system_paramaters WHERE id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
}
)
}
const createSystemParameter = async (req, res) => {
const body = req.body
pool.query(
`INSERT system_paramaters SET edi_mae_scheduler_onoff = ?, edi_scheduler_onoff = ?, base_price_list = ?, billing_department_code = ?, cn_billing_frequency = ?, default_department = ?, default_position = ?, first_dayof_the_week = ?, hour_per_shift = ?, lease_tax_code = ?, link_to_display = ?, lov_link_to_display = ?, lov_row_to_display = ?, noncontainer_serviceorder_auto_appdepcode = ?, oid_admin_user = ?, oid_base = ?, oid_server_port = ?, oid_server_name = ?, row_to_add = ?, row_to_display = ?, scheduler_time = ?, single_charge = ?, user_default_group = ?, vessel_conf_processlimit = ?, company_display_name = ?, upload_logo = ?, upload_logo_name = ?, upload_logo_path = ?`,
[
body.edi_mae_scheduler_onoff,
body.edi_scheduler_onoff,
body.base_price_list,
body.billing_department_code,
body.cn_billing_frequency,
body.default_department,
body.default_position,
body.first_dayof_the_week,
body.hour_per_shift,
body.lease_tax_code,
body.link_to_display,
body.lov_link_to_display,
body.lov_row_to_display,
body.noncontainer_serviceorder_auto_appdepcode,
body.oid_admin_user,
body.oid_base,
body.oid_server_port,
body.oid_server_name,
body.row_to_add,
body.row_to_display,
body.scheduler_time,
body.single_charge,
body.user_default_group,
body.vessel_conf_processlimit,
body.company_display_name,
body.upload_logo,
body.upload_logo_name,
body.upload_logo_path,
],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
if (!results) {
return res.json({
success: 0,
message: "Failed to create dashboard",
})
}
return res.json({
success: 1,
data: "created succesfully",
})
}
)
}
const updateSystemParameter = async (req, res) => {
const id = req.params.id
const body = req.body
pool.query(
`UPDATE system_paramaters SET edi_mae_scheduler_onoff = ?, edi_scheduler_onoff = ?, base_price_list = ?, billing_department_code = ?, cn_billing_frequency = ?, default_department = ?, default_position = ?, first_dayof_the_week = ?, hour_per_shift = ?, lease_tax_code = ?, link_to_display = ?, lov_link_to_display = ?, lov_row_to_display = ?, noncontainer_serviceorder_auto_appdepcode = ?, oid_admin_user = ?, oid_base = ?, oid_server_port = ?, oid_server_name = ?, row_to_add = ?, row_to_display = ?, scheduler_time = ?, single_charge = ?, user_default_group = ?, vessel_conf_processlimit = ?, company_display_name = ?, upload_logo = ?, upload_logo_name = ?, upload_logo_path = ? where id = ${id}`,
[
body.edi_mae_scheduler_onoff,
body.edi_scheduler_onoff,
body.base_price_list,
body.billing_department_code,
body.cn_billing_frequency,
body.default_department,
body.default_position,
body.first_dayof_the_week,
body.hour_per_shift,
body.lease_tax_code,
body.link_to_display,
body.lov_link_to_display,
body.lov_row_to_display,
body.noncontainer_serviceorder_auto_appdepcode,
body.oid_admin_user,
body.oid_base,
body.oid_server_port,
body.oid_server_name,
body.row_to_add,
body.row_to_display,
body.scheduler_time,
body.single_charge,
body.user_default_group,
body.vessel_conf_processlimit,
body.company_display_name,
body.upload_logo,
body.upload_logo_name,
body.upload_logo_path,
],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
if (!results) {
return res.json({
success: 0,
message: "Failed to update Parameter",
})
}
return res.json({
success: 1,
data: "Updated succesfully",
})
}
)
}
const deleteSystemParameter = async (req, res) => {
const id = req.params.id
pool.query(
`DELETE FROM system_paramaters WHERE id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
return res.json({
success: 1,
data: "Deleted succesfully",
})
}
)
}
// const test = async (req, res) => {
// try {
// // Simulate getting the logged-in user's group (usrGrp)
// const usrgrp = 1 // Replace this with your actual logic to get the user's group
// // Find root menu items where menu_id is 0
// let sql = `SELECT * FROM sec_grp_menu_access WHERE menu_id = 0 AND status= 'Enable' AND usr_grp = ${usrgrp} ORDER BY item_seq`
// const root = await executeQuery(sql)
// for (let i = 0; i < root.length; i++) {
// const rootMenuItemId = root[i]
// // Find menu items by menu_id (rootMenuItemId) and usrGrp
// let sql1 = `SELECT * FROM sec_grp_menu_access a WHERE a.usr_grp = ${usrgrp} and a.menu_item_id= ${rootMenuItemId.menu_item_id}`
// const menu = await executeQuery(sql1)
// for (const menuItem of menu) {
// // Find all submenu items with status
// let sql2 = `SELECT * FROM sec_grp_menu_access a where a.status= 'Enable' and a.menu_id=${menuItem.menu_item_id} and a.usr_grp =${usrgrp} ORDER BY item_seq`
// const allSubmenu = await executeQuery(sql2)
// menuItem.subMenus = allSubmenu
// }
// }
// res.status(200).json(root)
// } catch (error) {
// console.error(error)
// res.status(500).json({ message: "Internal server error" })
// }
// }
const getLogs = (req, res) => {
const { userName } = req.params // Adjust this to your specific user identification method
// Define the directory where the user's logs are stored
const logDir = path.join(__dirname, "../logs", userName)
try {
// Read log files in the user's directory
const logFiles = fs.readdirSync(logDir)
// Read the content of each log file
const logs = logFiles.map((file) => {
const logFilePath = path.join(logDir, file)
const logData = fs.readFileSync(logFilePath, "utf-8")
return { date: file, data: logData }
})
res.status(200).json({ logs })
} catch (err) {
console.error(`Error while reading logs: ${err}`)
res.status(500).json({ error: "Internal Server Error" })
}
}
const addColumns = (req, res) => {
const { columnName, dataType } = req.body
if (!Array.isArray(columnName) || !Array.isArray(dataType)) {
return res.send("Please provide multiple column names and data types.")
}
if (columnName.length !== dataType.length) {
return res.send(
"Number of column names must match the number of data types."
)
}
const columnsToAdd = []
for (let i = 0; i < columnName.length; i++) {
columnsToAdd.push(`${columnName[i]} ${dataType[i]}`)
}
// Construct the SQL query
const sql = `ALTER TABLE your_table_name ADD COLUMN ${columnsToAdd.join(
", "
)}`
connection.query(sql, (err) => {
if (err) {
res.send(`Error: ${err.message}`)
} else {
res.send("Columns added successfully.")
}
})
}
//// Form Extension controller
const getAllFormExtension = (req, res) => {
pool.query(`SELECT * FROM rn_ext_field_t`, (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
})
}
const getByIdFormExtension = (req, res) => {
const id = req.params.id
pool.query(
`SELECT * FROM rn_ext_field_t WHERE id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
}
)
}
const createFormExtension = async (req, res) => {
const body = req.body
// const currentDate = new Date().toISOString().slice(0, 10) // Get YYYY-MM-DD format
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
const user = req.user
console.log(req.user.user_name)
const email = req.user.email
const sql = `SELECT account_id FROM sec_users WHERE email = ?`
const account_id = await executeQuery(sql, [email])
// console.log(account_id[0].account_id)
pool.query(
`INSERT INTO rn_ext_field_t SET created_at = ?, created_by = ?, account_id = ?, data_type = ?, field_name = ?, form_code = ?, is_active = ?, mapping = ?, type = ?`,
[
dateTime,
req.user.user_name,
account_id[0].account_id,
body.data_type,
body.field_name,
body.form_code,
body.is_active,
body.mapping,
body.type,
],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Some error occured",
})
}
return res.json({
success: 1,
data: "created succesfully",
})
}
)
// console.log(account_id)
}
const updateFormExtension = async (req, res) => {
const id = req.params.id
const body = req.body
// const currentDate = new Date().toISOString().slice(0, 10) // Get YYYY-MM-DD format
var today = new Date()
var date =
today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate()
var time =
today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()
var dateTime = date + " " + time
const email = req.user.email
const sql = `SELECT account_id FROM sec_users WHERE email = ?`
const account_id = await executeQuery(sql, [email])
pool.query(
`UPDATE rn_ext_field_t SET updated_at = ?, updated_at = ?, account_id = ?, data_type = '${body.data_type}', field_name = '${body.field_name}', form_code = '${body.form_code}', is_active = '${body.is_active}', mapping = '${body.mapping}', type = '${body.type}' WHERE id = '${id}'`,
[dateTime, req.user.user_name, account_id[0].account_id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Some error occured",
})
}
return res.json({
success: 1,
data: "created succesfully",
})
}
)
}
const deleteFormExtension = async (req, res) => {
const id = req.params.id
const body = req.body
pool.query(
`DELETE FROM rn_ext_field_t WHERE id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return
}
return res.json({
success: 1,
data: "Deleted succesfully",
})
}
)
}
const buildExtension = async (req, res) => {
const email = req.user.email
const sql = `SELECT account_id FROM sec_users WHERE email = ?`
const result = await executeQuery(sql, [email])
const account_id = result[0].account_id
const formId = req.params.formId
const sql2 = `SELECT field_name FROM rn_ext_field_t WHERE id = ?`
const field_name = await executeQuery(sql, [formId])
console.log(field_name)
const formCode = await buildExtensionByFormCode(account_id, formId)
if (!formCode) {
res.status(500).json({ success: 0, message: "Some error occured!" })
}
const mailOptions = {
from: "example.com",
to: email,
subject: "Email for informing about form Extension",
text: `Your form with form id ${formId} is extended with FieldName ${field_name}`,
}
transporter.sendMail(mailOptions, (error) => {
if (error) {
console.log(error)
console.log({ message: "Error sending Email" })
}
console.log({ message: "Email sent successfully" })
})
console.log(formCode)
res.status(200).json(formCode[0])
}
const userMenu = (req, res) => {
pool.query(`SELECT * FROM accesstype`, (error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
})
}
const test = (req, res) => {
const id = req.params.id
pool.query(
`SELECT field_name FROM rn_ext_field_t WHERE id = ?`,
[id],
(error, results, fields) => {
if (error) {
console.log(error)
return res.json({
success: 0,
message: "Table is empty",
})
}
return res.status(200).json(results)
}
)
}
module.exports = {
getUsersUserGrpMaintenance,
getUsersByUserIdUserGrpMaintenance,
updateUsersUserGrpMaintenance,
createUsersUserGrpMaintenance,
deleteUsersUserGrpMaintenance,
getUsersMenuMaintainence,
getUsersByUserIdMenuMaintainence,
createUsersMenuMaintainence,
updateUsersMenuMaintainence,
deleteUsersMenuMaintainence,
getUsersByIdSubMenuMaintainence,
createUsersMenuAccessControl,
getUsersMenuAccessControl,
getUserMaintainence,
getByIdUserMaintainence,
createUserMaintainence,
updateUserMaintainence,
loadMenuByUser,
userMenu,
createReport,
getAllReportBuilder,
getAllReportBuilderById,
getAllReportBuilderByQuery,
updateReportBuilder,
deleteReportBuilder,
getReportLine,
getReportLineById,
updateReportLine,
getAllDashboard,
getDashboardByModuleId,
getAllDashboardHeaderById,
createDashboard,
updateDashboard,
deleteDashboard,
getDashboardLine,
getDashboardLineById,
updateDashboardLineById,
getSystemParameter,
getSystemParameterById,
createSystemParameter,
updateSystemParameter,
deleteSystemParameter,
getLogs,
getAllFormExtension,
getByIdFormExtension,
createFormExtension,
updateFormExtension,
deleteFormExtension,
buildExtension,
login,
logout,
sendEmailForResetPassword,
resetPassword,
savePassword,
getLoggedInUser,
uploadProfilePhoto,
retrieveProfilePhoto,
test,
}