diff --git a/server/db-schema-test.js b/server/db-schema-test.js index 99c29cb..7889e90 100644 --- a/server/db-schema-test.js +++ b/server/db-schema-test.js @@ -349,6 +349,37 @@ const MIGRATIONS_SQL = { 17: ` UPDATE calendar_events SET icon = 'tooth' WHERE icon = 'drill'; `, + 18: ` + CREATE TABLE tasks_new ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + description TEXT, + category TEXT NOT NULL DEFAULT 'Sonstiges', + priority TEXT NOT NULL DEFAULT 'none' + CHECK(priority IN ('none', 'low', 'medium', 'high', 'urgent')), + status TEXT NOT NULL DEFAULT 'open' + CHECK(status IN ('open', 'in_progress', 'done', 'archived')), + due_date TEXT, + due_time TEXT, + assigned_to INTEGER REFERENCES users(id) ON DELETE SET NULL, + created_by INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, + is_recurring INTEGER NOT NULL DEFAULT 0, + recurrence_rule TEXT, + parent_task_id INTEGER REFERENCES tasks(id) ON DELETE CASCADE, + created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), + updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')) + ); + + INSERT INTO tasks_new + SELECT * FROM tasks; + + DROP TABLE tasks; + ALTER TABLE tasks_new RENAME TO tasks; + + CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status); + CREATE INDEX IF NOT EXISTS idx_tasks_assigned ON tasks(assigned_to); + CREATE INDEX IF NOT EXISTS idx_tasks_parent ON tasks(parent_task_id); + `, }; export { MIGRATIONS_SQL }; diff --git a/server/db.js b/server/db.js index a42d3a7..30d81a8 100644 --- a/server/db.js +++ b/server/db.js @@ -775,6 +775,41 @@ const MIGRATIONS = [ UPDATE calendar_events SET icon = 'tooth' WHERE icon = 'drill'; `, }, + { + version: 25, + description: 'Allow archived status for tasks', + up: ` + CREATE TABLE tasks_new ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + description TEXT, + category TEXT NOT NULL DEFAULT 'Sonstiges', + priority TEXT NOT NULL DEFAULT 'none' + CHECK(priority IN ('none', 'low', 'medium', 'high', 'urgent')), + status TEXT NOT NULL DEFAULT 'open' + CHECK(status IN ('open', 'in_progress', 'done', 'archived')), + due_date TEXT, + due_time TEXT, + assigned_to INTEGER REFERENCES users(id) ON DELETE SET NULL, + created_by INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, + is_recurring INTEGER NOT NULL DEFAULT 0, + recurrence_rule TEXT, + parent_task_id INTEGER REFERENCES tasks(id) ON DELETE CASCADE, + created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), + updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')) + ); + + INSERT INTO tasks_new + SELECT * FROM tasks; + + DROP TABLE tasks; + ALTER TABLE tasks_new RENAME TO tasks; + + CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status); + CREATE INDEX IF NOT EXISTS idx_tasks_assigned ON tasks(assigned_to); + CREATE INDEX IF NOT EXISTS idx_tasks_parent ON tasks(parent_task_id); + `, + }, ]; /** diff --git a/server/routes/tasks.js b/server/routes/tasks.js index 65afef5..788f9ae 100644 --- a/server/routes/tasks.js +++ b/server/routes/tasks.js @@ -19,7 +19,7 @@ const router = express.Router(); // -------------------------------------------------------- const VALID_PRIORITIES = ['none', 'low', 'medium', 'high', 'urgent']; -const VALID_STATUSES = ['open', 'in_progress', 'done']; +const VALID_STATUSES = ['open', 'in_progress', 'done', 'archived']; const VALID_CATEGORIES = ['household', 'school', 'shopping', 'repair', 'health', 'finance', 'leisure', 'misc'];