Files
genesis-2/supabase/migrations/20260317185334_migraciones_asignatura.sql
roberto.silva 260cc74111
Supa-backup / run_db_backup (pull_request) Successful in 37s
CI / test (pull_request) Failing after 2m4s
Deploy Function / deploy (pull_request) Successful in 25s
Deploy Migrations to Production / deploy (pull_request) Successful in 10s
Aplicar migraciones de asignatura
fix #63
2026-03-17 12:55:11 -06:00

73 lines
2.1 KiB
PL/PgSQL

drop extension if exists "pgjwt";
alter table "public"."asignaturas" add column "prerrequisito_asignatura_id" uuid;
CREATE INDEX asignaturas_prerrequisito_idx ON public.asignaturas USING btree (prerrequisito_asignatura_id);
alter table "public"."asignaturas" add constraint "asignaturas_prerrequisito_asignatura_id_fkey" FOREIGN KEY (prerrequisito_asignatura_id) REFERENCES public.asignaturas(id) ON DELETE SET NULL not valid;
alter table "public"."asignaturas" validate constraint "asignaturas_prerrequisito_asignatura_id_fkey";
alter table "public"."asignaturas" add constraint "asignaturas_prerrequisito_self_check" CHECK (((prerrequisito_asignatura_id IS NULL) OR (prerrequisito_asignatura_id <> id))) not valid;
alter table "public"."asignaturas" validate constraint "asignaturas_prerrequisito_self_check";
set check_function_bodies = off;
CREATE OR REPLACE FUNCTION public.validar_prerrequisito_asignatura()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
declare
v_plan uuid;
v_ciclo integer;
begin
if new.prerrequisito_asignatura_id is null then
return new;
end if;
select
plan_estudio_id,
numero_ciclo
into
v_plan,
v_ciclo
from public.asignaturas
where id = new.prerrequisito_asignatura_id;
if not found then
raise exception
'La asignatura prerrequisito no existe';
end if;
if v_plan <> new.plan_estudio_id then
raise exception
'El prerrequisito debe pertenecer al mismo plan de estudio';
end if;
if new.numero_ciclo is null then
raise exception
'La asignatura debe tener numero_ciclo definido';
end if;
if v_ciclo is null then
raise exception
'El prerrequisito debe tener numero_ciclo definido';
end if;
if v_ciclo >= new.numero_ciclo then
raise exception
'El prerrequisito debe pertenecer a un ciclo menor';
end if;
return new;
end;
$function$
;
CREATE TRIGGER trg_validar_prerrequisito_asignatura BEFORE INSERT OR UPDATE OF prerrequisito_asignatura_id, numero_ciclo, plan_estudio_id ON public.asignaturas FOR EACH ROW EXECUTE FUNCTION public.validar_prerrequisito_asignatura();