Widget Devoir Finition

This commit is contained in:
alma 2026-01-24 12:46:54 +01:00
parent 6886b258ba
commit 4e0cb62d0b
2 changed files with 58 additions and 5 deletions

View File

@ -99,12 +99,40 @@ export async function GET(request: NextRequest) {
// Try to get data from cache if not forcing refresh // Try to get data from cache if not forcing refresh
if (!forceRefresh) { if (!forceRefresh) {
const cachedTasks = await getCachedTasksData(session.user.id); const cachedTasks = await getCachedTasksData(session.user.id);
if (cachedTasks) { if (cachedTasks && Array.isArray(cachedTasks)) {
// Filter out done tasks from cache as well (in case cache contains old data)
const filteredCachedTasks = cachedTasks.filter((task: any) => {
const taskStatus = task.status;
if (taskStatus !== null && taskStatus !== undefined) {
const statusNum = typeof taskStatus === 'string' ? parseInt(taskStatus, 10) : taskStatus;
if (statusNum === 5 || taskStatus === '5' || taskStatus === 'Done' || taskStatus === 'done' || taskStatus === 'DONE') {
logger.debug('[LEANTIME_TASKS] Filtering out done task from cache', {
id: task.id,
headline: task.headline,
status: taskStatus,
statusNum,
});
return false;
}
}
return true;
});
if (filteredCachedTasks.length !== cachedTasks.length) {
logger.debug('[LEANTIME_TASKS] Filtered done tasks from cache', {
before: cachedTasks.length,
after: filteredCachedTasks.length,
removed: cachedTasks.length - filteredCachedTasks.length,
});
// Update cache with filtered tasks
await cacheTasksData(session.user.id, filteredCachedTasks);
}
logger.debug('[LEANTIME_TASKS] Using cached tasks data', { logger.debug('[LEANTIME_TASKS] Using cached tasks data', {
emailHash: Buffer.from(session.user.email.toLowerCase()).toString('base64').slice(0, 12), emailHash: Buffer.from(session.user.email.toLowerCase()).toString('base64').slice(0, 12),
taskCount: Array.isArray(cachedTasks) ? cachedTasks.length : undefined, taskCount: filteredCachedTasks.length,
}); });
return NextResponse.json(cachedTasks); return NextResponse.json(filteredCachedTasks);
} }
} }
@ -165,8 +193,19 @@ export async function GET(request: NextRequest) {
const tasks = data.result const tasks = data.result
.filter((task: any) => { .filter((task: any) => {
// Filter out any task (main or subtask) that has status Done (5) // Filter out any task (main or subtask) that has status Done (5)
if (task.status === 5) { // Handle both number and string formats, and check for null/undefined
return false; const taskStatus = task.status;
if (taskStatus !== null && taskStatus !== undefined) {
const statusNum = typeof taskStatus === 'string' ? parseInt(taskStatus, 10) : taskStatus;
if (statusNum === 5 || taskStatus === '5' || taskStatus === 'Done' || taskStatus === 'done' || taskStatus === 'DONE') {
logger.debug('[LEANTIME_TASKS] Filtering out done task', {
id: task.id,
headline: task.headline,
status: taskStatus,
statusNum,
});
return false;
}
} }
// Convert both to strings for comparison to handle any type mismatches // Convert both to strings for comparison to handle any type mismatches

View File

@ -118,6 +118,19 @@ export function Duties() {
const leantimeData = await leantimeResponse.value.json(); const leantimeData = await leantimeResponse.value.json();
if (Array.isArray(leantimeData)) { if (Array.isArray(leantimeData)) {
leantimeTasks = leantimeData; leantimeTasks = leantimeData;
// Log tasks with status 5 to debug
const doneTasks = leantimeData.filter((t: Task) => {
const status = typeof t.status === 'string' ? parseInt(t.status, 10) : t.status;
return status === 5 || t.status === '5' || t.status === 'Done' || t.status === 'done' || t.status === 'DONE';
});
if (doneTasks.length > 0) {
console.warn('[Devoirs Widget] ⚠️ Received done tasks from Leantime API:', doneTasks.map((t: Task) => ({
id: t.id,
headline: t.headline,
status: t.status,
statusType: typeof t.status,
})));
}
} }
} else { } else {
console.warn('Failed to fetch Leantime tasks:', leantimeResponse); console.warn('Failed to fetch Leantime tasks:', leantimeResponse);
@ -141,6 +154,7 @@ export function Duties() {
leantime: leantimeTasks.length, leantime: leantimeTasks.length,
twentyCrm: twentyCrmTasks.length, twentyCrm: twentyCrmTasks.length,
total: allTasks.length, total: allTasks.length,
leantimeStatuses: leantimeTasks.map((t: Task) => ({ id: t.id, status: t.status, statusType: typeof t.status })),
}); });
if (allTasks.length === 0) { if (allTasks.length === 0) {