CREATE TABLE task_activity_type (
  task_activity_type_id int PRIMARY KEY,
  code text NOT NULL,
  template text NOT NULL
);

INSERT INTO task_activity_type (task_activity_type_id, code, template) VALUES
  (1, 'task_added_to_task_group', 'added this task to {{ index .Data "TaskGroup" }}'),
  (2, 'task_moved_to_task_group', 'moved this task from {{ index .Data "PrevTaskGroup" }} to {{ index .Data "CurTaskGroup"}}'),
  (3, 'task_mark_complete', 'marked this task complete'),
  (4, 'task_mark_incomplete', 'marked this task incomplete'),
  (5, 'task_due_date_changed', 'changed the due date to {{ index .Data "DueDate" }}'),
  (6, 'task_due_date_added', 'moved this task from {{ index .Data "PrevTaskGroup" }} to {{ index .Data "CurTaskGroup"}}'),
  (7, 'task_due_date_removed', 'moved this task from {{ index .Data "PrevTaskGroup" }} to {{ index .Data "CurTaskGroup"}}'),
  (8, 'task_checklist_changed', 'moved this task from {{ index .Data "PrevTaskGroup" }} to {{ index .Data "CurTaskGroup"}}'),
  (9, 'task_checklist_added', 'moved this task from {{ index .Data "PrevTaskGroup" }} to {{ index .Data "CurTaskGroup"}}'),
  (10, 'task_checklist_removed', 'moved this task from {{ index .Data "PrevTaskGroup" }} to {{ index .Data "CurTaskGroup"}}');

CREATE TABLE task_activity (
  task_activity_id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
  active boolean NOT NULL DEFAULT true,
  task_id uuid NOT NULL REFERENCES task(task_id),
  created_at timestamptz NOT NULL,
  caused_by uuid NOT NULL,
  activity_type_id int NOT NULL REFERENCES task_activity_type(task_activity_type_id),
  data jsonb
);

