Files
004_comission/tsc1877/task1/project/admin/db_seed/order.js
louiscklaw 5c584709c4 update,
2025-01-31 20:14:02 +08:00

87 lines
2.6 KiB
JavaScript

const { Sequelize, DataTypes } = require('sequelize');
const { sequelize } = require('./model');
const crypto = require('crypto');
const Order = sequelize.define(
'Orders',
{
order_id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, unique: true },
invoice_id: { type: DataTypes.STRING, allowNull: false },
username: { type: DataTypes.STRING, allowNull: false },
custom_id: { type: DataTypes.STRING, allowNull: false },
amount: { type: DataTypes.STRING, allowNull: false },
total_price: { type: DataTypes.DECIMAL, allowNull: false },
currency_code: { type: DataTypes.STRING, allowNull: false },
items: { type: DataTypes.STRING, allowNull: false },
order_status: { type: DataTypes.STRING, allowNull: false, defaultValue: 'NOT_PAID' },
salt: { type: DataTypes.STRING, allowNull: false },
},
{ timestamps: true },
);
function genSalt() {
return crypto.randomBytes(16).toString('hex');
}
function createMD5HashWithSalt(inputString, salt) {
// Prepend the salt to the inputString
const saltedInput = salt + inputString;
// Proceed with the MD5 hash
const hash = crypto.createHash('md5').update(saltedInput).digest('hex');
// Optionally, you might want to return both the hash and the salt
// for storage, so you can verify the input against the hash later.
return { salt, hash };
}
(async () => {
try {
await sequelize.authenticate();
console.log('Connection has been established successfully.');
const item_name = 'item_name';
const quantity = parseInt('10');
const unit_price = parseInt('1');
const currency_code = 'HKD';
const amount = parseInt(20);
const total_price = parseInt(20);
const email_name = '[email protected]';
// create table
await Order.drop();
await sequelize.sync();
const order = await Order.create({
invoice_id: crypto.randomUUID(),
username: email_name,
custom_id: createMD5HashWithSalt(
JSON.stringify(
[
{ item_name, quantity, unit_price },
{ item_name, quantity, unit_price },
],
total_price,
currency_code,
email_name,
),
genSalt(),
)['hash'],
amount,
total_price,
currency_code,
items: JSON.stringify([
{ item_name, quantity, unit_price },
{ item_name, quantity, unit_price },
]),
order_status: 'NOT_PAID',
salt: '12321',
});
orders = await Order.findAll();
// await sequelize.close();
} catch (error) {
console.error('Unable to connect to the database:', error);
}
})();