jam-cloud/db/up/user_syncs_and_quick_mix.sql

69 lines
3.0 KiB
SQL

ALTER TABLE recordings ADD COLUMN has_stream_mix BOOLEAN DEFAULT FALSE NOT NULL;
ALTER TABLE recordings ADD COLUMN has_final_mix BOOLEAN DEFAULT FALSE NOT NULL;
UPDATE recordings SET has_final_mix = TRUE WHERE (SELECT count(mixes.id) FROM mixes WHERE recording_id = recordings.id) > 0;
CREATE TABLE quick_mixes (
id BIGINT PRIMARY KEY,
next_part_to_upload INTEGER NOT NULL DEFAULT 0,
fully_uploaded BOOLEAN NOT NULL DEFAULT FALSE,
upload_id VARCHAR(1024),
file_offset BIGINT DEFAULT 0,
is_part_uploading BOOLEAN NOT NULL DEFAULT FALSE,
upload_failures INTEGER DEFAULT 0,
part_failures INTEGER DEFAULT 0,
ogg_md5 VARCHAR(100),
ogg_length INTEGER,
ogg_url VARCHAR(1000),
mp3_md5 VARCHAR(100),
mp3_length INTEGER,
mp3_url VARCHAR(1000),
error_count INTEGER NOT NULL DEFAULT 0,
error_reason TEXT,
error_detail TEXT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
started_at TIMESTAMP,
completed_at TIMESTAMP,
completed BOOLEAN NOT NULL DEFAULT FALSE,
should_retry BOOLEAN NOT NULL DEFAULT FALSE,
cleaned BOOLEAN NOT NULL DEFAULT FALSE,
user_id VARCHAR(64) REFERENCES users(id) ON DELETE SET NULL,
recording_id VARCHAR(64) REFERENCES recordings(id) ON DELETE CASCADE
);
ALTER TABLE quick_mixes ALTER COLUMN id SET DEFAULT nextval('tracks_next_tracker_seq');
CREATE VIEW user_syncs AS
SELECT b.id AS recorded_track_id,
CAST(NULL as BIGINT) AS mix_id,
CAST(NULL as BIGINT) as quick_mix_id,
b.id AS unified_id,
a.user_id AS user_id,
b.fully_uploaded,
recordings.created_at AS created_at,
recordings.id AS recording_id
FROM recorded_tracks a INNER JOIN recordings ON a.recording_id = recordings.id AND duration IS NOT NULL AND all_discarded = FALSE INNER JOIN recorded_tracks b ON a.recording_id = b.recording_id
UNION ALL
SELECT CAST(NULL as BIGINT) AS recorded_track_id,
mixes.id AS mix_id,
CAST(NULL as BIGINT) AS quick_mix_id,
mixes.id AS unified_id,
claimed_recordings.user_id AS user_id,
NULL as fully_uploaded,
recordings.created_at AS created_at,
recordings.id AS recording_id
FROM mixes INNER JOIN recordings ON mixes.recording_id = recordings.id INNER JOIN claimed_recordings ON recordings.id = claimed_recordings.recording_id WHERE claimed_recordings.discarded = FALSE
UNION ALL
SELECT CAST(NULL as BIGINT) AS recorded_track_id,
CAST(NULL as BIGINT) AS mix_id,
quick_mixes.id AS quick_mix_id,
quick_mixes.id AS unified_id,
quick_mixes.user_id,
quick_mixes.fully_uploaded,
recordings.created_at AS created_at,
recordings.id AS recording_id
FROM quick_mixes INNER JOIN recordings ON quick_mixes.recording_id = recordings.id AND duration IS NOT NULL AND all_discarded = FALSE;
ALTER TABLE recordings ADD COLUMN first_quick_mix_id BIGINT REFERENCES quick_mixes(id) ON DELETE SET NULL;