const express = require('express'); const router = express.Router(); const Kandang = require('../models/Kandang'); // GET /api/kandangs - List all kandangs router.get('/', async (req, res) => { try { const kandangs = await Kandang.getAll(); res.json({ success: true, data: kandangs }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); // GET /api/kandangs/by-cycle/:cycleId - Get kandangs with doc_in_count for a cycle router.get('/by-cycle/:cycleId', async (req, res) => { try { const kandangs = await Kandang.getByCycle(req.params.cycleId); res.json({ success: true, data: kandangs }); } catch (error) { console.error('Error fetching kandangs by cycle:', error); res.status(500).json({ success: false, error: error.message }); } }); // GET /api/kandangs/:id - Get single kandang router.get('/:id', async (req, res) => { try { const id = parseInt(req.params.id, 10); if (isNaN(id)) return res.status(400).json({ success: false, error: 'Invalid ID' }); const kandang = await Kandang.getById(id); if (!kandang) return res.status(404).json({ success: false, error: 'Kandang not found' }); res.json({ success: true, data: kandang }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); // POST /api/kandangs - Create new kandang router.post('/', async (req, res) => { try { const { name } = req.body; if (!name || !name.trim()) { return res.status(400).json({ success: false, error: 'Name is required' }); } const kandang = await Kandang.create(name.trim()); res.status(201).json({ success: true, data: kandang }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); // PUT /api/kandangs/:id - Rename kandang router.put('/:id', async (req, res) => { try { const id = parseInt(req.params.id, 10); if (isNaN(id)) return res.status(400).json({ success: false, error: 'Invalid ID' }); const { name } = req.body; if (!name || !name.trim()) { return res.status(400).json({ success: false, error: 'Name is required' }); } const kandang = await Kandang.update(id, name.trim()); if (!kandang) return res.status(404).json({ success: false, error: 'Kandang not found' }); res.json({ success: true, data: kandang }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); // DELETE /api/kandangs/:id - Delete kandang router.delete('/:id', async (req, res) => { try { const id = parseInt(req.params.id, 10); if (isNaN(id)) return res.status(400).json({ success: false, error: 'Invalid ID' }); const deleted = await Kandang.delete(id); if (!deleted) return res.status(404).json({ success: false, error: 'Kandang not found' }); res.json({ success: true, message: 'Kandang deleted successfully' }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); // PUT /api/kandangs/:id/cycle/:cycleId - Set doc_in_count for kandang + cycle router.put('/:id/cycle/:cycleId', async (req, res) => { try { const id = parseInt(req.params.id, 10); if (isNaN(id)) return res.status(400).json({ success: false, error: 'Invalid ID' }); const { docInCount } = req.body; if (docInCount === undefined || docInCount < 0) { return res.status(400).json({ success: false, error: 'Valid docInCount is required' }); } await Kandang.setDocInCount(id, req.params.cycleId, docInCount); res.json({ success: true, message: 'doc_in_count updated' }); } catch (error) { console.error('Error setting DOC count:', error); res.status(500).json({ success: false, error: error.message }); } }); // PUT /api/kandangs/:id/cage-uuid - Update cage UUID for a kandang router.put('/:id/cage-uuid', async (req, res) => { try { const id = parseInt(req.params.id, 10); if (isNaN(id)) return res.status(400).json({ success: false, error: 'Invalid ID' }); const { cageUuid } = req.body; // Validate UUID format if provided (allow null/empty to clear) if (cageUuid && cageUuid.trim()) { const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; if (!uuidRegex.test(cageUuid.trim())) { return res.status(400).json({ success: false, error: 'Invalid UUID format' }); } } const kandang = await Kandang.updateCageUuid(id, cageUuid?.trim() || null); if (!kandang) { return res.status(404).json({ success: false, error: 'Kandang not found' }); } res.json({ success: true, data: kandang }); } catch (error) { // Handle unique constraint violation if (error.code === '23505') { return res .status(409) .json({ success: false, error: 'Cage UUID already assigned to another kandang' }); } res.status(500).json({ success: false, error: error.message }); } }); module.exports = router;