#!/usr/bin/env node
/**
* Check database for all task dependencies
*/
import pkg from 'pg';
const { Client } = pkg;
const client = new Client({
host: 'localhost',
port: 5433,
database: 'pg-litefarm',
user: 'postgres',
password: 'postgres',
});
const farmId = '15758606-cb0d-11f0-a430-eed6bc26dc01';
const userId = '3f930e96-4782-4e53-ac9a-3e855f2e7a54'; // Florian Test user_id
console.log('π Checking LiteFarm database dependencies...\n');
await client.connect();
// 1. Check tasks
console.log('π TASKS:');
const tasksResult = await client.query(
`SELECT task_id, task_type_id, due_date, complete_date, abandon_date, deleted
FROM task
WHERE owner_user_id = $1
ORDER BY created_at DESC
LIMIT 5`,
[userId]
);
console.log(`Found ${tasksResult.rows.length} tasks for user`);
tasksResult.rows.forEach(t => {
console.log(` - Task ${String(t.task_id).substring(0, 8)}: type_id=${t.task_type_id}, due=${t.due_date?.toISOString().split('T')[0]}, complete=${t.complete_date ? 'YES' : 'NO'}, deleted=${t.deleted}`);
});
console.log('');
// 2. Check task types
console.log('π·οΈ TASK TYPES:');
const taskTypesResult = await client.query(
`SELECT task_type_id, task_name, task_translation_key, deleted, farm_id
FROM task_type
WHERE task_type_id IN (1, 11, 8) OR farm_id = $1`,
[farmId]
);
console.log(`Found ${taskTypesResult.rows.length} task types`);
taskTypesResult.rows.forEach(tt => {
console.log(` - Type ${tt.task_type_id}: ${tt.task_name} (${tt.task_translation_key}), deleted=${tt.deleted}, farm_id=${tt.farm_id || 'DEFAULT'}`);
});
console.log('');
// 3. Check locations
console.log('π LOCATIONS:');
const locationsResult = await client.query(
`SELECT location_id, name, deleted
FROM location
WHERE farm_id = $1
ORDER BY created_at DESC`,
[farmId]
);
console.log(`Found ${locationsResult.rows.length} locations for farm`);
locationsResult.rows.forEach(l => {
console.log(` - ${l.name}: ${String(l.location_id).substring(0, 8)}..., deleted=${l.deleted}`);
});
console.log('');
// 4. Check management plans
console.log('π± MANAGEMENT PLANS:');
const mgmtPlansResult = await client.query(
`SELECT management_plan_id, name, deleted
FROM management_plan
WHERE deleted = false
LIMIT 10`
);
console.log(`Found ${mgmtPlansResult.rows.length} active management plans (across all farms)`);
mgmtPlansResult.rows.forEach(mp => {
console.log(` - ${mp.name}: ${String(mp.management_plan_id).substring(0, 8)}...`);
});
console.log('');
// 5. Check user farm role & permissions
console.log('π€ USER PERMISSIONS:');
const userFarmResult = await client.query(
`SELECT uf.role_id, r.role
FROM "userFarm" uf
JOIN role r ON r.role_id = uf.role_id
WHERE uf.user_id = $1 AND uf.farm_id = $2`,
[userId, farmId]
);
if (userFarmResult.rows.length > 0) {
console.log(`User role: ${userFarmResult.rows[0].role} (role_id: ${userFarmResult.rows[0].role_id})`);
} else {
console.log('β User not found in userFarm table!');
}
console.log('');
// 6. Check task locations (join table)
console.log('πΊοΈ TASK LOCATIONS:');
const taskLocationsResult = await client.query(
`SELECT tl.task_id, tl.location_id, l.name
FROM task_location tl
JOIN location l ON l.location_id = tl.location_id
WHERE tl.task_id IN (
SELECT task_id FROM task WHERE owner_user_id = $1 LIMIT 5
)`,
[userId]
);
console.log(`Found ${taskLocationsResult.rows.length} task-location mappings`);
taskLocationsResult.rows.forEach(tl => {
console.log(` - Task ${String(tl.task_id).substring(0, 8)} β ${tl.name} (${String(tl.location_id).substring(0, 8)})`);
});
console.log('');
// 7. Check if tasks have required field_work_task entries
console.log('π§ FIELD WORK TASKS:');
const fieldWorkResult = await client.query(
`SELECT fwt.task_id, fwt.field_work_type_id
FROM field_work_task fwt
WHERE fwt.task_id IN (
SELECT task_id FROM task WHERE owner_user_id = $1 LIMIT 5
)`,
[userId]
);
console.log(`Found ${fieldWorkResult.rows.length} field_work_task entries`);
fieldWorkResult.rows.forEach(fwt => {
console.log(` - Task ${String(fwt.task_id).substring(0, 8)}: field_work_type_id=${fwt.field_work_type_id}`);
});
console.log('');
await client.end();
console.log('β
Database check complete!');