diff --git a/web-next/sql/add_news_en.sql b/web-next/sql/add_news_en.sql
index 687b457..9f13e2f 100644
--- a/web-next/sql/add_news_en.sql
+++ b/web-next/sql/add_news_en.sql
@@ -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;
diff --git a/web-next/sql/add_stripelog_metadata.sql b/web-next/sql/add_stripelog_metadata.sql
index c75a132..d830fa6 100644
--- a/web-next/sql/add_stripelog_metadata.sql
+++ b/web-next/sql/add_stripelog_metadata.sql
@@ -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;
diff --git a/web-next/sql/add_stripelog_service.sql b/web-next/sql/add_stripelog_service.sql
index e452029..4a16538 100644
--- a/web-next/sql/add_stripelog_service.sql
+++ b/web-next/sql/add_stripelog_service.sql
@@ -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;
diff --git a/web-next/sql/db2/gen_store_catalog.py b/web-next/sql/db2/gen_store_catalog.py
index 85255be..331ae72 100644
--- a/web-next/sql/db2/gen_store_catalog.py
+++ b/web-next/sql/db2/gen_store_catalog.py
@@ -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)" % (
diff --git a/web-next/sql/db2/translate_categories.py b/web-next/sql/db2/translate_categories.py
index 5de070c..e04d75e 100644
--- a/web-next/sql/db2/translate_categories.py
+++ b/web-next/sql/db2/translate_categories.py
@@ -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',
diff --git a/web-next/sql/home_itemsearchhistory.sql b/web-next/sql/itemsearchhistory.sql
similarity index 85%
rename from web-next/sql/home_itemsearchhistory.sql
rename to web-next/sql/itemsearchhistory.sql
index 95aace9..e486326 100644
--- a/web-next/sql/home_itemsearchhistory.sql
+++ b/web-next/sql/itemsearchhistory.sql
@@ -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,
diff --git a/web-next/sql/home_promocode.sql b/web-next/sql/promocode.sql
similarity index 92%
rename from web-next/sql/home_promocode.sql
rename to web-next/sql/promocode.sql
index 3970644..867778e 100644
--- a/web-next/sql/home_promocode.sql
+++ b/web-next/sql/promocode.sql
@@ -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,
diff --git a/web-next/sql/home_questsearchhistory.sql b/web-next/sql/questsearchhistory.sql
similarity index 89%
rename from web-next/sql/home_questsearchhistory.sql
rename to web-next/sql/questsearchhistory.sql
index 1767bb8..9d2e4de 100644
--- a/web-next/sql/home_questsearchhistory.sql
+++ b/web-next/sql/questsearchhistory.sql
@@ -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,
diff --git a/web-next/sql/home_restorehistory.sql b/web-next/sql/restorehistory.sql
similarity index 86%
rename from web-next/sql/home_restorehistory.sql
rename to web-next/sql/restorehistory.sql
index 6baf9aa..da05507 100644
--- a/web-next/sql/home_restorehistory.sql
+++ b/web-next/sql/restorehistory.sql
@@ -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,
diff --git a/web-next/sql/seed_giftitems.sql b/web-next/sql/seed_giftitems.sql
index 26dea76..366a759 100644
--- a/web-next/sql/seed_giftitems.sql
+++ b/web-next/sql/seed_giftitems.sql
@@ -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);
diff --git a/web-next/sql/seed_votesites.sql b/web-next/sql/seed_votesites.sql
index 8a5e680..8db92a0 100644
--- a/web-next/sql/seed_votesites.sql
+++ b/web-next/sql/seed_votesites.sql
@@ -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()),
diff --git a/web-next/sql/store_catalog.sql b/web-next/sql/store_catalog.sql
index a359e6f..060c076 100644
--- a/web-next/sql/store_catalog.sql
+++ b/web-next/sql/store_catalog.sql
@@ -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 [Nivel 232 a 245]','PvE Weapons [Level 232 to 245]','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 (Indómito)','Arena Season 5 (Savage)','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 (Mortal)','Arena Season 5 (Deadly)','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 (Odioso)','Arena Season 5 Set (Hateful)','first-brown',3,597),
('20-10-7','20-10','Set de Temporada de Arenas 5 (Mortal)','Arena Season 5 Set (Deadly)','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','Paladín, Sacerdote, Brujo','Paladin, Priest, Warlock','first-brown',3,702),
('26-7-2','26-7','Pícaro, Caballero de la Muerte, Mago, Druida','Rogue, Death Knight, Mage, Druid','first-brown',3,703),
('26-7-3','26-7','Guerrero, Cazador, Chamán','Warrior, Hunter, Shaman','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),
diff --git a/web-next/sql/home_store_order.sql b/web-next/sql/store_order.sql
similarity index 91%
rename from web-next/sql/home_store_order.sql
rename to web-next/sql/store_order.sql
index 080d55b..23b3a8b 100644
--- a/web-next/sql/home_store_order.sql
+++ b/web-next/sql/store_order.sql
@@ -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,
diff --git a/web-next/sql/home_tradecode.sql b/web-next/sql/tradecode.sql
similarity index 96%
rename from web-next/sql/home_tradecode.sql
rename to web-next/sql/tradecode.sql
index c188059..bb6db8a 100644
--- a/web-next/sql/home_tradecode.sql
+++ b/web-next/sql/tradecode.sql
@@ -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,