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.
33 lines
1.6 KiB
33 lines
1.6 KiB
|
3 weeks ago
|
-- 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";
|