Files
taptapp/drizzle/0005_redesign_ratings.sql
2025-07-22 17:03:36 +02:00

31 lines
1.2 KiB
SQL

-- Redesign ratings table for single JSON timeseries entry with soft deletes
DROP TABLE IF EXISTS rating_new;
CREATE TABLE rating_new (
id TEXT PRIMARY KEY,
participant_id TEXT NOT NULL REFERENCES participant(id),
audio_file_id TEXT NOT NULL REFERENCES audio_file(id),
final_value REAL NOT NULL,
timeseries_data TEXT NOT NULL,
created_at INTEGER NOT NULL,
deleted_at INTEGER DEFAULT NULL
);
-- Copy existing data if any (transform to new format)
INSERT INTO rating_new (id, participant_id, audio_file_id, final_value, timeseries_data, created_at, deleted_at)
SELECT
id,
participant_id,
audio_file_id,
value as final_value,
'[{"timestamp":' || timestamp || ',"value":' || value || ',"time":' || (created_at * 1000) || '}]' as timeseries_data,
created_at,
CASE WHEN is_completed = 1 THEN NULL ELSE strftime('%s', 'now') * 1000 END as deleted_at
FROM rating
WHERE is_completed = 1; -- Only keep completed ratings, mark others as deleted
-- Drop old table and rename
DROP TABLE rating;
ALTER TABLE rating_new RENAME TO rating;
-- Create unique index for active ratings only
CREATE UNIQUE INDEX participant_audio_active ON rating (participant_id, audio_file_id) WHERE deleted_at IS NULL;