-- Deploy camper:add_media to pg
-- requires: roles
-- requires: schema_camper
-- requires: media
-- requires: media_content
-- requires: media_type

begin;

set search_path to camper, public;

create or replace function add_media(company integer, filename text, media_type media_type, content bytea) returns integer as
$$
declare
	hash bytea;
	mid integer;
begin
	insert into media_content (media_type, bytes)
	values (media_type, content)
	on conflict (content_hash) do update
	set media_type = excluded.media_type
	returning content_hash into hash
	;

	insert into media (company_id, original_filename, content_hash)
	values (company, filename, hash)
	returning media_id into mid
	;

	return mid;
end
$$
	language plpgsql
;

revoke execute on function add_media(integer, text, media_type, bytea) from public;
grant execute on function add_media(integer, text, media_type, bytea) to admin;

commit;