Add partial creation function for note_audio

This commit is contained in:
Eli Ribble 2025-12-21 08:58:23 -07:00
parent b92306a8b7
commit 58f5afccc9

View file

@ -80,11 +80,89 @@ CREATE TABLE note_image_breadcrumb (
PRIMARY KEY (note_image_version, note_image_uuid, position)
);
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION insert_note_audio(
p_uuid UUID,
p_created TIMESTAMP WITHOUT TIME ZONE,
p_creator_id INTEGER,
p_deleted TIMESTAMP WITHOUT TIME ZONE,
p_deletor_id INTEGER,
p_duration REAL,
p_organization_id INTEGER,
p_transcription TEXT,
p_transcription_user_edited BOOLEAN
) RETURNS TABLE(row_inserted BOOLEAN, version_num INTEGER) AS $$
DECLARE
v_next_version INTEGER;
v_changes_exist BOOLEAN;
BEGIN
-- Check if changes exist
SELECT NOT EXISTS (
SELECT 1 FROM note_audio lv
WHERE lv.uuid = p_uuid
AND lv.created IS NOT DISTINCT FROM p_created
AND lv.creator_id IS NOT DISTINCT FROM p_creator_id
AND lv.deleted IS NOT DISTINCT FROM p_deleted
AND lv.deletor_id IS NOT DISTINCT FROM p_deletor_id
AND lv.duration IS NOT DISTINCT FROM p_duration
AND lv.organization_id IS NOT DISTINCT FROM p_organization_id
AND lv.transcription IS NOT DISTINCT FROM p_transcription
AND lv.transcription_user_edited IS NOT DISTINCT FROM p_transcription_user_edited
ORDER BY VERSION DESC LIMIT 1
) INTO v_changes_exist;
-- If no changes, return false with current version
IF NOT v_changes_exist THEN
RETURN QUERY
SELECT
FALSE AS row_inserted,
(SELECT VERSION FROM note_audio
WHERE uuid = p_uuid ORDER BY VERSION DESC LIMIT 1) AS version_num;
RETURN;
END IF;
-- Calculate next version
SELECT COALESCE(MAX(VERSION) + 1, 1) INTO v_next_version
FROM note_audio
WHERE uuid = p_uuid;
-- Insert new version
INSERT INTO note_audio (
uuid,
created,
creator_id,
deleted,
deletor_id,
duration,
organization_id,
transcription,
transcription_user_edited
) VALUES (
p_uuid,
p_created,
p_creator_id,
p_deleted,
p_deletor_id,
p_duration,
p_organization_id,
p_transcription,
p_transcription_user_edited
);
-- Return success with new version
RETURN QUERY SELECT TRUE AS row_inserted, v_next_version AS version_num;
END;
$$ LANGUAGE plpgsql;
-- +goose StatementEnd
-- +goose Down
DROP TABLE note_image_breadcrumb;
DROP TABLE note_image_data;
DROP TABLE note_image;
DROP TYPE ImageDataType
DROP TYPE ImageDataType;
DROP TABLE note_audio_breadcrumb;
DROP TABLE note_audio_data;
DROP TABLE note_audio;