Commit da3687c8 by Ooh-Ao

borrow api

parent 772f8e8b
......@@ -7,7 +7,7 @@ const equipmentRoutes = require('./routes/equipmentRoutes');
const projectRoutes = require('./routes/projectRoutes');
const projectMemberRoutes = require('./routes/projectMemberRoutes');
const projectEquipmentRoutes = require('./routes/projectEquipmentRoutes');
const borrowTransactionRoutes = require('./routes/borrowTransactionRoutes');
const sequelize = require('./config/database'); // instance ของ sequelize
const app = express();
......@@ -24,7 +24,7 @@ app.use('/api/equipments', equipmentRoutes);
app.use('/api/projects', projectRoutes);
app.use('/api/project-members', projectMemberRoutes);
app.use('/api/project-equipments', projectEquipmentRoutes);
app.use('/api/borrow-transactions', borrowTransactionRoutes);
sequelize.sync({ force: false })
......
// controllers/borrowTransactionController.js
const BorrowTransaction = require('../models/BorrowTransaction');
/**
* สร้างรายการยืมอุปกรณ์ (Create)
*/
exports.createBorrowTransaction = async (req, res) => {
try {
// ข้อมูลจาก body เช่น: { user_id, project_id, equipment_id, quantity_borrowed, ... }
const {
user_id,
project_id,
equipment_id,
quantity_borrowed,
borrowed_date,
due_date,
status,
} = req.body;
const newTransaction = await BorrowTransaction.create({
user_id,
project_id,
equipment_id,
quantity_borrowed,
borrowed_date,
due_date,
status,
});
return res.status(201).json({
message: 'BorrowTransaction created successfully',
borrowTransaction: newTransaction
});
} catch (error) {
console.error(error);
return res.status(500).json({ error: error.message });
}
};
/**
* ดึงข้อมูลการยืมทั้งหมด (Read All)
*/
exports.getAllBorrowTransactions = async (req, res) => {
try {
const transactions = await BorrowTransaction.findAll();
return res.status(200).json(transactions);
} catch (error) {
console.error(error);
return res.status(500).json({ error: error.message });
}
};
/**
* ดึงข้อมูลการยืมตาม borrow_id (Read One)
*/
exports.getBorrowTransactionById = async (req, res) => {
try {
const { id } = req.params; // borrow_id
const transaction = await BorrowTransaction.findByPk(id);
if (!transaction) {
return res.status(404).json({ error: 'BorrowTransaction not found' });
}
return res.status(200).json(transaction);
} catch (error) {
console.error(error);
return res.status(500).json({ error: error.message });
}
};
/**
* อัปเดตข้อมูลการยืม (Update)
*/
exports.updateBorrowTransaction = async (req, res) => {
try {
const { id } = req.params;
const {
user_id,
project_id,
equipment_id,
quantity_borrowed,
borrowed_date,
due_date,
returned_date,
status,
} = req.body;
const [rowsUpdated] = await BorrowTransaction.update({
user_id,
project_id,
equipment_id,
quantity_borrowed,
borrowed_date,
due_date,
returned_date,
status
}, {
where: { borrow_id: id },
});
if (!rowsUpdated) {
return res.status(404).json({ error: 'BorrowTransaction not found or no changes' });
}
// ดึงข้อมูลใหม่ที่เพิ่งอัปเดต
const updatedTransaction = await BorrowTransaction.findByPk(id);
return res.status(200).json({
message: 'BorrowTransaction updated successfully',
borrowTransaction: updatedTransaction,
});
} catch (error) {
console.error(error);
return res.status(500).json({ error: error.message });
}
};
/**
* ลบข้อมูลการยืม (Delete)
*/
exports.deleteBorrowTransaction = async (req, res) => {
try {
const { id } = req.params;
const rowsDeleted = await BorrowTransaction.destroy({ where: { borrow_id: id } });
if (!rowsDeleted) {
return res.status(404).json({ error: 'BorrowTransaction not found' });
}
return res.status(200).json({ message: 'BorrowTransaction deleted successfully' });
} catch (error) {
console.error(error);
return res.status(500).json({ error: error.message });
}
};
// models/BorrowTransaction.js
const { DataTypes } = require('sequelize');
const sequelize = require('../config/database');
const BorrowTransaction = sequelize.define('BorrowTransaction', {
borrow_id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4, // สร้าง UUID อัตโนมัติ
primaryKey: true,
},
user_id: {
type: DataTypes.UUID,
allowNull: false,
// references: {
// model: 'users',
// key: 'user_id'
// }
},
project_id: {
type: DataTypes.UUID,
allowNull: false,
// references: {
// model: 'projects',
// key: 'project_id'
// }
},
equipment_id: {
type: DataTypes.UUID,
allowNull: false,
// references: {
// model: 'equipments',
// key: 'equipment_id'
// }
},
quantity_borrowed: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 1,
},
borrowed_date: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: DataTypes.NOW,
},
due_date: {
type: DataTypes.DATE,
allowNull: true,
},
returned_date: {
type: DataTypes.DATE,
allowNull: true,
},
status: {
type: DataTypes.STRING(50),
allowNull: false,
defaultValue: 'borrowed', // เช่น: borrowed, returned, pending, ฯลฯ
},
created_at: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: DataTypes.NOW,
},
updated_at: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: DataTypes.NOW,
},
}, {
tableName: 'borrow_transactions',
timestamps: false, // ถ้าไม่ต้องการให้ Sequelize จัดการ createdAt, updatedAt อัตโนมัติ
});
module.exports = BorrowTransaction;
// routes/borrowTransactionRoutes.js
const express = require('express');
const router = express.Router();
const borrowTxController = require('../controllers/borrowTransactionController');
// สร้างรายการยืม
router.post('/', borrowTxController.createBorrowTransaction);
// ดึงข้อมูลทั้งหมด
router.get('/', borrowTxController.getAllBorrowTransactions);
// ดึงข้อมูลตาม borrow_id
router.get('/:id', borrowTxController.getBorrowTransactionById);
// อัปเดตข้อมูลการยืม
router.put('/:id', borrowTxController.updateBorrowTransaction);
// ลบการยืม
router.delete('/:id', borrowTxController.deleteBorrowTransaction);
module.exports = router;
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