feat: Migration v0 to v1.

Move 'tasklist' table to 'taskslist' for compatibility.
Add migration sql script.
Add 'taskslist_info' view.
Add 'completed_in' to tasks.
This commit is contained in:
2025-10-02 20:32:00 +10:00
parent daf72be82e
commit 48eda11e1d
5 changed files with 151 additions and 14 deletions

View File

@@ -1,8 +1,9 @@
BEGIN;
-- Tasklist data {{{
INSERT INTO version_history (component, from_version, to_version, author) VALUES ('TASKLIST', 0, 1, 'Initial Creation');
CREATE TABLE tasklist(
CREATE TABLE taskslist(
taskid INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
profileid INTEGER NOT NULL REFERENCES user_profiles(profileid) ON DELETE CASCADE ON UPDATE CASCADE,
content TEXT NOT NULL,
@@ -11,6 +12,7 @@ CREATE TABLE tasklist(
duration INTEGER NOT NULL DEFAULT 0,
started_at TIMESTAMPTZ,
completed_at TIMESTAMPTZ,
completed_in INTEGER NOT NULL REFERENCES communities(communityid) ON DELETE SET NULL,
_timestamp TIMESTAMPTZ DEFAILT NOW()
);
CREATE TRIGGER tasklist_timestamp BEFORE UPDATE ON tasklist
@@ -18,18 +20,49 @@ CREATE TRIGGER tasklist_timestamp BEFORE UPDATE ON tasklist
CREATE TABLE nowlist(
taskid INTEGER PRIMARY KEY REFERENCES tasklist(taskid) ON DELETE CASCADE ON UPDATE CASCADE,
taskid INTEGER PRIMARY KEY REFERENCES taskslist(taskid) ON DELETE CASCADE ON UPDATE CASCADE,
last_started TIMESTAMPTZ NOT NULL
);
CREATE TABLE taskplan(
taskid INTEGER PRIMARY KEY REFERENCES tasklist(taskid) ON DELETE CASCADE ON UPDATE CASCADE,
taskid INTEGER PRIMARY KEY REFERENCES taskslist(taskid) ON DELETE CASCADE ON UPDATE CASCADE,
order_idx INTEGER NOT NULL
);
CREATE TABLE task_profiles(
profileid INTEGER PRIMARY KEY REFERENCES user_profiles(profileid) ON DELETE CASCADE ON UPDATE CASCADE
profileid INTEGER PRIMARY KEY REFERENCES user_profiles(profileid) ON DELETE CASCADE ON UPDATE CASCADE,
show_tips BOOLEAN,
show_encouragement BOOLEAN
);
CREATE VIEW
taskslist_info,
AS
SELECT
taskslist.taskid AS taskid,
taskslist.profileid AS profileid,
taskslist.content AS content,
taskslist.created_at AS created_at,
taskslist.duration AS duration,
taskslist.started_at AS started_at,
taskslist.completed_at AS completed_at,
taskslist.completed_in AS completed_in,
nowlist.last_started AS last_started,
taskplan.order_idx AS order_idx,
task_profiles.show_tips AS show_tips,
task_profiles.show_encouragement AS show_encouragement,
(taskslist.completed_at IS NOT NULL) AS is_complete,
(nowlist.taskid IS NOT NULL) AS is_running,
(taskplan.order_idx IS NOT NULL) AS is_planned,
(row_number() OVER (PARITION BY profileid ORDER BY taskid ASC)) AS tasklabel
FROM
taskslist
LEFT JOIN nowlist USING (taskid)
LEFT JOIN taskplan USING (taskid)
LEFT JOIN task_profiles USING (profileid)
WHERE deleted_at IS NULL
ORDER BY (profileid, taskid);
-- }}}
COMMIT;