Files
amcs/migrations/_old/012_home_maintenance.sql
Hein 927a118338
Some checks failed
CI / build-and-test (push) Failing after -31m53s
feat(ui): add maintenance page for task management
* Implement maintenance page with task and log display
* Add backfill and metadata retry functionality
* Integrate grid component for project display in thoughts page
* Update types for maintenance tasks and logs
* Enhance sidebar and shell for new maintenance navigation
2026-04-26 23:13:41 +02:00

57 lines
2.1 KiB
PL/PgSQL

-- Extension 2: Home Maintenance Tracker
-- Tracks recurring maintenance tasks and logs completed work (single-user, no RLS)
CREATE TABLE IF NOT EXISTS maintenance_tasks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
category TEXT,
frequency_days INTEGER,
last_completed TIMESTAMPTZ,
next_due TIMESTAMPTZ,
priority TEXT NOT NULL DEFAULT 'medium' CHECK (priority IN ('low', 'medium', 'high', 'urgent')),
notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS maintenance_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
task_id UUID NOT NULL REFERENCES maintenance_tasks(id) ON DELETE CASCADE,
completed_at TIMESTAMPTZ NOT NULL DEFAULT now(),
performed_by TEXT,
cost DECIMAL(10, 2),
notes TEXT,
next_action TEXT
);
CREATE INDEX IF NOT EXISTS idx_maintenance_tasks_next_due ON maintenance_tasks(next_due);
CREATE INDEX IF NOT EXISTS idx_maintenance_logs_task ON maintenance_logs(task_id, completed_at DESC);
DROP TRIGGER IF EXISTS update_maintenance_tasks_updated_at ON maintenance_tasks;
CREATE TRIGGER update_maintenance_tasks_updated_at
BEFORE UPDATE ON maintenance_tasks
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE OR REPLACE FUNCTION update_task_after_maintenance_log()
RETURNS TRIGGER AS $$
DECLARE
task_frequency INTEGER;
BEGIN
SELECT frequency_days INTO task_frequency FROM maintenance_tasks WHERE id = NEW.task_id;
UPDATE maintenance_tasks
SET last_completed = NEW.completed_at,
next_due = CASE
WHEN task_frequency IS NOT NULL THEN NEW.completed_at + (task_frequency || ' days')::INTERVAL
ELSE NULL
END,
updated_at = now()
WHERE id = NEW.task_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS update_task_after_log ON maintenance_logs;
CREATE TRIGGER update_task_after_log
AFTER INSERT ON maintenance_logs
FOR EACH ROW EXECUTE FUNCTION update_task_after_maintenance_log();