CHANGE ALL MYSQL TO ORM

This commit is contained in:
BIG2EYEZ
2024-01-18 18:34:09 +08:00
parent 61aeca0961
commit 8aeb622b17
8 changed files with 1169 additions and 725 deletions

View File

@ -1,35 +1,50 @@
// models/User.js
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize(process.env.database, process.env.user, process.env.password, {
host: process.env.host,
dialect: 'mysql',
timezone: 'Z', // Set the timezone to UTC
});
const bcrypt = require('bcrypt');
const User = sequelize.define('User', {
name: {
type: DataTypes.STRING,
allowNull: false,
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
jobTitle: {
type: DataTypes.STRING,
allowNull: false,
},
});
module.exports = (sequelize) => {
const User = sequelize.define('users', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
jobTitle: {
type: DataTypes.STRING,
allowNull: false,
},
reset_token: {
type: DataTypes.STRING,
},
reset_token_expiry: {
type: DataTypes.DATE,
},
}, {
hooks: {
beforeCreate: async (user) => {
user.password = await bcrypt.hash(user.password, 10);
},
},
timestamps: false, // Disabling timestamps here
});
module.exports = User;
return User;
};

30
Sean/models/userLogs.js Normal file
View File

@ -0,0 +1,30 @@
// userLogs.js
const { Sequelize, DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const userLogs = sequelize.define('user_logs', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
username: {
type: DataTypes.STRING,
allowNull: false,
},
activity: {
type: DataTypes.STRING,
allowNull: false,
},
timestamp: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
},
}, {
timestamps: false, // Disabling timestamps
});
return userLogs;
};

View File

@ -2,47 +2,47 @@ const mysql = require("mysql2");
const path = require("path");
require('dotenv').config({ path: path.resolve(__dirname, '../.env') })
const fs = require('fs');
/*
const mysqlConfig = {
host: process.env.host,
user: process.env.user,
password: process.env.password,
database: process.env.database,
timezone: "Z", // Set the timezone to UTC
};
const UserModel = require('../models/User');// Adjust the path based on your project structure
const { Sequelize } = require('sequelize');
const connection = mysql.createConnection(mysqlConfig);
connection.connect((err) => {
if (err) {
console.error("Error connecting to MySQL:", err);
return;
}
console.log("Connected to MySQL");
});
*/
const connection = mysql.createConnection({
host: process.env.host,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: "adminusers",
timezone: "Z", // Set the timezone to UTC
ssl: {
ca: fs.readFileSync(path.resolve(__dirname, '../../cert/DigiCertGlobalRootCA.crt.pem')),
const sequelize = new Sequelize(
"adminusers",
process.env.DB_USER,
process.env.DB_PASS,
{
host: "mpsqldatabasean.mysql.database.azure.com",
dialect: 'mysql',
// attributeBehavior?: 'escape' | 'throw' | 'unsafe-legacy';
attributeBehavior: 'escape',
dialectOptions: {
ssl: {
ca: fs.readFileSync(path.resolve(__dirname, '../../cert/DigiCertGlobalRootCA.crt.pem')),
}
});
/*
const connection = mysql.createConnection({
host: process.env.host,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: "adminusers",
timezone: "Z", // Set the timezone to UTC
});
*/
module.exports = { connection };
},
},
},
);
sequelize.authenticate().then(() => {
console.log('Connection has been established successfully.');
}).catch((error) => {
console.error('Unable to connect to the database: ', error);
});
const User = UserModel(sequelize);
// Synchronize the models with the database
sequelize.sync();
module.exports = {
sequelize,
User,
};

File diff suppressed because it is too large Load Diff

View File

@ -41,7 +41,6 @@
<th>Name</th>
<th>Username</th>
<th>Email</th>
<th>Last Login</th>
<th>Job Title</th>
</tr>
</thead>
@ -52,7 +51,6 @@
<td><%- user.name %></td>
<td><%- user.username %></td>
<td><%- user.email %></td>
<td><%- new Date(user.lastLogin).toLocaleString('en-US', { timeZone: 'Asia/Singapore' }) %></td>
<td><%- user.jobTitle %></td>
</tr>
<% }); %>

View File

@ -27,9 +27,10 @@ $(document).ready(function () {
});
$('#searchUserButton').on('click', function () {
console.log('Search button clicked');
const searchUsername = $('#searchUserInput').val();
// Call the function to search for the user
searchUser(searchUsername);
});
@ -71,9 +72,9 @@ function searchUser(username) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
})
.then(users => {
.then(user => {
// Display search results
displaySearchResults(users);
displaySearchResults(user);
})
.catch(error => {
console.error('Search error:', error);
@ -83,24 +84,17 @@ function searchUser(username) {
// Function to display search results
function displaySearchResults(users) {
const searchResultsList = $('#searchResultsList');
// Clear previous results
searchResultsList.empty();
if (users && users.length > 0) {
users.forEach(user => {
const listItem = `<li>${user.username} - <button class="deleteUserButton" data-username="${user.username}">Delete</button></li>`;
const listItem = `<li>${users.username} - <button class="deleteUserButton" data-username="${users.username}">Delete</button></li>`;
searchResultsList.append(listItem);
});
// Show the search results container
$('#searchResultsContainer').show();
} else {
// Hide the search results container if no results
$('#searchResultsContainer').hide();
}
}
}
// Event listener for delete user button in search results
$('#searchResultsList').on('click', '.deleteUserButton', function () {
@ -303,8 +297,7 @@ $('#resetPasswordForm').on('submit', function (e) {
const password = $('#resetPassword').val();
const confirmPassword = $('#resetConfirmPassword').val();
const csrf_token = $('#userForm input[name="csrf_token"]').val();
console.log('Username:', username);
console.log('New Password:', password);
// Validate passwords
if (password !== confirmPassword) {
@ -493,11 +486,7 @@ fetchLogs();
// Assuming allUsers is an array containing user information
const user = allUsers.find(user => user.username === currentUsername);
const userRole = user?.jobTitle;
console.log('All Users:', allUsers);
console.log('Current Username:', currentUsername);
// Log the user role to the console
console.log('User Role:', userRole);
// Function to enable/disable actions based on user role
function handleUserRoleAccess() {