const express = require('express'); const router = express.Router(); const { getDatabase } = require('../db/init'); // GET all litters router.get('/', (req, res) => { try { const db = getDatabase(); const litters = db.prepare(` SELECT l.*, s.name as sire_name, s.registration_number as sire_reg, d.name as dam_name, d.registration_number as dam_reg FROM litters l JOIN dogs s ON l.sire_id = s.id JOIN dogs d ON l.dam_id = d.id ORDER BY l.breeding_date DESC `).all(); // Get puppies for each litter litters.forEach(litter => { litter.puppies = db.prepare(` SELECT d.* FROM dogs d JOIN parents ps ON d.id = ps.dog_id JOIN parents pd ON d.id = pd.dog_id WHERE ps.parent_id = ? AND pd.parent_id = ? `).all(litter.sire_id, litter.dam_id); litter.puppies.forEach(puppy => { puppy.photo_urls = puppy.photo_urls ? JSON.parse(puppy.photo_urls) : []; }); }); res.json(litters); } catch (error) { res.status(500).json({ error: error.message }); } }); // GET single litter router.get('/:id', (req, res) => { try { const db = getDatabase(); const litter = db.prepare(` SELECT l.*, s.*, s.name as sire_name, d.*, d.name as dam_name FROM litters l JOIN dogs s ON l.sire_id = s.id JOIN dogs d ON l.dam_id = d.id WHERE l.id = ? `).get(req.params.id); if (!litter) { return res.status(404).json({ error: 'Litter not found' }); } litter.puppies = db.prepare(` SELECT d.* FROM dogs d JOIN parents ps ON d.id = ps.dog_id JOIN parents pd ON d.id = pd.dog_id WHERE ps.parent_id = ? AND pd.parent_id = ? `).all(litter.sire_id, litter.dam_id); litter.puppies.forEach(puppy => { puppy.photo_urls = puppy.photo_urls ? JSON.parse(puppy.photo_urls) : []; }); res.json(litter); } catch (error) { res.status(500).json({ error: error.message }); } }); // POST create new litter router.post('/', (req, res) => { try { const { sire_id, dam_id, breeding_date, whelping_date, notes } = req.body; if (!sire_id || !dam_id || !breeding_date) { return res.status(400).json({ error: 'Sire, dam, and breeding date are required' }); } const db = getDatabase(); // Verify sire is male and dam is female const sire = db.prepare('SELECT sex FROM dogs WHERE id = ?').get(sire_id); const dam = db.prepare('SELECT sex FROM dogs WHERE id = ?').get(dam_id); if (!sire || sire.sex !== 'male') { return res.status(400).json({ error: 'Invalid sire' }); } if (!dam || dam.sex !== 'female') { return res.status(400).json({ error: 'Invalid dam' }); } const result = db.prepare(` INSERT INTO litters (sire_id, dam_id, breeding_date, whelping_date, notes) VALUES (?, ?, ?, ?, ?) `).run(sire_id, dam_id, breeding_date, whelping_date, notes); const litter = db.prepare('SELECT * FROM litters WHERE id = ?').get(result.lastInsertRowid); res.status(201).json(litter); } catch (error) { res.status(500).json({ error: error.message }); } }); // PUT update litter router.put('/:id', (req, res) => { try { const { breeding_date, whelping_date, puppy_count, notes } = req.body; const db = getDatabase(); db.prepare(` UPDATE litters SET breeding_date = ?, whelping_date = ?, puppy_count = ?, notes = ? WHERE id = ? `).run(breeding_date, whelping_date, puppy_count, notes, req.params.id); const litter = db.prepare('SELECT * FROM litters WHERE id = ?').get(req.params.id); res.json(litter); } catch (error) { res.status(500).json({ error: error.message }); } }); // DELETE litter router.delete('/:id', (req, res) => { try { const db = getDatabase(); db.prepare('DELETE FROM litters WHERE id = ?').run(req.params.id); res.json({ message: 'Litter deleted successfully' }); } catch (error) { res.status(500).json({ error: error.message }); } }); module.exports = router;