Spaces:
Running
Running
deploy from github actions
Browse files- 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|