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 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} 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} 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} */ 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;