134 lines
3.0 KiB
JavaScript
134 lines
3.0 KiB
JavaScript
const { History } = require("../models/sterilisasi");
|
|
|
|
/**
|
|
* Helper functions untuk mengelola collection History
|
|
*/
|
|
|
|
/**
|
|
* Buat history baru saat menerima SET (start)
|
|
*/
|
|
async function createHistory(data) {
|
|
const batchId = data.batch_id;
|
|
|
|
if (!batchId) {
|
|
console.log("[History] Tidak ada batch_id, skip create history");
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
const history = await History.create({
|
|
batch_id: batchId,
|
|
device: data.Device ?? data.device,
|
|
namaAlat: data.namaAlat ?? "",
|
|
set: {
|
|
suhu: data.suhu ?? null,
|
|
tekanan: data.tekanan ?? null,
|
|
waktu: data.waktu ?? null,
|
|
startedAt: new Date(),
|
|
},
|
|
runningData: [],
|
|
status: 'running',
|
|
});
|
|
|
|
console.log(`[History] ✅ Created: batch_id=${batchId}`);
|
|
return history;
|
|
} catch (error) {
|
|
if (error.code === 11000) {
|
|
console.log(`[History] Sudah ada: batch_id=${batchId}`);
|
|
} else {
|
|
console.error("[History] Error create:", error.message);
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Tambah data running ke history
|
|
*/
|
|
async function addRunningData(data) {
|
|
const batchId = data.batch_id;
|
|
|
|
if (!batchId) {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
const history = await History.findOneAndUpdate(
|
|
{ batch_id: batchId },
|
|
{
|
|
$push: {
|
|
runningData: {
|
|
suhu: data.suhu ?? null,
|
|
tekanan: data.tekanan ?? null,
|
|
timer: data.timer ?? null,
|
|
timestamp: new Date(),
|
|
}
|
|
},
|
|
$set: { updatedAt: new Date() }
|
|
},
|
|
{ new: true }
|
|
);
|
|
|
|
if (history) {
|
|
console.log(`[History] ✅ Running data added: batch_id=${batchId}, total=${history.runningData.length}`);
|
|
} else {
|
|
console.log(`[History] ⚠️ History not found for batch_id=${batchId}`);
|
|
}
|
|
|
|
return history;
|
|
} catch (error) {
|
|
console.error("[History] Error add running:", error.message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update history dengan data finish
|
|
*/
|
|
async function finishHistory(data) {
|
|
const batchId = data.batch_id;
|
|
|
|
if (!batchId) {
|
|
return null;
|
|
}
|
|
|
|
const action = data.action ?? "finish";
|
|
const newStatus = action === "stop" ? "stopped" : "completed";
|
|
|
|
try {
|
|
const history = await History.findOneAndUpdate(
|
|
{ batch_id: batchId },
|
|
{
|
|
$set: {
|
|
finish: {
|
|
action: action,
|
|
suhu: data.suhu ?? null,
|
|
tekanan: data.tekanan ?? null,
|
|
finishedAt: new Date(),
|
|
},
|
|
status: newStatus,
|
|
updatedAt: new Date(),
|
|
}
|
|
},
|
|
{ new: true }
|
|
);
|
|
|
|
if (history) {
|
|
console.log(`[History] ✅ Finished: batch_id=${batchId}, status=${newStatus}`);
|
|
} else {
|
|
console.log(`[History] ⚠️ History not found for batch_id=${batchId}`);
|
|
}
|
|
|
|
return history;
|
|
} catch (error) {
|
|
console.error("[History] Error finish:", error.message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
createHistory,
|
|
addRunningData,
|
|
finishHistory,
|
|
};
|