Korjaa sites→laitetilat migraatio: tyhjennä sites-taulu kopioinnin jälkeen

Ongelma: migraatio ajautui joka API-kutsulla ja kopioi sites-taulun
rivit takaisin laitetilat-tauluun, joten poistettua laitetilaa ei
voinut oikeasti poistaa — se ilmestyi aina takaisin.

Korjaus: DELETE FROM sites migraation jälkeen, ja tarkista ensin
onko sites-taulussa rivejä (vältetään turha ajaminen).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 01:36:08 +02:00
parent fff4057912
commit 5a796d8b13

23
db.php
View File

@@ -642,16 +642,19 @@ function initDatabase(): void {
// Migraatio: yhdistä sites → laitetilat (kopioi vanhat sijainnit laitetiloiksi)
try {
// Kopioi sites-taulun rivit laitetilat-tauluun (ohita duplikaatit)
$db->query("
INSERT IGNORE INTO laitetilat (id, company_id, nimi, kuvaus, osoite, luotu, muokattu, muokkaaja)
SELECT id, company_id, nimi, '', CONCAT(IFNULL(osoite,''), IF(kaupunki != '', CONCAT(', ', kaupunki), '')), NOW(), NOW(), ''
FROM sites
");
// Päivitä laitteiden laitetila_id vanhoista site_id-viittauksista
$db->query("UPDATE devices SET laitetila_id = site_id WHERE laitetila_id IS NULL AND site_id IS NOT NULL");
// Päivitä IPAM-merkintöjen site_id viittaamaan laitetiloihin (jo sama ID)
// (ei tarvitse muuttaa koska ID:t ovat samat)
$sitesExist = $db->query("SELECT COUNT(*) AS cnt FROM sites")->fetch_assoc();
if ((int)($sitesExist['cnt'] ?? 0) > 0) {
// Kopioi sites-taulun rivit laitetilat-tauluun (ohita duplikaatit)
$db->query("
INSERT IGNORE INTO laitetilat (id, company_id, nimi, kuvaus, osoite, luotu, muokattu, muokkaaja)
SELECT id, company_id, nimi, '', CONCAT(IFNULL(osoite,''), IF(kaupunki != '', CONCAT(', ', kaupunki), '')), NOW(), NOW(), ''
FROM sites
");
// Päivitä laitteiden laitetila_id vanhoista site_id-viittauksista
$db->query("UPDATE devices SET laitetila_id = site_id WHERE laitetila_id IS NULL AND site_id IS NOT NULL");
// Tyhjennä sites-taulu ettei migraatio toista itseään
$db->query("DELETE FROM sites");
}
} catch (\Throwable $e) { /* ohitetaan */ }
}