69 lines
1.6 KiB
TypeScript
69 lines
1.6 KiB
TypeScript
import db from './db';
|
|
import { Task, TaskStatus, computeIsOverdue } from './types';
|
|
export function getTasks(sortBy: 'due_date' | 'topic' | 'status' = 'due_date'): Task[] {
|
|
|
|
const validSortColumns = ['due_date', 'topic', 'status'];
|
|
const sortColumn = validSortColumns.includes(sortBy) ? sortBy : 'due_date';
|
|
|
|
const sql = `SELECT * FROM tasks WHERE is_archived = 0 ORDER BY ${sortColumn} ASC`;
|
|
const tasks = db.prepare(sql).all() as Task[];
|
|
|
|
return tasks.map(task => ({
|
|
...task,
|
|
is_overdue: computeIsOverdue(task.due_date, task.status)
|
|
}));
|
|
}
|
|
|
|
export function createTask(task: {
|
|
title: string;
|
|
description?: string;
|
|
due_date: string;
|
|
topic: string;
|
|
status?: TaskStatus;
|
|
}) {
|
|
const stmt = db.prepare(`
|
|
INSERT INTO tasks (title, description, due_date, topic, status)
|
|
VALUES (?, ?, ?, ?, ?)
|
|
`);
|
|
|
|
return stmt.run(
|
|
task.title,
|
|
task.description || '',
|
|
task.due_date,
|
|
task.topic,
|
|
task.status || 'Todo'
|
|
);
|
|
}
|
|
|
|
|
|
export function updateTask(
|
|
id: number,
|
|
task: {
|
|
title: string;
|
|
description?: string;
|
|
due_date: string;
|
|
topic: string;
|
|
status: TaskStatus;
|
|
}
|
|
) {
|
|
const stmt = db.prepare(`
|
|
UPDATE tasks
|
|
SET title = ?, description = ?, due_date = ?, topic = ?, status = ?
|
|
WHERE id = ?
|
|
`);
|
|
|
|
return stmt.run(
|
|
task.title,
|
|
task.description || '',
|
|
task.due_date,
|
|
task.topic,
|
|
task.status,
|
|
id
|
|
);
|
|
}
|
|
|
|
|
|
export function archiveTask(id: number) {
|
|
return db.prepare(`UPDATE tasks SET is_archived = 1 WHERE id = ?`).run(id);
|
|
}
|