52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
const { query } = require('../database/db');
|
|
|
|
class CycleFeedInitialBalance {
|
|
/**
|
|
* Get initial balance for a specific cycle
|
|
* @param {string} cycleId - Cycle ID
|
|
* @returns {Promise<Object|null>} Initial balance record or null if not found
|
|
*/
|
|
static async getByCycleId(cycleId) {
|
|
const result = await query(
|
|
'SELECT * FROM cycle_feed_initial_balance WHERE cycle_id = $1',
|
|
[cycleId]
|
|
);
|
|
return result.rows[0] || null;
|
|
}
|
|
|
|
/**
|
|
* Insert or update initial balance for a cycle (upsert)
|
|
* @param {string} cycleId - Cycle ID
|
|
* @param {number} saldoAwal - Initial balance count (must be non-negative)
|
|
* @param {string} createdBy - Username of creator
|
|
* @returns {Promise<Object>} Created/updated initial balance record
|
|
*/
|
|
static async upsert(cycleId, saldoAwal, createdBy) {
|
|
const result = await query(
|
|
`INSERT INTO cycle_feed_initial_balance (cycle_id, saldo_awal, created_by)
|
|
VALUES ($1, $2, $3)
|
|
ON CONFLICT (cycle_id)
|
|
DO UPDATE SET
|
|
saldo_awal = $2,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
RETURNING *`,
|
|
[cycleId, saldoAwal, createdBy]
|
|
);
|
|
return result.rows[0];
|
|
}
|
|
|
|
/**
|
|
* Delete initial balance for a cycle
|
|
* @param {string} cycleId - Cycle ID
|
|
* @returns {Promise<void>}
|
|
*/
|
|
static async delete(cycleId) {
|
|
await query(
|
|
'DELETE FROM cycle_feed_initial_balance WHERE cycle_id = $1',
|
|
[cycleId]
|
|
);
|
|
}
|
|
}
|
|
|
|
module.exports = CycleFeedInitialBalance;
|