Commit 8cf563bc by Ooh-Ao

user

parent f110dfb9
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('NewDatabases', 'postgres', 'qwer1234', {
const sequelize = new Sequelize('AssetManagement', 'postgres', 'qwer1234', {
host: 'localhost',
dialect: 'postgres'
});
module.exports = sequelize;
\ No newline at end of file
const User = require('../models/User');
const bcrypt = require('bcryptjs');
const saltRounds = 10;
const User = require("../models/User");
const bcrypt = require("bcryptjs");
exports.getUsers = async (req, res) => {
// สร้างผู้ใช้ใหม่ (Create)
exports.createUser = async (req, res) => {
try {
const user = await User.findAll();
res.status(200).json(user);
} catch (err) {
res.status(500).json({ error: err.message });
// req.body = { first_name, last_name, email, password, role, ...}
const newUser = await User.create(req.body);
// ปกติจะไม่ส่งรหัสผ่านออกไปทั้งดุ้น ให้ปิดไปหรือเฉพาะ field ที่ต้องใช้
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 {
const { id } = req.params;
const user = await User.findByPk(id);
if (user) {
res.status(200).json({ actionStatus: 'Success', data: user });
} else {
res.status(404).json({ actionStatus: 'Failed', message: 'Product not found' });
}
} catch (error) {
res.status(500).json({ actionStatus: 'Failed', message: error.message });
}
const users = await User.findAll({
attributes: ['user_id', 'first_name', 'last_name', 'email', 'role', 'created_at']
});
res.status(200).json(users);
} catch (error) {
console.error(error);
res.status(500).json({ message: "Error retrieving users", error: error.message });
}
};
exports.createUser = async (req, res) => {
// อ่านข้อมูลผู้ใช้รายคน (Read One)
exports.getUserById = async (req, res) => {
const { id } = req.params;
try {
const { user_id, first_name, last_name, email, password , role, created_at, updated_at } = req.body;
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
const user = await User.findByPk(id, {
attributes: ['user_id', 'first_name', 'last_name', 'email', 'role', 'created_at']
});
} catch (err) {
res.status(400).json({ error: err.message });
if (!user) {
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) => {
const { id } = req.params;
try {
const { id } = req.params;
const { first_name, last_name, email, password , role, updated_at } = req.body;
const user = await User.findByPk(id);
if (user) {
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();
// ถ้าต้องการ update password จะมี hook beforeUpdate จัดการ hash ให้
const [rowsUpdated] = await User.update(req.body, {
where: { user_id: id },
returning: true
});
res.status(200).json({
actionStatus: 'Success',
message: 'Update Success!!',
statusCode: 200,
user: user
});
} else {
res.status(404).json({ error: 'Member not found' });
if (!rowsUpdated) {
return res.status(404).json({ message: "User not found or no change" });
}
} catch (err) {
res.status(500).json({ error: err.message });
// 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({
message: "User updated successfully",
user: updatedUser
});
} catch (error) {
console.error(error);
res.status(500).json({ message: "Error updating user", error: error.message });
}
};
// ลบผู้ใช้ (Delete)
exports.deleteUser = async (req, res) => {
const { id } = req.params;
try {
const { id } = req.params;
const user = await User.findByPk(id);
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' });
const rowsDeleted = await User.destroy({ where: { user_id: id } });
if (!rowsDeleted) {
return res.status(404).json({ message: "User not found" });
}
} catch (err) {
res.status(500).json({ error: err.message });
res.status(200).json({ message: "User deleted successfully" });
} catch (error) {
console.error(error);
res.status(500).json({ message: "Error deleting user", error: error.message });
}
};
......@@ -4,8 +4,9 @@ const bcrypt = require("bcryptjs");
const User = sequelize.define('User', {
user_id: {
type: DataTypes.INTEGER,
autoIncrement: true,
// เปลี่ยนจาก INTEGER autoIncrement เป็น UUID
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
first_name: {
......@@ -45,4 +46,43 @@ const User = sequelize.define('User', {
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;
// routes/userRoutes.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
const router = express.Router();
router.get('/', userController.getUsers);
router.get('/:id', userController.getUsersByID);
router.put('/:id',userController.updateUser);
// สร้าง (Create)
router.post('/', userController.createUser);
// อ่านทั้งหมด
router.get('/', userController.getAllUsers);
// อ่านรายคน
router.get('/:id', userController.getUserById);
// อัปเดต
router.put('/:id', userController.updateUser);
// ลบ
router.delete('/:id', userController.deleteUser);
module.exports = router;
\ No newline at end of file
module.exports = router;
......@@ -4,7 +4,7 @@ require('dotenv').config();
const pool = new Pool({
user: "postgres",
host: "localhost",
database: "NewDatabases",
database: "AssetManagement",
password: "qwer1234",
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