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;