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

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;