Files
SDP_Lab_1_To-do-app/src/lib/tasks.ts

69 lines
1.6 KiB
TypeScript
Raw Normal View History

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);
}