From 260cc74111fe60796782d39a6daa16bad69c28a4 Mon Sep 17 00:00:00 2001 From: "Roberto.silva" Date: Tue, 17 Mar 2026 12:55:11 -0600 Subject: [PATCH] Aplicar migraciones de asignatura fix #63 --- .../20260317184516_remote_schema.sql | 3 + .../20260317185334_migraciones_asignatura.sql | 72 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 supabase/migrations/20260317184516_remote_schema.sql create mode 100644 supabase/migrations/20260317185334_migraciones_asignatura.sql diff --git a/supabase/migrations/20260317184516_remote_schema.sql b/supabase/migrations/20260317184516_remote_schema.sql new file mode 100644 index 0000000..5d0873b --- /dev/null +++ b/supabase/migrations/20260317184516_remote_schema.sql @@ -0,0 +1,3 @@ +create extension if not exists "pgjwt" with schema "extensions"; + + diff --git a/supabase/migrations/20260317185334_migraciones_asignatura.sql b/supabase/migrations/20260317185334_migraciones_asignatura.sql new file mode 100644 index 0000000..64d53b3 --- /dev/null +++ b/supabase/migrations/20260317185334_migraciones_asignatura.sql @@ -0,0 +1,72 @@ +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(); + +