Files
dashboard/backend/models/ManualFeedSack.js
T
Alberto-Audrix 32a36cceff
CI / lint-and-test (push) Canceled after 0s
first commit
2026-07-28 08:55:05 +07:00

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;