Files
NightSpire/web-next/sql/battlepay_sumup.sql
T
Inna 476e5dba87 sql: consolidar en web-next/sql y tirar lo del foro viejo
Repaso de la carpeta sql/ heredada. De sus 8 ficheros:

- forum_schema.sql y forum_views.sql: SE BORRAN. Son del foro anterior, que
  af707ad reemplazó por el port de FusionCMS (web-next/sql/forum_fusion.sql).
  El primero crea `forums`, tabla que ya no existe (el código usa forum_forums);
  el segundo añade un contador `views` que ni existe en prod ni usa el código.
  Quedan en el historial por si hicieran falta.
- achievement_points.sql, battlepay_sumup.sql, seed_news.sql y
  seed_recruit_rewards.sql: siguen siendo válidos y se mueven a web-next/sql/,
  que es la carpeta viva. El primero pasa a achievement_points_world.sql para no
  chocar con la copia de django_wow que usa la armería; cada uno avisa del otro.
- rename_home_prefix.sql y drop_home_securitytoken_authuser_fk.sql: se quedan en
  sql/ como registro de migraciones ya aplicadas.

Se añade battlepay_purchases.sql: la tabla la escribe el core y no estaba en
ningún SQL, así que no había forma de recrearla. Sus 61 filas son de pruebas
locales (2 cuentas, 127.0.0.1), sin datos de jugadores.

Verificado importando todo en BD limpias: seed_news deja 50 noticias,
seed_recruit_rewards 6, battlepay_sumup crea sus 2 tablas y
battlepay_purchases reproduce prod fila a fila con el mismo esquema.
2026-07-16 21:29:12 +00:00

47 lines
2.7 KiB
SQL

-- ───────────────────────────────────────────────────────────────────────────
-- Battlepay nativo → pasarela SumUp (NovaWeb)
-- Se aplica sobre la base de datos `auth` (LoginDatabase).
--
-- Flujo:
-- 1) El jugador pulsa "Comprar" en la tienda nativa del cliente.
-- 2) El worldserver (SendMakePurchase) busca el producto en `battlepay_price`.
-- Si tiene precio en €, crea una orden PENDING aquí y NO exige puntos.
-- 3) El cliente abre /login/sso → /es/checkout (NovaWeb) y paga con SumUp.
-- 4) NovaWeb marca la orden PAID (creditPaymentIfPaid).
-- 5) El worldserver (BattlepayManager::Update) ve la orden PAID del jugador
-- conectado y la entrega con ProcessDelivery → la marca DELIVERED.
-- ───────────────────────────────────────────────────────────────────────────
-- Órdenes de compra (las escribe el worldserver, las lee/actualiza NovaWeb).
CREATE TABLE IF NOT EXISTS `battlepay_orders` (
`id` INT NOT NULL AUTO_INCREMENT,
`reference` VARCHAR(64) NOT NULL,
`account_id` INT NOT NULL, -- auth.account.id (cuenta de juego)
`product_id` INT NOT NULL, -- Battlepay ProductID nativo
`product_name` VARCHAR(120) NOT NULL DEFAULT '',
`price_eur` DECIMAL(10,2) NOT NULL DEFAULT 0,
`status` VARCHAR(16) NOT NULL DEFAULT 'PENDING', -- PENDING | PAID | DELIVERED
`created_at` INT NOT NULL,
`paid_at` INT NULL,
`delivered_at` INT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_reference` (`reference`),
KEY `idx_account_status` (`account_id`, `status`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Mapa producto nativo → precio real en €. Si un ProductID NO está aquí (o
-- enabled=0), el worldserver usa el flujo clásico de puntos para ese producto.
CREATE TABLE IF NOT EXISTS `battlepay_price` (
`product_id` INT NOT NULL,
`product_name` VARCHAR(120) NOT NULL DEFAULT '',
`price_eur` DECIMAL(10,2) NOT NULL DEFAULT 0,
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Ejemplo (ajusta product_id al de tu tienda nativa):
INSERT INTO `battlepay_price` (`product_id`, `product_name`, `price_eur`, `enabled`)
VALUES (54811, 'Corcel Celestial', 5.00, 1)
ON DUPLICATE KEY UPDATE `product_name`=VALUES(`product_name`), `price_eur`=VALUES(`price_eur`);