Gå till slutet av bannern
Gå till början av bannern

SKLTP TAK - Beskrivning av implementation för borttagning

Hoppa till slutet på meta-data
Gå till början av metadata

Du visar en gammal version av den här sidan. Visa nuvarande version.

Jämför med nuvarande Visa sidhistorik

Version 1 Aktuell »

Implementationen för borttagning av element är inte helt uppenbar. I nuläget verkar det se ut enligt beskrivningen nedan.

Varianter på borttagning:

  • ”Vanlig” borttagning (t.ex. Administrera vägval => Visa => Ta bort)

    • Alt 1 – Posten har inte publicerats (fältet pubversion är null): posten tas bort helt från databasen.

    • Alt 2 – Posten har publicerats: posten tas inte bort från databasen utan det görs en ”soft delete” genom att markera den som raderad (fälted deleted)

  • Borttagning via JSON beställning

    • Alt 1 – postens fromtidpunkt är efter (eller lika med) genomförandetidpunkt i JSON: posten markeras som raderad via soft delete (oavsett pubversion)

    • Alt 2 – postens fromtidpunkt är före genomförandetidpunkt i JSON: posten markeras INTE som raderad utan tomtidpunkt sätts till en dag före genomförandetidpunkt i JSON. D.v.s. det är egentligen ingen radering utan snarare att man sätter ett utgångsdatum.

Soft-delete-funktionaliteten är lite av ett fulhack.

Den är tillagd en gång i tiden för att ha kvar raderade poster i databasen och skilja på aktiva och raderade via fältet deleted. I samband med det är det tillagt constraints som dessa:

ALTER TABLE `Tjanstekontrakt` ADD CONSTRAINT `UC_NAMNRYMD` UNIQUE (`namnrymd`,`deleted`);

ALTER TABLE `Vagval` ADD CONSTRAINT `UC_VAGVAL_ADRESS` UNIQUE (`anropsAdress_id`,`tjanstekontrakt_id`,`logiskAdress_id`,`fromTidpunkt`,`tomTidpunkt`,`deleted`);

Sedan kommer det roliga, tydligen har man kommit på att man vill kunna ha fler än en raderad post av ”samma” post. Men det går inte för t.ex. namnrymd ovan, man kan bara ha två poster med samma namnrymd, en med deleted = true och en med deleted = false. Så då har man infört att deleted kan vara null för att markera att posten är raderad. (Eftersom null i databassammanhang inte räknas som samma som ett annat nullvärde så kan man då ha flera raderade poster.) Det fungerar ju så länge man ser till att bara använda deleted = false och deleted = null. Men om någon skulle få för sig att manuellt sätta deleted = true i databasen i tron att posten då är markerad som raderad kan det bli lite skumt:

  • Nu kontrollerar koden deletedstatus enbart genom att jämföra med null. Deleted = true i databasen hanteras alltså som deleted = false

  • Om man har två identiska rader förutom att en har deleted = true och en deleted = false så har man i praktiken fått en otillåten dubblett.

Det borde vi åtminstone uppdatera så att vi hanterar deleted = true på samma sätt som deleted = null + ett varningsmeddelande i loggen om man stöter på poster med deleted = true.

  • Inga etiketter