"Fix_COI_and_routes"
This commit is contained in:
@@ -144,16 +144,16 @@ export const formatCOI = (coi) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const value = coi.toFixed(2)
|
const value = (coi * 100).toFixed(2)
|
||||||
|
|
||||||
if (coi <= 5) {
|
if (coi <= 0.05) {
|
||||||
return {
|
return {
|
||||||
value: `${value}%`,
|
value: `${value}%`,
|
||||||
level: 'low',
|
level: 'low',
|
||||||
color: '#10b981',
|
color: '#10b981',
|
||||||
description: 'Low inbreeding - Excellent genetic diversity'
|
description: 'Low inbreeding - Excellent genetic diversity'
|
||||||
}
|
}
|
||||||
} else if (coi <= 10) {
|
} else if (coi <= 0.10) {
|
||||||
return {
|
return {
|
||||||
value: `${value}%`,
|
value: `${value}%`,
|
||||||
level: 'medium',
|
level: 'medium',
|
||||||
|
|||||||
@@ -124,8 +124,8 @@ function calculateCOI(db, sireId, damId) {
|
|||||||
// 'trial-pairing' as dog IDs and return 404/wrong data.
|
// 'trial-pairing' as dog IDs and return 404/wrong data.
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
|
|
||||||
// POST /api/pedigree/trial-pairing
|
// POST /api/pedigree/trial-pairing (alias for /coi)
|
||||||
router.post('/trial-pairing', (req, res) => {
|
router.post(['/trial-pairing', '/coi'], (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { sire_id, dam_id } = req.body;
|
const { sire_id, dam_id } = req.body;
|
||||||
if (!sire_id || !dam_id) {
|
if (!sire_id || !dam_id) {
|
||||||
@@ -149,8 +149,8 @@ router.post('/trial-pairing', (req, res) => {
|
|||||||
coi: result.coefficient,
|
coi: result.coefficient,
|
||||||
commonAncestors: result.commonAncestors,
|
commonAncestors: result.commonAncestors,
|
||||||
directRelation: relation.related ? relation.relationship : null,
|
directRelation: relation.related ? relation.relationship : null,
|
||||||
recommendation: result.coefficient < 5 ? 'Low risk'
|
recommendation: result.coefficient < 0.05 ? 'Low risk'
|
||||||
: result.coefficient < 10 ? 'Moderate risk'
|
: result.coefficient < 0.10 ? 'Moderate risk'
|
||||||
: 'High risk'
|
: 'High risk'
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -158,6 +158,28 @@ router.post('/trial-pairing', (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// GET /api/pedigree/:id/coi
|
||||||
|
router.get('/:id/coi', (req, res) => {
|
||||||
|
try {
|
||||||
|
const db = getDatabase();
|
||||||
|
const parents = db.prepare('SELECT parent_type, parent_id FROM parents WHERE dog_id = ?').all(req.params.id);
|
||||||
|
const sire = parents.find(p => p.parent_type === 'sire');
|
||||||
|
const dam = parents.find(p => p.parent_type === 'dam');
|
||||||
|
|
||||||
|
if (!sire || !dam) {
|
||||||
|
return res.json({ coi: 0, commonAncestors: [], message: 'Incomplete parent data' });
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = calculateCOI(db, sire.parent_id, dam.parent_id);
|
||||||
|
res.json({
|
||||||
|
coi: result.coefficient,
|
||||||
|
commonAncestors: result.commonAncestors
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// GET /api/pedigree/relations/:sireId/:damId
|
// GET /api/pedigree/relations/:sireId/:damId
|
||||||
router.get('/relations/:sireId/:damId', (req, res) => {
|
router.get('/relations/:sireId/:damId', (req, res) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user