fixed api and migrations

This commit is contained in:
2026-08-21 18:44:24 +02:00
parent a40e59c406
commit fe1e227db9
4 changed files with 141 additions and 0 deletions
@@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
/**
* Converte orderbook.quantityclass da varchar(20) a INT.
*
* quantityclass rappresenta il numero di ticket acquistati: viene usato in
* confronti e aritmetica (offset, LIMIT, conteggi). Tenerlo come stringa
* causa confronti errati ("10" < "9") e comportamenti imprevisti.
*
* PRIMA di cambiare il tipo, bonifica i valori esistenti: elimina spazi e
* azzera i valori non numerici / vuoti, altrimenti la conversione li
* troncherebbe in modo silenzioso.
*/
final class ConvertQuantityclassToInt extends AbstractMigration
{
public function up(): void
{
// 1) Bonifica: rimuovi spazi ai bordi
$this->execute("UPDATE orderbook SET quantityclass = TRIM(quantityclass) WHERE quantityclass IS NOT NULL");
// 2) Bonifica: i valori non interamente numerici o vuoti diventano 0
// (REGEXP '^[0-9]+$' = solo cifre). Rivedi manualmente eventuali 0
// risultanti dopo la migration se non te li aspetti.
$this->execute("UPDATE orderbook SET quantityclass = '0' WHERE quantityclass IS NULL OR quantityclass = '' OR quantityclass NOT REGEXP '^[0-9]+$'");
// 3) Cambia il tipo di colonna a INT
$table = $this->table('orderbook');
$table->changeColumn('quantityclass', 'integer', [
'null' => true,
'default' => null,
'signed' => true,
])->update();
}
public function down(): void
{
// Ripristina varchar(20). I valori numerici restano validi come stringa.
$table = $this->table('orderbook');
$table->changeColumn('quantityclass', 'string', [
'limit' => 20,
'null' => true,
'default' => null,
])->update();
}
}