95 lines
2.3 KiB
JavaScript
95 lines
2.3 KiB
JavaScript
const { groupTasksByDay } = require('./grouping');
|
|
const { serializeTasks } = require('../core/serializers');
|
|
const { computeTaskMetrics } = require('../queries/metrics-computation');
|
|
|
|
async function handleRecurringTasks(userId, queryType) {
|
|
return;
|
|
}
|
|
|
|
async function buildGroupedTasks(
|
|
tasks,
|
|
queryType,
|
|
groupBy,
|
|
maxDays,
|
|
orderBy,
|
|
timezone,
|
|
language = 'en'
|
|
) {
|
|
if (queryType !== 'upcoming' || groupBy !== 'day') {
|
|
return null;
|
|
}
|
|
|
|
const days = maxDays ? parseInt(maxDays, 10) : 7;
|
|
const dayGroupingOrderBy = orderBy || 'due_date:asc';
|
|
|
|
return await groupTasksByDay(
|
|
tasks,
|
|
timezone,
|
|
days,
|
|
dayGroupingOrderBy,
|
|
language
|
|
);
|
|
}
|
|
|
|
async function serializeGroupedTasks(groupedTasks, timezone) {
|
|
if (!groupedTasks) return null;
|
|
|
|
const serialized = {};
|
|
for (const [groupName, groupTasks] of Object.entries(groupedTasks)) {
|
|
serialized[groupName] = await serializeTasks(groupTasks, timezone);
|
|
}
|
|
return serialized;
|
|
}
|
|
|
|
async function addDashboardLists(
|
|
response,
|
|
userId,
|
|
timezone,
|
|
queryType,
|
|
includeLists,
|
|
serializationOptions
|
|
) {
|
|
if (queryType !== 'today' || includeLists !== 'true') {
|
|
return;
|
|
}
|
|
|
|
const metricsData = await computeTaskMetrics(userId, timezone);
|
|
|
|
const listKeys = [
|
|
'tasks_in_progress',
|
|
'tasks_today_plan',
|
|
'tasks_due_today',
|
|
'tasks_overdue',
|
|
'suggested_tasks',
|
|
'tasks_completed_today',
|
|
];
|
|
|
|
const serializedLists = {};
|
|
|
|
for (const key of listKeys) {
|
|
const metricsKey =
|
|
key === 'tasks_today_plan' ? 'today_plan_tasks' : key;
|
|
serializedLists[key] = await serializeTasks(
|
|
metricsData[metricsKey],
|
|
timezone,
|
|
serializationOptions
|
|
);
|
|
}
|
|
|
|
Object.assign(response, serializedLists);
|
|
response.dashboard_lists = serializedLists;
|
|
}
|
|
|
|
function addPerformanceHeaders(res, startTime, queryStats) {
|
|
const totalTime = Date.now() - startTime;
|
|
res.set('X-Response-Time', `${totalTime}ms`);
|
|
res.set('X-Query-Count', queryStats.count.toString());
|
|
}
|
|
|
|
module.exports = {
|
|
handleRecurringTasks,
|
|
buildGroupedTasks,
|
|
serializeGroupedTasks,
|
|
addDashboardLists,
|
|
addPerformanceHeaders,
|
|
};
|