commit
32a36cceff
444 files changed
+67186
No files matched your search
@@ -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;
|
||||
Reference in new issue
Block a user