0169a16ada
Build docker and publish / build (20.15.1) (push) Failing after 8m17s
Co-authored-by: multica-agent <github@multica.ai>
66 lines
2.7 KiB
SQL
66 lines
2.7 KiB
SQL
-- Migration: refund commission for existing pending (status=0) withdrawals
|
|
--
|
|
-- Under the old logic, commission was deducted when a withdrawal was submitted.
|
|
-- Under the new logic, commission is only deducted on approval.
|
|
-- This migration refunds the deducted amounts back to each user so that
|
|
-- the system is in a consistent state before the new code is deployed.
|
|
--
|
|
-- Idempotency: the UPDATE only touches rows whose commission would need
|
|
-- to increase, and each execution produces the same result because
|
|
-- COALESCE(SUM(amount),0) is deterministic given the same pending set.
|
|
-- Running this script multiple times is safe only if no new pending
|
|
-- withdrawals are created between runs; deploy new code immediately after.
|
|
|
|
-- Compatibility: some historical databases missed migration 02122, so the
|
|
-- withdrawals table may not exist yet. Create it idempotently before the
|
|
-- refund logic so this migration can self-heal older installations.
|
|
CREATE TABLE IF NOT EXISTS `withdrawals` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
|
|
`user_id` BIGINT NOT NULL COMMENT 'User ID',
|
|
`amount` BIGINT NOT NULL COMMENT 'Withdrawal Amount',
|
|
`content` TEXT COMMENT 'Withdrawal Content',
|
|
`status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Withdrawal Status',
|
|
`reason` VARCHAR(500) NOT NULL DEFAULT '' COMMENT 'Rejection Reason',
|
|
`created_at` DATETIME NOT NULL COMMENT 'Creation Time',
|
|
`updated_at` DATETIME NOT NULL COMMENT 'Update Time',
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_user_id` (`user_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
INSERT IGNORE INTO `system` (`category`, `key`, `value`, `type`, `desc`, `created_at`, `updated_at`)
|
|
VALUES
|
|
('invite', 'WithdrawalMethod', '', 'string', 'withdrawal method', '2025-04-22 14:25:16.637', '2025-04-22 14:25:16.637');
|
|
|
|
-- Step 1: refund commission for all users with pending withdrawals.
|
|
UPDATE `user` u
|
|
JOIN (
|
|
SELECT user_id, COALESCE(SUM(amount), 0) AS pending_total
|
|
FROM withdrawals
|
|
WHERE status = 0
|
|
GROUP BY user_id
|
|
) p ON u.id = p.user_id
|
|
SET u.commission = u.commission + p.pending_total
|
|
WHERE p.pending_total > 0;
|
|
|
|
-- Step 2: write a migration log entry for each refunded user.
|
|
INSERT INTO system_logs (type, date, object_id, content, created_at)
|
|
SELECT
|
|
33 AS type,
|
|
DATE(NOW()) AS date,
|
|
p.user_id AS object_id,
|
|
JSON_OBJECT(
|
|
'type', 99,
|
|
'amount', p.pending_total,
|
|
'order_no', '',
|
|
'timestamp', UNIX_TIMESTAMP(NOW()) * 1000,
|
|
'note', 'migration: refund pending withdrawal commission (HIF-22)'
|
|
) AS content,
|
|
NOW() AS created_at
|
|
FROM (
|
|
SELECT user_id, COALESCE(SUM(amount), 0) AS pending_total
|
|
FROM withdrawals
|
|
WHERE status = 0
|
|
GROUP BY user_id
|
|
HAVING pending_total > 0
|
|
) p;
|