Isaac105 commited on
Commit
be95052
·
1 Parent(s): 8f6d30a

deploy from github actions

Browse files
Files changed (1) hide show
  1. app/main.py +26 -5
app/main.py CHANGED
@@ -48,13 +48,21 @@ _migrations = [
48
  # credit_transactions
49
  "ALTER TABLE credit_transactions ADD COLUMN IF NOT EXISTS credit_type VARCHAR DEFAULT 'base'",
50
  "ALTER TABLE credit_transactions ADD COLUMN IF NOT EXISTS reference_id VARCHAR",
51
- # Índice único parcial para evitar acreditar 2 veces el mismo pago (solo donaciones)
 
 
 
 
 
 
 
 
 
 
 
52
  """CREATE UNIQUE INDEX IF NOT EXISTS uq_credit_tx_paypal_reference
53
  ON credit_transactions (reference_id)
54
  WHERE reference_id IS NOT NULL AND concept LIKE 'Donación PayPal%'""",
55
- """CREATE UNIQUE INDEX IF NOT EXISTS uq_credit_tx_stripe_reference
56
- ON credit_transactions (reference_id)
57
- WHERE reference_id IS NOT NULL AND concept LIKE 'Donación Stripe%' OR reference_id LIKE 'cs_%'""",
58
  # workers
59
  "ALTER TABLE workers ADD COLUMN IF NOT EXISTS user_id INTEGER",
60
  "ALTER TABLE workers ADD COLUMN IF NOT EXISTS token VARCHAR",
@@ -86,7 +94,20 @@ _migrations = [
86
  "CREATE INDEX IF NOT EXISTS idx_forum_threads_created_at ON forum_threads(created_at)",
87
  "CREATE INDEX IF NOT EXISTS idx_forum_replies_thread_id ON forum_replies(thread_id)",
88
  "CREATE INDEX IF NOT EXISTS idx_forum_replies_is_deleted ON forum_replies(is_deleted)",
89
- "CREATE INDEX IF NOT EXISTS idx_forum_replies_created_at ON forum_replies(created_at)"
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  ]
91
 
92
  from sqlalchemy import text as _sql_text
 
48
  # credit_transactions
49
  "ALTER TABLE credit_transactions ADD COLUMN IF NOT EXISTS credit_type VARCHAR DEFAULT 'base'",
50
  "ALTER TABLE credit_transactions ADD COLUMN IF NOT EXISTS reference_id VARCHAR",
51
+ # Índice único para evitar doble acreditación de pagos PayPal
52
+ # Paso 1: Eliminar filas duplicadas de PayPal manteniendo solo la más antigua por reference_id
53
+ """DELETE FROM credit_transactions
54
+ WHERE id IN (
55
+ SELECT id FROM (
56
+ SELECT id,
57
+ ROW_NUMBER() OVER (PARTITION BY reference_id ORDER BY id ASC) AS rn
58
+ FROM credit_transactions
59
+ WHERE reference_id IS NOT NULL AND concept LIKE 'Donación PayPal%'
60
+ ) t WHERE rn > 1
61
+ )""",
62
+ # Paso 2: Crear el índice único (ahora sin duplicados)
63
  """CREATE UNIQUE INDEX IF NOT EXISTS uq_credit_tx_paypal_reference
64
  ON credit_transactions (reference_id)
65
  WHERE reference_id IS NOT NULL AND concept LIKE 'Donación PayPal%'""",
 
 
 
66
  # workers
67
  "ALTER TABLE workers ADD COLUMN IF NOT EXISTS user_id INTEGER",
68
  "ALTER TABLE workers ADD COLUMN IF NOT EXISTS token VARCHAR",
 
94
  "CREATE INDEX IF NOT EXISTS idx_forum_threads_created_at ON forum_threads(created_at)",
95
  "CREATE INDEX IF NOT EXISTS idx_forum_replies_thread_id ON forum_replies(thread_id)",
96
  "CREATE INDEX IF NOT EXISTS idx_forum_replies_is_deleted ON forum_replies(is_deleted)",
97
+ "CREATE INDEX IF NOT EXISTS idx_forum_replies_created_at ON forum_replies(created_at)",
98
+ # Recalcular créditos de usuarios afectados por duplicados ya limpiados
99
+ # (cada usuario queda con la suma real de sus transacciones válidas)
100
+ """UPDATE users
101
+ SET credits = sub.total
102
+ FROM (
103
+ SELECT user_id, SUM(
104
+ CASE WHEN amount < 0 THEN amount ELSE amount END
105
+ ) AS total
106
+ FROM credit_transactions
107
+ GROUP BY user_id
108
+ ) sub
109
+ WHERE users.id = sub.user_id
110
+ AND sub.total IS NOT NULL"""
111
  ]
112
 
113
  from sqlalchemy import text as _sql_text