first commit
CI / lint-and-test (push) Canceled after 0s

This commit is contained in:
Alberto-Audrix committed 2026-07-28 08:55:05 +07:00
commit 32a36cceff
444 files changed
+67186

No files matched your search

+99
View File
@@ -0,0 +1,99 @@
const { query } = require('../database/db');
class ChickenCount {
static async upsert(date, kandangId, filename, totalCount) {
const result = await query(`
INSERT INTO chicken_counting (date, kandang_id, filename, total_count)
VALUES ($1, $2, $3, $4)
ON CONFLICT (date, kandang_id)
DO UPDATE SET
filename = EXCLUDED.filename,
total_count = EXCLUDED.total_count,
updated_at = NOW()
RETURNING *
`, [date, kandangId, filename, totalCount]);
// Fetch with kandang name
const record = await query(`
SELECT cc.*, k.name as kandang_name
FROM chicken_counting cc
JOIN kandangs k ON cc.kandang_id = k.id
WHERE cc.id = $1
`, [result.rows[0].id]);
return this.formatRecord(record.rows[0]);
}
static async insertIfNotExists(date, kandangId, filename, totalCount) {
// Check if record already exists
const existing = await query(`
SELECT cc.*, k.name as kandang_name
FROM chicken_counting cc
JOIN kandangs k ON cc.kandang_id = k.id
WHERE cc.date = $1 AND cc.kandang_id = $2
`, [date, kandangId]);
if (existing.rows.length > 0) {
// Record exists, return existing data without updating
return {
...this.formatRecord(existing.rows[0]),
skipped: true
};
}
// Record doesn't exist, insert new
const result = await query(`
INSERT INTO chicken_counting (date, kandang_id, filename, total_count)
VALUES ($1, $2, $3, $4)
RETURNING *
`, [date, kandangId, filename, totalCount]);
// Fetch with kandang name
const record = await query(`
SELECT cc.*, k.name as kandang_name
FROM chicken_counting cc
JOIN kandangs k ON cc.kandang_id = k.id
WHERE cc.id = $1
`, [result.rows[0].id]);
return {
...this.formatRecord(record.rows[0]),
skipped: false
};
}
static async getByDateRange(startDate, endDate, kandangId) {
let sql = `
SELECT cc.*, k.name as kandang_name
FROM chicken_counting cc
JOIN kandangs k ON cc.kandang_id = k.id
WHERE cc.date >= $1 AND cc.date <= $2
`;
const params = [startDate, endDate];
if (kandangId) {
sql += ` AND cc.kandang_id = $3`;
params.push(kandangId);
}
sql += ` ORDER BY cc.date ASC`;
const result = await query(sql, params);
return result.rows.map(row => this.formatRecord(row));
}
static formatRecord(record) {
return {
id: record.id,
date: record.date,
kandangId: record.kandang_id,
kandangName: record.kandang_name,
filename: record.filename,
totalCount: record.total_count,
createdAt: record.created_at,
updatedAt: record.updated_at
};
}
}
module.exports = ChickenCount;