sql: quitar el prefijo home_ de los ficheros que quedaron atrás

El renombrado de las 41 tablas (cccc703) no llegó a los ficheros SQL ni a los
generadores, así que seguían creando y consultando tablas home_* que ya no
existen: aplicarlos hoy no reproducía el portal.

- 12 ficheros pasan a las tablas reales (store_item, stripelog, noticia, ...).
- Los 6 que llevaban el prefijo en el NOMBRE se renombran también; nada los
  referenciaba.
- gen_store_catalog.py leía FROM home_store_item de django_wow (roto) y
  db2_to_sql.py generaba home_item_data; corregidos, con sus comentarios.
- add_stripelog_service.sql usaba ADD COLUMN IF NOT EXISTS, que es de MariaDB:
  en MySQL 9.7 daba error de sintaxis y no se podía aplicar (la columna se había
  puesto a mano en prod). Ahora es un ADD COLUMN normal, como su hermano.

Se dejan intactos sql/rename_home_prefix.sql y
sql/drop_home_securitytoken_authuser_fk.sql: son migraciones ya aplicadas y los
nombres home_* son parte de su historia.

Verificado importando todo en BD limpias: los ALTER dejan stripelog y noticia
con el esquema idéntico a producción, y la consulta de gen_store_catalog.py
devuelve filas.
This commit is contained in:
2026-07-16 21:23:29 +00:00
parent 011cae27fb
commit 9caa7b6c92
14 changed files with 58 additions and 57 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
-- Noticias multiidioma: versión en inglés (opcional). Si están vacías, la home
-- en inglés cae a la versión en español. El texto original (titulo/contenido) es ES.
ALTER TABLE home_noticia
ALTER TABLE noticia
ADD COLUMN titulo_en VARCHAR(200) NULL AFTER titulo,
ADD COLUMN contenido_en LONGTEXT NULL AFTER contenido;
+1 -1
View File
@@ -2,4 +2,4 @@
-- /gold-character). La entrega (fulfillSumUpCheckout) parsea este JSON y lo pasa
-- a la acción del servicio. NULL para servicios sin campos extra o compras de PD.
-- Ver lib/sumup.ts. (MySQL 9.x no soporta ADD COLUMN IF NOT EXISTS.)
ALTER TABLE home_stripelog ADD COLUMN metadata TEXT NULL DEFAULT NULL;
ALTER TABLE stripelog ADD COLUMN metadata TEXT NULL DEFAULT NULL;
+2 -1
View File
@@ -2,4 +2,5 @@
-- corresponde el checkout para que la reconciliación ejecute la acción (renombrar)
-- en vez de acreditar PD. NULL = compra de PD (comportamiento por defecto).
-- Ver lib/sumup.ts (createSumUpCheckout / fulfillSumUpCheckout).
ALTER TABLE home_stripelog ADD COLUMN IF NOT EXISTS service VARCHAR(32) NULL DEFAULT NULL;
-- (MySQL 9.x no soporta ADD COLUMN IF NOT EXISTS: es sintaxis de MariaDB.)
ALTER TABLE stripelog ADD COLUMN service VARCHAR(32) NULL DEFAULT NULL;
+7 -7
View File
@@ -136,7 +136,7 @@ def db_items():
env = os.path.join(HERE, '..', '..', '.env.local')
cfg = dict(re.findall(r'^(\w+)=(.*)$', open(env, encoding='utf-8').read(), re.M))
q = ('SELECT category_code,item_id,name,IFNULL(icon,""),quantity,currency,price,'
'IFNULL(preview,""),sort FROM home_store_item ORDER BY sort,id')
'IFNULL(preview,""),sort FROM store_item ORDER BY sort,id')
out = subprocess.run(
['mysql', '-h', cfg.get('DB_HOST', '127.0.0.1'), '-u', cfg['DB_USER'],
f'-p{cfg["DB_PASSWORD"]}', '--default-character-set=utf8mb4', '-N', '--raw',
@@ -161,9 +161,9 @@ with open(OUT, 'w', encoding='utf-8') as f:
-- `css` es la clase de la CABECERA, que a veces sustituye a first-brown para
-- colorear la categoría entera (p.ej. "Brujo" en color de brujo).
SET NAMES utf8mb4;
DROP TABLE IF EXISTS home_store_item;
DROP TABLE IF EXISTS home_store_category;
CREATE TABLE home_store_category (
DROP TABLE IF EXISTS store_item;
DROP TABLE IF EXISTS store_category;
CREATE TABLE store_category (
id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(32) NOT NULL UNIQUE,
parent_code VARCHAR(32) NULL,
@@ -175,7 +175,7 @@ CREATE TABLE home_store_category (
sort INT NOT NULL,
KEY k_parent (parent_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE home_store_item (
CREATE TABLE store_item (
id INT AUTO_INCREMENT PRIMARY KEY,
category_code VARCHAR(32) NOT NULL,
item_id INT NOT NULL,
@@ -193,7 +193,7 @@ CREATE TABLE home_store_item (
""")
CH = 200
for i in range(0, len(cats), CH):
f.write('INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) VALUES\n')
f.write('INSERT INTO store_category (code,parent_code,name,name_en,css,depth,sort) VALUES\n')
rows = []
for n, (code, parent, name, css, depth) in enumerate(cats[i:i + CH], start=i):
en = tr_html(name)
@@ -202,7 +202,7 @@ CREATE TABLE home_store_item (
f"'{esc(en)}'" if en else 'NULL', esc(css), depth, n))
f.write(',\n'.join(rows) + ';\n')
for i in range(0, len(items), CH):
f.write('INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES\n')
f.write('INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES\n')
rows = []
for cc, iid, nm, ic, qty, cur, pr, pv, so in items[i:i + CH]:
rows.append("('%s',%s,'%s',%s,%s,'%s',%s,%s,%s)" % (
+2 -2
View File
@@ -4,7 +4,7 @@ Es una LIBRERÍA: la usa `gen_store_catalog.py` para el `name_en` del seed.
Ejecutándolo se comprueban traducciones sueltas (nombres por stdin).
Prioridad: términos OFICIALES sacados de los DB2 del cliente (ChrClasses,
ItemSet, ItemSubClass) y de los nombres bilingües de home_item_data. Solo se
ItemSet, ItemSubClass) y de los nombres bilingües de item_data. Solo se
traduce a mano lo que la tienda se inventó y no existe en el juego.
"""
import json
@@ -41,7 +41,7 @@ OF = {k.lower(): v for k, v in oficial.items()}
# Términos extraídos de los nombres bilingües de ítem (no están en ItemSet:
# los sets de PvP de WotLK no son ItemSets reales). Verificados con
# `SELECT name_es, name_en FROM home_item_data WHERE name_es LIKE ...`.
# `SELECT name_es, name_en FROM item_data WHERE name_es LIKE ...`.
OF.update({
'gladiador furioso': 'Furious Gladiator',
'gladiador incansable': 'Relentless Gladiator',
@@ -1,5 +1,5 @@
-- Cooldown de "consultar ítems borrados" (/restore-items): 8 h por personaje.
CREATE TABLE IF NOT EXISTS home_itemsearchhistory (
CREATE TABLE IF NOT EXISTS itemsearchhistory (
id BIGINT NOT NULL AUTO_INCREMENT,
character_name VARCHAR(12) NOT NULL,
used_at DATETIME NOT NULL,
@@ -1,7 +1,7 @@
-- Códigos de promoción (/promo-code): se canjean por PD y/o PV, con usos limitados.
-- BD: django_wow (DB.default). Ver lib/promo.ts.
-- `code` con collation *_bin => sensible a mayúsculas/minúsculas.
CREATE TABLE IF NOT EXISTS home_promocode (
CREATE TABLE IF NOT EXISTS promocode (
id BIGINT NOT NULL AUTO_INCREMENT,
code VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
pd INT NOT NULL DEFAULT 0, -- PD (donate points) que otorga
@@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS home_promocode (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Un canje por cuenta y código.
CREATE TABLE IF NOT EXISTS home_promoredemption (
CREATE TABLE IF NOT EXISTS promoredemption (
id BIGINT NOT NULL AUTO_INCREMENT,
promo_id BIGINT NOT NULL,
account_id INT UNSIGNED NOT NULL,
@@ -1,6 +1,6 @@
-- Cooldowns del Rastreador de misiones (/quest-character), por personaje y categoría.
-- category: 'class' (30 min), 'reputation' (1 h), 'specific' (10 min).
CREATE TABLE IF NOT EXISTS home_questsearchhistory (
CREATE TABLE IF NOT EXISTS questsearchhistory (
id BIGINT NOT NULL AUTO_INCREMENT,
character_name VARCHAR(12) NOT NULL,
category VARCHAR(16) NOT NULL,
@@ -1,5 +1,5 @@
-- Cooldown de Recuperar personaje (/restore-character): 12 h por personaje (guid).
CREATE TABLE IF NOT EXISTS home_restorehistory (
CREATE TABLE IF NOT EXISTS restorehistory (
id BIGINT NOT NULL AUTO_INCREMENT,
character_guid BIGINT NOT NULL,
used_at DATETIME NOT NULL,
+11 -11
View File
@@ -1,20 +1,20 @@
-- Catálogo de la tienda / regalos (django_wow.home_category + home_item).
-- Catálogo de la tienda / regalos (django_wow.category + item).
-- Usado por /send-gift (y la futura /store). Precios en euros; item_id = id del
-- ítem en el juego; image_url = icono (se muestra en la ficha del objeto).
-- Idempotente: reusa categorías/ítems por su nombre / item_id único.
INSERT INTO home_category (name) VALUES
INSERT INTO category (name) VALUES
('Monturas'), ('Mascotas'), ('Consumibles'), ('Misceláneo')
ON DUPLICATE KEY UPDATE name = VALUES(name);
INSERT INTO home_item (category_id, name, price, item_id, image_url) VALUES
((SELECT id FROM home_category WHERE name='Monturas'), 'Riendas del protodraco azul', 5.00, 43599, 'https://wow.zamimg.com/images/wow/icons/large/ability_mount_drake_proto.jpg'),
((SELECT id FROM home_category WHERE name='Monturas'), 'Riendas del draco rojo', 5.00, 44151, 'https://wow.zamimg.com/images/wow/icons/large/ability_mount_drake_red.jpg'),
((SELECT id FROM home_category WHERE name='Mascotas'), 'Calabacín siniestro', 2.00, 44810, 'https://wow.zamimg.com/images/wow/icons/large/inv_misc_food_pumpkincookie.jpg'),
((SELECT id FROM home_category WHERE name='Mascotas'), 'Cría de espormurciélago', 2.00, 34425, 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_pet_bat.jpg'),
((SELECT id FROM home_category WHERE name='Consumibles'), 'Poción de curación rúnica', 1.00, 33447, 'https://wow.zamimg.com/images/wow/icons/large/inv_potion_167.jpg'),
((SELECT id FROM home_category WHERE name='Consumibles'), 'Poción de maná rúnica', 1.00, 33448, 'https://wow.zamimg.com/images/wow/icons/large/inv_potion_137.jpg'),
((SELECT id FROM home_category WHERE name='Misceláneo'), 'Bolsa de tela de niebla', 1.00, 41599, 'https://wow.zamimg.com/images/wow/icons/large/inv_misc_bag_29.jpg'),
((SELECT id FROM home_category WHERE name='Misceláneo'), 'Caja de regalo', 1.00, 21519, 'https://wow.zamimg.com/images/wow/icons/large/inv_holiday_christmaspresent_01.jpg')
INSERT INTO item (category_id, name, price, item_id, image_url) VALUES
((SELECT id FROM category WHERE name='Monturas'), 'Riendas del protodraco azul', 5.00, 43599, 'https://wow.zamimg.com/images/wow/icons/large/ability_mount_drake_proto.jpg'),
((SELECT id FROM category WHERE name='Monturas'), 'Riendas del draco rojo', 5.00, 44151, 'https://wow.zamimg.com/images/wow/icons/large/ability_mount_drake_red.jpg'),
((SELECT id FROM category WHERE name='Mascotas'), 'Calabacín siniestro', 2.00, 44810, 'https://wow.zamimg.com/images/wow/icons/large/inv_misc_food_pumpkincookie.jpg'),
((SELECT id FROM category WHERE name='Mascotas'), 'Cría de espormurciélago', 2.00, 34425, 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_pet_bat.jpg'),
((SELECT id FROM category WHERE name='Consumibles'), 'Poción de curación rúnica', 1.00, 33447, 'https://wow.zamimg.com/images/wow/icons/large/inv_potion_167.jpg'),
((SELECT id FROM category WHERE name='Consumibles'), 'Poción de maná rúnica', 1.00, 33448, 'https://wow.zamimg.com/images/wow/icons/large/inv_potion_137.jpg'),
((SELECT id FROM category WHERE name='Misceláneo'), 'Bolsa de tela de niebla', 1.00, 41599, 'https://wow.zamimg.com/images/wow/icons/large/inv_misc_bag_29.jpg'),
((SELECT id FROM category WHERE name='Misceláneo'), 'Caja de regalo', 1.00, 21519, 'https://wow.zamimg.com/images/wow/icons/large/inv_holiday_christmaspresent_01.jpg')
ON DUPLICATE KEY UPDATE
category_id = VALUES(category_id), name = VALUES(name), price = VALUES(price), image_url = VALUES(image_url);
+3 -3
View File
@@ -3,10 +3,10 @@
-- OJO: las URLs apuntan a los listados de UltimoWoW (IDs 94649/496618/94147/91402);
-- cámbialas por las de NovaWoW/nightspire en /admin/votes para que los votos cuenten aquí.
DELETE FROM home_votelog WHERE vote_site_id IN (SELECT id FROM home_votesite WHERE name = 'TopTest');
DELETE FROM home_votesite WHERE name = 'TopTest';
DELETE FROM votelog WHERE vote_site_id IN (SELECT id FROM votesite WHERE name = 'TopTest');
DELETE FROM votesite WHERE name = 'TopTest';
INSERT INTO home_votesite (name, url, image_url, points, created_at, updated_at) VALUES
INSERT INTO votesite (name, url, image_url, points, created_at, updated_at) VALUES
('Gtop100', 'https://gtop100.com/topsites/World-of-Warcraft/sitedetails/UltimoWoW-94649?vote=1&pingUsername=91402', '/nw-themes/nw-ryu/nw-images/nw-vote-sites/gtop100.jpg', 1, NOW(), NOW()),
('TopG', 'https://topg.org/wow-private-servers/in-496618-91402', '/nw-themes/nw-ryu/nw-images/nw-vote-sites/topg.webp', 1, NOW(), NOW()),
('Top100arena', 'http://www.top100arena.com/in.asp?id=94147&incentive=91402', '/nw-themes/nw-ryu/nw-images/nw-vote-sites/top100arena.jpg', 1, NOW(), NOW()),
+24 -24
View File
@@ -6,9 +6,9 @@
-- `css` es la clase de la CABECERA, que a veces sustituye a first-brown para
-- colorear la categoría entera (p.ej. "Brujo" en color de brujo).
SET NAMES utf8mb4;
DROP TABLE IF EXISTS home_store_item;
DROP TABLE IF EXISTS home_store_category;
CREATE TABLE home_store_category (
DROP TABLE IF EXISTS store_item;
DROP TABLE IF EXISTS store_category;
CREATE TABLE store_category (
id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(32) NOT NULL UNIQUE,
parent_code VARCHAR(32) NULL,
@@ -20,7 +20,7 @@ CREATE TABLE home_store_category (
sort INT NOT NULL,
KEY k_parent (parent_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE home_store_item (
CREATE TABLE store_item (
id INT AUTO_INCREMENT PRIMARY KEY,
category_code VARCHAR(32) NOT NULL,
item_id INT NOT NULL,
@@ -35,7 +35,7 @@ CREATE TABLE home_store_item (
KEY k_item (item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) VALUES
INSERT INTO store_category (code,parent_code,name,name_en,css,depth,sort) VALUES
('1',NULL,'Armas PvE <span class="no-toggle third-brown">[Nivel 232 a 245]</span>','PvE Weapons <span class="no-toggle third-brown">[Level 232 to 245]</span>','first-brown',1,0),
('1-1','1','Arcos','Bows','first-brown',2,1),
('1-1-1','1-1','Nivel de objeto 232','Item Level 232','first-brown',3,2),
@@ -236,7 +236,7 @@ INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) V
('5-5-2','5-5','Nivel de objeto 232','Item Level 232','first-brown',3,197),
('5-5-3','5-5','Nivel de objeto 239','Item Level 239','first-brown',3,198),
('5-5-4','5-5','Nivel de objeto 245','Item Level 245','first-brown',3,199);
INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) VALUES
INSERT INTO store_category (code,parent_code,name,name_en,css,depth,sort) VALUES
('5-6','5','Brazales de placa','Plate Bracers','first-brown',2,200),
('5-6-1','5-6','Nivel de objeto 226','Item Level 226','first-brown',3,201),
('5-6-2','5-6','Nivel de objeto 232','Item Level 232','first-brown',3,202),
@@ -437,7 +437,7 @@ INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) V
('22-7-3','22-7','Temporada de Arenas 3','Arena Season 3','first-brown',3,397),
('22-7-4','22-7','Temporada de Arenas 4','Arena Season 4','first-brown',3,398),
('22-7-5','22-7','Temporada de Arenas 5 <span class="no-toggle second-brown">(Indómito)</span>','Arena Season 5 <span class="no-toggle second-brown">(Savage)</span>','first-brown',3,399);
INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) VALUES
INSERT INTO store_category (code,parent_code,name,name_en,css,depth,sort) VALUES
('22-7-7','22-7','Temporada de Arenas 5 <span class="no-toggle second-brown">(Mortal)</span>','Arena Season 5 <span class="no-toggle second-brown">(Deadly)</span>','first-brown',3,400),
('22-8','22','Dagas','Daggers','first-brown',2,401),
('22-8-2','22-8','Temporada de Arenas 2','Arena Season 2','first-brown',3,402),
@@ -638,7 +638,7 @@ INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) V
('20-10-6','20-10','Set de Temporada de Arenas 5 <span class="no-toggle second-brown">(Odioso)</span>','Arena Season 5 Set <span class="no-toggle second-brown">(Hateful)</span>','first-brown',3,597),
('20-10-7','20-10','Set de Temporada de Arenas 5 <span class="no-toggle second-brown">(Mortal)</span>','Arena Season 5 Set <span class="no-toggle second-brown">(Deadly)</span>','first-brown',3,598),
('20-2','20','Cazador','Hunter','hunter',2,599);
INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) VALUES
INSERT INTO store_category (code,parent_code,name,name_en,css,depth,sort) VALUES
('20-2-1','20-2','Set de Temporada de Arenas 1','Arena Season 1 Set','first-brown',3,600),
('20-2-2','20-2','Set de Temporada de Arenas 2','Arena Season 2 Set','first-brown',3,601),
('20-2-3','20-2','Set de Temporada de Arenas 3','Arena Season 3 Set','first-brown',3,602),
@@ -744,7 +744,7 @@ INSERT INTO home_store_category (code,parent_code,name,name_en,css,depth,sort) V
('26-7-1','26-7','<span class="no-toggle paladin">Paladín</span>, <span class="no-toggle priest">Sacerdote</span>, <span class="no-toggle warlock">Brujo</span>','<span class="no-toggle paladin">Paladin</span>, <span class="no-toggle priest">Priest</span>, <span class="no-toggle warlock">Warlock</span>','first-brown',3,702),
('26-7-2','26-7','<span class="no-toggle rogue">Pícaro</span>, <span class="no-toggle death-knight">Caballero de la Muerte</span>, <span class="no-toggle mage">Mago</span>, <span class="no-toggle druid">Druida</span>','<span class="no-toggle rogue">Rogue</span>, <span class="no-toggle death-knight">Death Knight</span>, <span class="no-toggle mage">Mage</span>, <span class="no-toggle druid">Druid</span>','first-brown',3,703),
('26-7-3','26-7','<span class="no-toggle warrior">Guerrero</span>, <span class="no-toggle hunter">Cazador</span>, <span class="no-toggle shaman">Chamán</span>','<span class="no-toggle warrior">Warrior</span>, <span class="no-toggle hunter">Hunter</span>, <span class="no-toggle shaman">Shaman</span>','first-brown',3,704);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('1-1-1',45327,'Grito de la sirena','inv_weapon_bow_51',1,'pd',200,'weapon-45327',0),
('1-1-2',48697,'Arco largo de golpe frenético','inv_weapon_bow_51',1,'pd',450,'weapon-48697',1),
('1-2-1',45498,'Lotrafen, lanza de los Malditos','inv_weapon_halberd_30',1,'pd',200,'weapon-45498',2),
@@ -945,7 +945,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('2-15-1',42621,'Sigilo de disputa de Gladiador furioso','inv_shield_56',1,'pd',200,NULL,197),
('2-15-1',42608,'Tótem de indomabilidad de Gladiador furioso','spell_nature_slowingtotem',1,'pd',200,NULL,198),
('2-15-1',42603,'Tótem de supervivencia de Gladiador furioso','spell_nature_slowingtotem',1,'pd',200,NULL,199);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('2-15-1',42598,'Tótem del tercer aliento de Gladiador furioso','spell_frost_summonwaterelemental',1,'pd',200,NULL,200),
('2-15-1',42853,'Tratado sobre entereza de Gladiador furioso','inv_relics_libramofhope',1,'pd',200,NULL,201),
('2-15-1',42615,'Tratado sobre justicia de Gladiador furioso','inv_misc_book_07',1,'pd',200,NULL,202),
@@ -1146,7 +1146,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('3-10-4',48065,'Capucha de triunfo de Zabra','inv_helmet_87',1,'pd',450,NULL,397),
('3-10-4',48062,'Hombreras de triunfo de Zabra','inv_shoulder_90',1,'pd',450,NULL,398),
('3-10-4',48063,'Toga de triunfo de Zabra','inv_chest_cloth_73',1,'pd',450,NULL,399);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('3-10-4',48066,'Guantes de triunfo de Zabra','inv_gauntlets_55',1,'pd',450,NULL,400),
('3-10-4',48064,'Guantes de triunfo de Zabra','inv_pants_cloth_06',1,'pd',450,NULL,401),
('4-1-1',41993,'Capucha de tejido vil de Gladiador furioso','inv_helmet_137',1,'pd',200,NULL,402),
@@ -1347,7 +1347,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('5-10-4',47283,'Cinturón de cicatrices ensangrentadas','inv_belt_46b',1,'pd',450,NULL,597),
('5-10-4',48009,'Cinturón del Campeón abisal','inv_belt_50',1,'pd',450,NULL,598),
('5-10-4',47998,'Cinturón del Empalador','inv_belt_46b',1,'pd',450,NULL,599);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('5-10-4',47268,'Faja de baño de sangre','inv_belt_50',1,'pd',450,NULL,600),
('5-10-4',47323,'Faja del mártir olvidado','inv_belt_51',1,'pd',450,NULL,601),
('5-10-4',47997,'Faja del Tramo Helado','inv_belt_51',1,'pd',450,NULL,602),
@@ -1548,7 +1548,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('6-12-1',41836,'Botas de triunfo de Gladiador furioso','inv_boots_cloth_05',1,'pd',150,NULL,797),
('6-12-2',41636,'Botas de dominancia de Gladiador incansable','inv_boots_cloth_05',1,'pd',400,NULL,798),
('6-12-2',41622,'Botas de salvación de Gladiador incansable','inv_boots_cloth_05',1,'pd',400,NULL,799);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('6-12-2',41837,'Botas de triunfo de Gladiador incansable','inv_boots_cloth_05',1,'pd',400,NULL,800),
('6-13-1',41075,'Escarpes de dominancia de Gladiador furioso','inv_boots_plate_09',1,'pd',150,NULL,801),
('6-13-1',41055,'Escarpes de salvación de Gladiador furioso','inv_boots_plate_09',1,'pd',150,NULL,802),
@@ -1749,7 +1749,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('11-3-1',2319,'Cuero medio','inv_misc_leatherscrap_05',20,'pd',20,NULL,997),
('11-3-1',4234,'Cuero pesado','inv_misc_leatherscrap_07',20,'pd',30,NULL,998),
('11-3-1',4304,'Cuero grueso','inv_misc_leatherscrap_08',20,'pd',40,NULL,999);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('11-3-1',8170,'Cuero basto','inv_misc_leatherscrap_02',20,'pd',50,NULL,1000),
('11-3-1',21887,'Cuero de pellejo nudoso','inv_misc_leatherscrap_10',20,'pd',60,NULL,1001),
('11-3-1',33568,'Cuero boreal','inv_misc_leatherscrap_15',20,'pd',100,NULL,1002),
@@ -1950,7 +1950,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('14-3-1',33993,'Mojo','spell_shaman_hex',1,'pd',300,NULL,1197),
('14-3-1',34518,'Moneda de cerdo de oro','inv_misc_coin_01',1,'pd',300,NULL,1198),
('14-3-1',34519,'Moneda de cerdo de plata','inv_misc_coin_03',1,'pd',300,NULL,1199);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('14-3-1',32498,'Moneda de la fortuna','inv_misc_elvencoins',1,'pd',300,NULL,1200),
('14-3-1',49665,'Monje Pandaren','inv_misc_pet_03',1,'pd',300,NULL,1201),
('14-3-1',20769,'Moquillo desagradable','ability_creature_poison_05',1,'pd',300,NULL,1202),
@@ -2151,7 +2151,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('25-8-1',39276,'La calavera de ruina','inv_shield_26',1,'pd',200,'weapon-39276',1397),
('25-8-1',40400,'Muralla de terror','inv_shield_32',1,'pd',200,'weapon-40400',1398),
('25-8-1',19348,'Protector de dragontina roja','inv_shield_20',1,'pd',200,'weapon-19348',1399);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('25-8-1',18756,'Protector del Guardia del Terror','inv_shield_17',1,'pd',200,'weapon-18756',1400),
('25-8-1',40266,'Rendición de héroe','inv_shield_56',1,'pd',200,'weapon-40266',1401),
('25-8-1',23238,'Rodela estigia','inv_armor_shield_naxxramas_d_02',1,'pd',200,'weapon-23238',1402),
@@ -2352,7 +2352,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('22-8-4',35102,'Hoja de hechizo de Gladiador brutal','inv_weapon_shortblade_73',1,'pd',150,'weapon-35102',1597),
('22-8-4',35058,'Mutilador de Gladiador brutal','inv_weapon_shortblade_75',1,'pd',150,'weapon-35058',1598),
('22-8-5',42217,'Chafarote de Gladiador indómito','inv_weapon_shortblade_90',1,'pd',200,'weapon-42217',1599);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('22-8-5',42216,'Faca de Gladiador indómito','inv_weapon_shortblade_90',1,'pd',200,'weapon-42216',1600),
('22-8-5',42343,'Hoja de hechizo de Gladiador indómito','inv_weapon_shortblade_91',1,'pd',200,'weapon-42343',1601),
('22-8-5',42215,'Mutilador de Gladiador indómito','inv_weapon_shortblade_90',1,'pd',200,'weapon-42215',1602),
@@ -2553,7 +2553,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('19-10-2',38663,'Bufas de placas de saronita empapadas de sangre','inv_shoulder_78',1,'pd',125,NULL,1797),
('19-10-2',38665,'Placa de guerra de saronita','inv_chest_plate18',1,'pd',125,NULL,1798),
('19-10-2',38666,'Brazales de placas de saronita','inv_bracer_17',1,'pd',125,NULL,1799);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('19-10-2',38667,'Guanteletes de mando de Malasangre','inv_gauntlets_71',1,'pd',125,NULL,1800),
('19-10-2',38668,'Faja del Pesteador','inv_belt_36',1,'pd',125,NULL,1801),
('19-10-2',38669,'Quijotes de saronita grabados','inv_pants_cloth_27',1,'pd',125,NULL,1802),
@@ -2754,7 +2754,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('19-4-1',16715,'Botas Corazón Salvaje','inv_boots_08',1,'pd',30,NULL,1997),
('19-4-2',22109,'Capucha cuoroferal','inv_helmet_27',1,'pd',40,NULL,1998),
('19-4-2',22112,'Bufas cuoroferal','inv_shoulder_01',1,'pd',40,NULL,1999);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('19-4-2',22113,'Jubón cuoroferal','inv_chest_plate06',1,'pd',40,NULL,2000),
('19-4-2',22108,'Brazales cuoroferal','inv_bracer_09',1,'pd',40,NULL,2001),
('19-4-2',22110,'Guantes cuoroferal','inv_gauntlets_17',1,'pd',40,NULL,2002),
@@ -2955,7 +2955,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('19-6-6',29079,'Espaldares de los Aldor','inv_shoulder_25',1,'pd',100,NULL,2197),
('19-6-6',29077,'Vestimentas de los Aldor','inv_chest_cloth_43',1,'pd',100,NULL,2198),
('19-6-6',29080,'Guantes de los Aldor','inv_gauntlets_17',1,'pd',100,NULL,2199);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('19-6-6',29078,'Ataduras de los Aldor','inv_pants_cloth_05',1,'pd',100,NULL,2200),
('19-6-7',30196,'Togas de Tirisfal','inv_chest_cloth_43',1,'pd',120,NULL,2201),
('19-6-7',30205,'Guantes de Tirisfal','inv_gauntlets_17',1,'pd',120,NULL,2202),
@@ -3156,7 +3156,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('19-8-12',46123,'Coraza hoja de terror de conquistador','inv_chest_chain_15',1,'pd',175,NULL,2397),
('19-8-12',46124,'Guanteletes hoja de terror de conquistador','inv_gauntlets_25',1,'pd',175,NULL,2398),
('19-8-12',46126,'Quijotes hoja de terror de conquistador','inv_pants_mail_15',1,'pd',175,NULL,2399);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('19-8-13',21360,'Yelmo de mortífero','inv_helmet_04',1,'pd',75,NULL,2400),
('19-8-13',21361,'Bufas de mortífero','inv_shoulder_03',1,'pd',75,NULL,2401),
('19-8-13',21364,'Jubón de mortífero','inv_chest_leather_08',1,'pd',75,NULL,2402),
@@ -3357,7 +3357,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('19-14-10',19402,'Musleras del cruzado caído','inv_pants_plate_16',1,'pd',150,NULL,2597),
('19-14-10',8312,'Coraza de alabastro','inv_chest_chain_05',1,'pd',150,NULL,2598),
('19-14-10',45941,'Coselete del azotador','inv_chest_leather_15',1,'pd',175,NULL,2599);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('19-14-10',46028,'Visera del horror sin ojos','inv_helmet_129',1,'pd',175,NULL,2600),
('19-14-10',45321,'Espaldares de voluntad templada','inv_shoulder_91',1,'pd',175,NULL,2601),
('19-14-10',45299,'Embozo de acero de dragones','inv_helmet_130',1,'pd',175,NULL,2602),
@@ -3558,7 +3558,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('20-6-1',25856,'Vestiduras de seda de Gladiador','inv_chest_leather_01',1,'pd',100,NULL,2797),
('20-6-1',25857,'Manoplas de seda de Gladiador','inv_gauntlets_19',1,'pd',100,NULL,2798),
('20-6-1',25858,'Calzas de seda de Gladiador','inv_pants_07',1,'pd',100,NULL,2799);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('20-6-2',32048,'Capucha de seda de Gladiador despiadado','inv_helmet_08',1,'pd',120,NULL,2800),
('20-6-2',32047,'Amito de seda de Gladiador despiadado','inv_shoulder_19',1,'pd',120,NULL,2801),
('20-6-2',32050,'Vestiduras de seda de Gladiador despiadado','inv_chest_leather_01',1,'pd',120,NULL,2802),
@@ -3759,7 +3759,7 @@ INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,p
('26-3-2',34855,'Cinturón del vencedor olvidado','inv_belt_27',1,'pd',300,NULL,2997),
('26-3-2',31099,'Leotardos del vencedor olvidado','inv_pants_plate_17',1,'pd',300,NULL,2998),
('26-3-2',34858,'Botas del vencedor olvidado','inv_boots_plate_07',1,'pd',300,NULL,2999);
INSERT INTO home_store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
INSERT INTO store_item (category_code,item_id,name,icon,quantity,currency,price,preview,sort) VALUES
('26-3-3',31095,'Yelmo del protector olvidado','inv_helmet_24',1,'pd',300,NULL,3000),
('26-3-3',31103,'Espaldares del protector olvidado','inv_shoulder_22',1,'pd',300,NULL,3001),
('26-3-3',31091,'Coselete del protector olvidado','inv_chest_chain_03',1,'pd',300,NULL,3002),
@@ -1,6 +1,6 @@
-- Pedido de tienda pagado con tarjeta (Stripe/SumUp): guarda el carrito para
-- entregarlo tras confirmarse el pago (evita el límite de metadata de la pasarela).
CREATE TABLE IF NOT EXISTS home_store_order (
CREATE TABLE IF NOT EXISTS store_order (
ref VARCHAR(64) PRIMARY KEY,
account_id INT NOT NULL,
character_name VARCHAR(12) NOT NULL,
@@ -1,6 +1,6 @@
-- Comercio de PD (/trade-points): códigos de 1 solo uso PD<->oro.
-- BD: django_wow (DB.default). Ver lib/trade.ts.
CREATE TABLE IF NOT EXISTS home_tradecode (
CREATE TABLE IF NOT EXISTS tradecode (
id BIGINT NOT NULL AUTO_INCREMENT,
code VARCHAR(25) NOT NULL,
creator_account INT UNSIGNED NOT NULL,