feat: add builders club catalog and room flow

This commit is contained in:
Lorenzune
2026-04-07 14:40:51 +02:00
parent 3efcca1e34
commit 50334d50e7
51 changed files with 2494 additions and 156 deletions
+284
View File
@@ -0,0 +1,284 @@
# Builders Club Catalog Reference
Questa guida riassume il setup corretto dopo la separazione completa tra catalogo normale e `Builders Club`.
## Tabelle usate davvero
- Catalogo normale:
- `catalog_pages`
- `catalog_items`
- Builders Club:
- `catalog_pages_bc`
- `catalog_items_bc`
- Abbonamenti / add-on BC venduti nel catalogo normale:
- `catalog_club_offers`
Quindi:
- se vuoi una pagina BC, va in `catalog_pages_bc`
- se vuoi un furni BC, va in `catalog_items_bc`
- se vuoi vendere lo stesso furni anche nel catalogo normale, aggiungi un'altra riga normale in `catalog_items`
Questo è proprio il vantaggio della separazione: lo stesso `item_id` può comparire sia nel catalogo normale sia nel BC, ma con comportamenti diversi.
## Differenza pratica tra catalogo normale e BC
### Catalogo normale
- gli offer arrivano da `catalog_items`
- hanno costi normali (`cost_credits`, `cost_points`, ecc.)
- quando comprati diventano proprietà utente / inventario
### Builders Club
- gli offer arrivano da `catalog_items_bc`
- non hanno prezzo perché il piazzamento BC usa il flow dedicato
- non entrano nell'inventario utente
- non diventano mai proprietà utente
- quando rimossi dalla stanza vengono eliminati
## Migration da applicare
Assicurati di avere applicato:
- `Database Updates/009_add_builders_club_catalog_offers.sql`
- `Database Updates/010_add_catalog_mode_to_catalog_pages.sql`
- `Database Updates/011_add_builders_club_trial_room_lock.sql`
- `Database Updates/012_support_builders_club_catalog_tables.sql`
La `012` è importante perché aggiorna `catalog_pages_bc.page_layout` con i layout BC moderni:
- `builders_club_frontpage`
- `builders_club_addons`
- `builders_club_loyalty`
## Come aggiungere pagine BC
Le pagine BC vanno create in `catalog_pages_bc`.
Esempio:
```sql
INSERT INTO catalog_pages_bc
(
parent_id,
caption,
page_layout,
icon_color,
icon_image,
order_num,
visible,
enabled,
page_headline,
page_teaser,
page_special,
page_text1,
page_text2,
page_text_details,
page_text_teaser
)
VALUES
(
-1,
'Builders Furni',
'default_3x3',
1,
28,
1,
'1',
'1',
'catalog_header_roombuilder',
'',
'',
'Builders Club',
'Linea test',
'Pagina test del Builders Club',
''
);
```
## Come aggiungere furni BC
I furni BC vanno in `catalog_items_bc`.
Esempio:
```sql
INSERT INTO catalog_items_bc
(
item_ids,
page_id,
catalog_name,
order_number,
extradata
)
VALUES
(
'12345',
1,
'bc_test_sofa',
1,
''
);
```
Dove:
- `item_ids` = ID del base item
- `page_id` = ID pagina in `catalog_pages_bc`
- `catalog_name` = chiave offer/localization
## Come vendere lo stesso furni anche nel catalogo normale
Se vuoi che lo stesso furni sia:
- vendibile nel catalogo normale
- disponibile anche nel Builders Club
devi avere **due righe distinte**:
### Normale
```sql
INSERT INTO catalog_items
(
page_id,
item_ids,
catalog_name,
cost_credits,
cost_points,
points_type,
amount,
club_only,
extradata,
have_offer,
offer_id,
limited_stack,
order_number
)
VALUES
(
500,
'12345',
'normal_test_sofa',
5,
0,
0,
1,
'0',
'',
'1',
-1,
0,
1
);
```
### Builders Club
```sql
INSERT INTO catalog_items_bc
(
item_ids,
page_id,
catalog_name,
order_number,
extradata
)
VALUES
(
'12345',
1,
'bc_test_sofa',
1,
''
);
```
Quindi lo stesso base item `12345` può vivere in entrambi i cataloghi senza condividere il prezzo.
## Abbonamento e add-on BC
Abbonamento e add-on non stanno in `catalog_items_bc`.
Vanno in:
- `catalog_club_offers`
Tipi supportati:
- `BUILDERS_CLUB`
- `BUILDERS_CLUB_ADDON`
Sono venduti nel catalogo normale, come HC/VIP, ma il widget BC usa comunque le sue pagine dedicate da `catalog_pages_bc`.
## Nota su `catalog_mode`
`catalog_mode` resta nella tabella `catalog_pages`, ma non è più il meccanismo principale per far comparire le pagine nel Builders Club.
Adesso il runtime BC legge direttamente:
- `catalog_pages_bc`
- `catalog_items_bc`
Quindi:
- aggiungere pagine BC in `catalog_pages` non basta
- aggiungere items BC in `catalog_items` non basta
- usare `BOTH` su una pagina normale non la renderà automaticamente una pagina BC
## Query utili per test
### Elencare pagine BC
```sql
SELECT * FROM catalog_pages_bc ORDER BY parent_id, order_num, id;
```
### Elencare items BC
```sql
SELECT * FROM catalog_items_bc ORDER BY page_id, order_number, id;
```
### Trovare lo stesso furni in entrambi i cataloghi
```sql
SELECT 'NORMAL' AS source, id, page_id, item_ids, catalog_name
FROM catalog_items
WHERE item_ids = '12345'
UNION ALL
SELECT 'BC' AS source, id, page_id, item_ids, catalog_name
FROM catalog_items_bc
WHERE item_ids = '12345';
```
## Consiglio pratico
Per fare test rapidi:
1. crea una pagina in `catalog_pages_bc`
2. inserisci 1-2 furni in `catalog_items_bc`
3. lascia gli stessi furni anche in `catalog_items` se li vuoi vendibili normalmente
4. pubblica / ricarica il catalogo
Se vuoi, possiamo aggiungere anche un file SQL separato con qualche pagina BC e qualche furni BC già pronti da importare per i test.
## Seed demo già pronto
Se vuoi una demo immediata, puoi usare:
- `Database Updates/013_seed_builders_club_sample_page.sql`
Questo seed:
- crea una root BC demo
- crea una pagina BC demo figlia
- duplica alcuni furni già esistenti del catalogo normale dentro `catalog_items_bc`
Così puoi testare subito il caso:
- stesso furni vendibile nel catalogo normale
- stesso furni disponibile anche nel Builders Club