103 lines
2.8 KiB
JavaScript
103 lines
2.8 KiB
JavaScript
const db = require('../config/db');
|
|
|
|
const getCoordinatesFromBody = (body) => {
|
|
const lat = body?.latitud ?? body?.latitude;
|
|
const lng = body?.longitud ?? body?.longitude;
|
|
|
|
if (lat === undefined || lat === null || lng === undefined || lng === null) {
|
|
return null;
|
|
}
|
|
|
|
return { lat, lng };
|
|
};
|
|
|
|
const upsertOnlineAvailability = async (dni, lat, lng) => {
|
|
const [rows] = await db.query(
|
|
`SELECT id_usuario
|
|
FROM c_trazabilidad_online
|
|
WHERE id_usuario = ?
|
|
LIMIT 1`,
|
|
[dni]
|
|
);
|
|
|
|
if (rows.length > 0) {
|
|
await db.query(
|
|
`UPDATE c_trazabilidad_online
|
|
SET latitud = ?, longitud = ?, fecha = NOW()
|
|
WHERE id_usuario = ?`,
|
|
[String(lat), String(lng), dni]
|
|
);
|
|
return;
|
|
}
|
|
|
|
await db.query(
|
|
`INSERT INTO c_trazabilidad_online
|
|
(latitud, longitud, id_usuario, fecha)
|
|
VALUES (?, ?, ?, NOW())`,
|
|
[String(lat), String(lng), dni]
|
|
);
|
|
};
|
|
|
|
const getAvailability = async (req, res) => {
|
|
try {
|
|
const dni = String(req.user.dni);
|
|
const [rows] = await db.query(
|
|
`SELECT COUNT(*) AS total
|
|
FROM c_trazabilidad_online
|
|
WHERE id_usuario = ?`,
|
|
[dni]
|
|
);
|
|
|
|
return res.json({
|
|
success: true,
|
|
available: Number(rows[0]?.total || 0) > 0
|
|
});
|
|
} catch (error) {
|
|
console.error('Error getting availability:', error);
|
|
return res.status(500).json({ success: false, error: error.message });
|
|
}
|
|
};
|
|
|
|
const setAvailability = async (req, res) => {
|
|
try {
|
|
const coords = getCoordinatesFromBody(req.body);
|
|
|
|
if (!coords) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'missing_coords',
|
|
message: 'latitud/longitud or latitude/longitude are required'
|
|
});
|
|
}
|
|
|
|
await upsertOnlineAvailability(String(req.user.dni), coords.lat, coords.lng);
|
|
|
|
return res.json({ success: true, available: true });
|
|
} catch (error) {
|
|
console.error('Error setting availability:', error);
|
|
return res.status(500).json({ success: false, error: error.message });
|
|
}
|
|
};
|
|
|
|
const deleteAvailability = async (req, res) => {
|
|
try {
|
|
await db.query(
|
|
`DELETE FROM c_trazabilidad_online
|
|
WHERE id_usuario = ?`,
|
|
[String(req.user.dni)]
|
|
);
|
|
|
|
return res.json({ success: true, available: false });
|
|
} catch (error) {
|
|
console.error('Error deleting availability:', error);
|
|
return res.status(500).json({ success: false, error: error.message });
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
deleteAvailability,
|
|
getAvailability,
|
|
setAvailability,
|
|
upsertOnlineAvailability
|
|
};
|