71 lines
2.4 KiB
JavaScript
71 lines
2.4 KiB
JavaScript
const { query } = require('../database/db');
|
|
|
|
class ManualFeedSack {
|
|
/**
|
|
* Get all manual entries for a date range
|
|
* @param {string} startDate - Start date (YYYY-MM-DD)
|
|
* @param {string} endDate - End date (YYYY-MM-DD)
|
|
* @returns {Promise<Array>} Array of manual feed sack entries
|
|
*/
|
|
static async getByDateRange(startDate, endDate) {
|
|
const result = await query(
|
|
'SELECT * FROM manual_feed_sack_entries WHERE date >= $1 AND date <= $2 ORDER BY date ASC',
|
|
[startDate, endDate]
|
|
);
|
|
return result.rows;
|
|
}
|
|
|
|
/**
|
|
* Get manual entry for specific date and camera
|
|
* @param {string} date - Date (YYYY-MM-DD)
|
|
* @param {string} cameraName - Camera name
|
|
* @returns {Promise<Object|null>} Manual entry or null if not found
|
|
*/
|
|
static async getByDateAndCamera(date, cameraName) {
|
|
const result = await query(
|
|
'SELECT * FROM manual_feed_sack_entries WHERE date = $1 AND camera_name = $2',
|
|
[date, cameraName]
|
|
);
|
|
return result.rows[0] || null;
|
|
}
|
|
|
|
/**
|
|
* Insert or update manual entry (upsert)
|
|
* @param {string} date - Date (YYYY-MM-DD)
|
|
* @param {string} cameraName - Camera name
|
|
* @param {number} count - Sack count
|
|
* @param {string} createdBy - Username of creator
|
|
* @param {string} keterangan - Optional notes/remarks (max 200 chars)
|
|
* @returns {Promise<Object>} Created/updated entry
|
|
*/
|
|
static async upsert(date, cameraName, count, createdBy, keterangan = null) {
|
|
const result = await query(
|
|
`INSERT INTO manual_feed_sack_entries (date, camera_name, count, created_by, keterangan)
|
|
VALUES ($1, $2, $3, $4, $5)
|
|
ON CONFLICT (date, camera_name)
|
|
DO UPDATE SET
|
|
count = $3,
|
|
keterangan = $5,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
RETURNING *`,
|
|
[date, cameraName, count, createdBy, keterangan]
|
|
);
|
|
return result.rows[0];
|
|
}
|
|
|
|
/**
|
|
* Delete manual entry
|
|
* @param {string} date - Date (YYYY-MM-DD)
|
|
* @param {string} cameraName - Camera name
|
|
* @returns {Promise<void>}
|
|
*/
|
|
static async delete(date, cameraName) {
|
|
await query(
|
|
'DELETE FROM manual_feed_sack_entries WHERE date = $1 AND camera_name = $2',
|
|
[date, cameraName]
|
|
);
|
|
}
|
|
}
|
|
|
|
module.exports = ManualFeedSack;
|