File size: 5,685 Bytes
79c0eb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import os
import sys
from sqlalchemy import text
from database import engine

def run_migrations():
    print("Connecting to database...")
    with engine.connect() as conn:
        trans = conn.begin()
        try:
            # 1. Add estado_academico column to fact_rendimiento_academico
            print("Adding column estado_academico to fact_rendimiento_academico...")
            conn.execute(text("""
                ALTER TABLE public.fact_rendimiento_academico 
                ADD COLUMN IF NOT EXISTS estado_academico VARCHAR(50);
            """))

            # 2. De-duplicate fact_marketing
            print("De-duplicating public.fact_marketing...")
            conn.execute(text("""
                DELETE FROM public.fact_marketing a USING public.fact_marketing b 
                WHERE a.id_hecho_mkt < b.id_hecho_mkt 
                AND a.id_modulo = b.id_modulo 
                AND a.id_tiempo = b.id_tiempo;
            """))
            
            # Add constraint if not exists
            print("Adding constraint uq_fact_marketing_modulo_tiempo...")
            conn.execute(text("""
                ALTER TABLE public.fact_marketing 
                DROP CONSTRAINT IF EXISTS unique_modulo_tiempo;
            """))
            conn.execute(text("""
                ALTER TABLE public.fact_marketing 
                DROP CONSTRAINT IF EXISTS uq_fact_marketing_modulo_tiempo;
            """))
            conn.execute(text("""
                ALTER TABLE public.fact_marketing 
                ADD CONSTRAINT uq_fact_marketing_modulo_tiempo UNIQUE (id_modulo, id_tiempo);
            """))

            # 3. De-duplicate fact_rentabilidad (public.fact_rentabilidad)
            print("De-duplicating public.fact_rentabilidad...")
            conn.execute(text("""
                DELETE FROM public.fact_rentabilidad a USING public.fact_rentabilidad b 
                WHERE a.id_hecho_rent < b.id_hecho_rent 
                AND a.id_categoria = b.id_categoria 
                AND a.id_tiempo = b.id_tiempo;
            """))
            print("Adding constraint uq_fact_rentabilidad_categoria_tiempo...")
            conn.execute(text("""
                ALTER TABLE public.fact_rentabilidad 
                DROP CONSTRAINT IF EXISTS uq_fact_rentabilidad_categoria_tiempo;
            """))
            conn.execute(text("""
                ALTER TABLE public.fact_rentabilidad 
                ADD CONSTRAINT uq_fact_rentabilidad_categoria_tiempo UNIQUE (id_categoria, id_tiempo);
            """))

            # 4. De-duplicate fact_rendimiento_academico
            print("De-duplicating public.fact_rendimiento_academico...")
            conn.execute(text("""
                DELETE FROM public.fact_rendimiento_academico a USING public.fact_rendimiento_academico b 
                WHERE a.id_hecho_aca < b.id_hecho_aca 
                AND a.id_estudiante = b.id_estudiante 
                AND a.id_modulo = b.id_modulo;
            """))
            print("Adding constraint uq_fact_rendimiento_estudiante_modulo...")
            conn.execute(text("""
                ALTER TABLE public.fact_rendimiento_academico 
                DROP CONSTRAINT IF EXISTS uq_fact_rendimiento_estudiante_modulo;
            """))
            conn.execute(text("""
                ALTER TABLE public.fact_rendimiento_academico 
                ADD CONSTRAINT uq_fact_rendimiento_estudiante_modulo UNIQUE (id_estudiante, id_modulo);
            """))

            # 5. De-duplicate fact_situacion_financiera
            print("De-duplicating public.fact_situacion_financiera...")
            conn.execute(text("""
                DELETE FROM public.fact_situacion_financiera a USING public.fact_situacion_financiera b 
                WHERE a.id_hecho_fin < b.id_hecho_fin 
                AND a.id_estudiante = b.id_estudiante 
                AND a.id_tiempo = b.id_tiempo;
            """))
            print("Adding constraint uq_fact_situacion_financiera_estudiante_tiempo...")
            conn.execute(text("""
                ALTER TABLE public.fact_situacion_financiera 
                DROP CONSTRAINT IF EXISTS uq_fact_situacion_financiera_estudiante_tiempo;
            """))
            conn.execute(text("""
                ALTER TABLE public.fact_situacion_financiera 
                ADD CONSTRAINT uq_fact_situacion_financiera_estudiante_tiempo UNIQUE (id_estudiante, id_tiempo);
            """))

            # 6. De-duplicate fact_cobranzas_proyectadas
            print("De-duplicating public.fact_cobranzas_proyectadas...")
            conn.execute(text("""
                DELETE FROM public.fact_cobranzas_proyectadas a USING public.fact_cobranzas_proyectadas b 
                WHERE a.id_hecho_cobro < b.id_hecho_cobro 
                AND a.id_estudiante = b.id_estudiante 
                AND a.id_tiempo = b.id_tiempo;
            """))
            print("Adding constraint uq_fact_cobranzas_proyectadas_estudiante_tiempo...")
            conn.execute(text("""
                ALTER TABLE public.fact_cobranzas_proyectadas 
                DROP CONSTRAINT IF EXISTS uq_fact_cobranzas_proyectadas_estudiante_tiempo;
            """))
            conn.execute(text("""
                ALTER TABLE public.fact_cobranzas_proyectadas 
                ADD CONSTRAINT uq_fact_cobranzas_proyectadas_estudiante_tiempo UNIQUE (id_estudiante, id_tiempo);
            """))

            trans.commit()
            print("Migrations successfully applied!")
        except Exception as e:
            trans.rollback()
            print(f"Error during migration: {e}")
            sys.exit(1)

if __name__ == "__main__":
    run_migrations()