Commit 8cf563bc by Ooh-Ao

user

parent f110dfb9
const { Sequelize } = require('sequelize'); const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('NewDatabases', 'postgres', 'qwer1234', { const sequelize = new Sequelize('AssetManagement', 'postgres', 'qwer1234', {
host: 'localhost', host: 'localhost',
dialect: 'postgres' dialect: 'postgres'
}); });
module.exports = sequelize; module.exports = sequelize;
\ No newline at end of file
const User = require('../models/User'); const User = require("../models/User");
const bcrypt = require('bcryptjs'); const bcrypt = require("bcryptjs");
const saltRounds = 10;
exports.getUsers = async (req, res) => { // สร้างผู้ใช้ใหม่ (Create)
exports.createUser = async (req, res) => {
try { try {
const user = await User.findAll(); // req.body = { first_name, last_name, email, password, role, ...}
res.status(200).json(user); const newUser = await User.create(req.body);
} catch (err) { // ปกติจะไม่ส่งรหัสผ่านออกไปทั้งดุ้น ให้ปิดไปหรือเฉพาะ field ที่ต้องใช้
res.status(500).json({ error: err.message }); res.status(201).json({
message: "User created successfully",
user: {
user_id: newUser.user_id,
first_name: newUser.first_name,
last_name: newUser.last_name,
email: newUser.email,
role: newUser.role
}
});
} catch (error) {
console.error(error);
res.status(500).json({ message: "Error creating user", error: error.message });
} }
}; };
exports.getUsersByID = async (req, res) => { // อ่านข้อมูลผู้ใช้ทั้งหมด (Read All)
exports.getAllUsers = async (req, res) => {
try { try {
const { id } = req.params; const users = await User.findAll({
const user = await User.findByPk(id); attributes: ['user_id', 'first_name', 'last_name', 'email', 'role', 'created_at']
if (user) { });
res.status(200).json({ actionStatus: 'Success', data: user }); res.status(200).json(users);
} else { } catch (error) {
res.status(404).json({ actionStatus: 'Failed', message: 'Product not found' }); console.error(error);
res.status(500).json({ message: "Error retrieving users", error: error.message });
} }
} catch (error) {
res.status(500).json({ actionStatus: 'Failed', message: error.message });
}
}; };
// อ่านข้อมูลผู้ใช้รายคน (Read One)
exports.createUser = async (req, res) => { exports.getUserById = async (req, res) => {
const { id } = req.params;
try { try {
const { user_id, first_name, last_name, email, password , role, created_at, updated_at } = req.body; const user = await User.findByPk(id, {
attributes: ['user_id', 'first_name', 'last_name', 'email', 'role', 'created_at']
const newUser = await User.create({
user_id,
first_name,
last_name,
password,
role,
created_at,
updated_at,
email
});
res.status(201).json({
actionStatus: 'Success',
message: 'Create Success!!',
statusCode: 200,
User: newUser
}); });
} catch (err) { if (!user) {
res.status(400).json({ error: err.message }); return res.status(404).json({ message: "User not found" });
}
res.status(200).json(user);
} catch (error) {
console.error(error);
res.status(500).json({ message: "Error retrieving user", error: error.message });
} }
}; };
// อัปเดตข้อมูลผู้ใช้ (Update)
exports.updateUser = async (req, res) => { exports.updateUser = async (req, res) => {
try {
const { id } = req.params; const { id } = req.params;
const { first_name, last_name, email, password , role, updated_at } = req.body; try {
// ถ้าต้องการ update password จะมี hook beforeUpdate จัดการ hash ให้
const user = await User.findByPk(id); const [rowsUpdated] = await User.update(req.body, {
where: { user_id: id },
if (user) { returning: true
});
user.first_name = first_name || user.first_name;
user.last_name = last_name || user.last_name;
user.password = password || user.password;
user.role = role || user.role;
user.updated_at = updated_at || user.updated_at;
user.email = email || user.email;
await user.save(); if (!rowsUpdated) {
return res.status(404).json({ message: "User not found or no change" });
}
// returning: true จะให้ Sequelize ส่งข้อมูลที่ update แล้วกลับมา (Postgres บางเวอร์ชัน)
// ใน MySQL/MariaDB จะไม่ได้ผลแบบนี้ ต้อง findOne/findByPk อีกรอบ
const updatedUser = await User.findByPk(id, {
attributes: ['user_id', 'first_name', 'last_name', 'email', 'role', 'created_at', 'updated_at']
});
res.status(200).json({ res.status(200).json({
actionStatus: 'Success', message: "User updated successfully",
message: 'Update Success!!', user: updatedUser
statusCode: 200,
user: user
}); });
} else { } catch (error) {
res.status(404).json({ error: 'Member not found' }); console.error(error);
} res.status(500).json({ message: "Error updating user", error: error.message });
} catch (err) {
res.status(500).json({ error: err.message });
} }
}; };
// ลบผู้ใช้ (Delete)
exports.deleteUser = async (req, res) => { exports.deleteUser = async (req, res) => {
try {
const { id } = req.params; const { id } = req.params;
try {
const rowsDeleted = await User.destroy({ where: { user_id: id } });
const user = await User.findByPk(id); if (!rowsDeleted) {
return res.status(404).json({ message: "User not found" });
if (user) {
await user.destroy();
res.status(200).json({
actionStatus: 'Success',
message: 'Delete Success!!',
statusCode: 200
});
} else {
res.status(404).json({ error: 'Member not found' });
} }
} catch (err) { res.status(200).json({ message: "User deleted successfully" });
res.status(500).json({ error: err.message }); } catch (error) {
console.error(error);
res.status(500).json({ message: "Error deleting user", error: error.message });
} }
}; };
...@@ -4,8 +4,9 @@ const bcrypt = require("bcryptjs"); ...@@ -4,8 +4,9 @@ const bcrypt = require("bcryptjs");
const User = sequelize.define('User', { const User = sequelize.define('User', {
user_id: { user_id: {
type: DataTypes.INTEGER, // เปลี่ยนจาก INTEGER autoIncrement เป็น UUID
autoIncrement: true, type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true, primaryKey: true,
}, },
first_name: { first_name: {
...@@ -45,4 +46,43 @@ const User = sequelize.define('User', { ...@@ -45,4 +46,43 @@ const User = sequelize.define('User', {
timestamps: false, timestamps: false,
}); });
// ตัวอย่างการใช้ hook เพื่อเข้ารหัส password ก่อนบันทึกลง DB
User.beforeCreate(async (user, options) => {
const hashedPassword = await bcrypt.hash(user.password, 10);
user.password = hashedPassword;
});
User.beforeUpdate(async (user, options) => {
if (user.changed('password')) {
const hashedPassword = await bcrypt.hash(user.password, 10);
user.password = hashedPassword;
}
});
// (async () => {
// try {
// // sync() จะสร้างตารางตาม Model ทั้งหมดที่มีในโปรเจกต์ (ถ้ายังไม่มี)
// // หากมีอยู่แล้วและต้องการ drop table เดิมให้ใช้ force: true (ไม่แนะนำบน production)
// await sequelize.sync({ force: false });
// console.log("Table(s) created successfully!");
// // ตัวอย่างการทดสอบสร้าง User ทันที (ถ้าต้องการ)
// const newUser = await User.create({
// first_name: "Jane",
// last_name: "Doe",
// email: "jane@example.com",
// password: "123456", // จะถูก hash จาก hook ใน model
// role: "employee",
// });
// console.log("New user created:", newUser.user_id);
// } catch (error) {
// console.error("Error creating table(s):", error);
// } finally {
// // ปิด connection เมื่อเสร็จสิ้นงาน (ขึ้นอยู่กับว่าเราต้องการปิดหรือไม่)
// await sequelize.close();
// }
// })();
module.exports = User; module.exports = User;
// routes/userRoutes.js
const express = require('express'); const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController'); const userController = require('../controllers/userController');
const router = express.Router(); // สร้าง (Create)
router.get('/', userController.getUsers);
router.get('/:id', userController.getUsersByID);
router.put('/:id',userController.updateUser);
router.post('/', userController.createUser); router.post('/', userController.createUser);
// อ่านทั้งหมด
router.get('/', userController.getAllUsers);
// อ่านรายคน
router.get('/:id', userController.getUserById);
// อัปเดต
router.put('/:id', userController.updateUser);
// ลบ
router.delete('/:id', userController.deleteUser); router.delete('/:id', userController.deleteUser);
module.exports = router; module.exports = router;
...@@ -4,7 +4,7 @@ require('dotenv').config(); ...@@ -4,7 +4,7 @@ require('dotenv').config();
const pool = new Pool({ const pool = new Pool({
user: "postgres", user: "postgres",
host: "localhost", host: "localhost",
database: "NewDatabases", database: "AssetManagement",
password: "qwer1234", password: "qwer1234",
port: 5432, port: 5432,
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment