You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
senzapaura_es/drizzle/0041_interaccion_unificada.sql

33 lines
1.6 KiB

-- Conserva cada puntuación y su fecha. El like es independiente y empieza desmarcado.
CREATE TEMP TABLE valoraciones_antes_de_likes ON COMMIT DROP AS
SELECT usuario_id, cancion_id, puntuacion, creada_en, actualizada_en FROM valoracion;
--> statement-breakpoint
ALTER TABLE "valoracion" ADD COLUMN "like" boolean DEFAULT false NOT NULL;
--> statement-breakpoint
ALTER TABLE "valoracion" ALTER COLUMN "puntuacion" DROP NOT NULL;
--> statement-breakpoint
ALTER TABLE "valoracion" RENAME COLUMN "puntuacion" TO "value";
--> statement-breakpoint
ALTER TABLE "valoracion" RENAME COLUMN "creada_en" TO "date";
--> statement-breakpoint
-- Recoge cualquier like recibido durante la transición sin sobrescribir valoraciones.
INSERT INTO "valoracion" ("usuario_id", "cancion_id", "date", "like", "value")
SELECT "usuario_id", "cancion_id", "creado_en", true, NULL FROM "me_gusta"
ON CONFLICT ("usuario_id", "cancion_id") DO UPDATE SET "like" = true;
--> statement-breakpoint
-- Verifica la copia antes de retirar la tabla provisional. Toda la migración es transaccional.
DO $$ BEGIN
IF EXISTS (
SELECT usuario_id, cancion_id, puntuacion, creada_en, actualizada_en FROM valoraciones_antes_de_likes
EXCEPT
SELECT usuario_id, cancion_id, "value", "date", actualizada_en FROM valoracion
) THEN RAISE EXCEPTION 'Las valoraciones históricas deben permanecer intactas'; END IF;
IF EXISTS (
SELECT 1 FROM "me_gusta" m LEFT JOIN "valoracion" v
ON v.usuario_id = m.usuario_id AND v.cancion_id = m.cancion_id
WHERE v."like" IS DISTINCT FROM true
) THEN RAISE EXCEPTION 'Faltan likes por trasladar'; END IF;
END $$;
--> statement-breakpoint
DROP TABLE "me_gusta";

Powered by TurnKey Linux.