42 lines
1.6 KiB
MySQL
42 lines
1.6 KiB
MySQL
|
-- we are moving recording functionality from streams to vods
|
||
|
|
||
|
-- delete outdated
|
||
|
DROP FUNCTION IF EXISTS public.tg__add_record_job CASCADE;
|
||
|
DROP TRIGGER IF EXISTS stream_update ON api.streams;
|
||
|
DROP TRIGGER IF EXISTS stream_create ON api.streams;
|
||
|
|
||
|
-- We create a function which lets Postgrest's automation user create jobs in Graphile Worker.
|
||
|
-- Normally only the database owner, in our case `postgres`, can add jobs due to RLS in graphile_worker tables.
|
||
|
-- Under the advice of graphile_worker author, we can use a SECURITY DEFINER wrapper function.
|
||
|
-- @see https://worker.graphile.org/docs/sql-add-job#graphile_workeradd_job:~:text=graphile_worker.add_job(...),that%20are%20necessary.)
|
||
|
-- @see https://discord.com/channels/489127045289476126/1179293106336694333/1179605043729670306
|
||
|
-- @see https://discord.com/channels/489127045289476126/498852330754801666/1067707497235873822
|
||
|
CREATE FUNCTION public.tg__add_record_job() RETURNS trigger
|
||
|
LANGUAGE plpgsql SECURITY DEFINER
|
||
|
SET search_path TO 'pg_catalog', 'public', 'pg_temp'
|
||
|
AS $$
|
||
|
begin
|
||
|
PERFORM graphile_worker.add_job('record', json_build_object(
|
||
|
'url', NEW.url,
|
||
|
'vod_id', NEW.id
|
||
|
), max_attempts := 12);
|
||
|
return NEW;
|
||
|
end;
|
||
|
$$;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
-- when a vod is updated, we add a job in graphile to update_discord_message
|
||
|
CREATE TRIGGER vod_update
|
||
|
AFTER UPDATE ON api.vods
|
||
|
FOR EACH ROW
|
||
|
EXECUTE PROCEDURE public.tg__update_discord_message('update_discord_message');
|
||
|
|
||
|
-- when a vod is created, we add a 'record' job in graphile-worker
|
||
|
CREATE TRIGGER vod_create
|
||
|
AFTER INSERT ON api.vods
|
||
|
FOR EACH ROW
|
||
|
EXECUTE PROCEDURE public.tg__add_record_job('record');
|
||
|
|