diff --git a/infra/handler/src/DeckGo/Handler.hs b/infra/handler/src/DeckGo/Handler.hs index 67b5ec5cf..a6e8e8709 100644 --- a/infra/handler/src/DeckGo/Handler.hs +++ b/infra/handler/src/DeckGo/Handler.hs @@ -1210,6 +1210,7 @@ data DbVersion | DbVersion2 | DbVersion3 | DbVersion4 + | DbVersion5 deriving stock (Enum, Bounded, Ord, Eq) -- | Migrates from ver to latest @@ -1347,6 +1348,43 @@ migrateFrom = \frm -> do , ");" ] ) HE.unit HD.unit True + DbVersion5 -> do + HS.sql "DROP TABLE IF EXISTS username" + HS.sql "DROP TABLE IF EXISTS account CASCADE" + HS.sql "DROP TABLE IF EXISTS slide" + HS.sql "DROP TABLE IF EXISTS deck" + HS.statement () $ Statement + (BS8.unwords + [ "CREATE TABLE account (" + , "id TEXT PRIMARY KEY," + , "firebase_id TEXT UNIQUE," + , "username TEXT UNIQUE NULL" + , ");" + ] + ) HE.unit HD.unit True + HS.statement () $ Statement + (BS8.unwords + [ "CREATE TABLE deck (" + , "id TEXT PRIMARY KEY," + , "name TEXT NOT NULL," + , "background TEXT NULL," + , "owner TEXT NOT NULL REFERENCES account (id) ON DELETE CASCADE," + , "attributes JSON" + , ");" + ] + ) HE.unit HD.unit True + HS.statement () $ Statement + (BS8.unwords + [ "CREATE TABLE slide (" + , "id TEXT PRIMARY KEY," + , "deck TEXT NOT NULL REFERENCES deck (id) ON DELETE CASCADE," + , "index INT2 NULL," + , "content TEXT," -- TODO: is any of this nullable? + , "template TEXT," + , "attributes JSON" + , ");" + ] + ) HE.unit HD.unit True readDbVersion :: HS.Session (Either String (Maybe DbVersion)) readDbVersion = do @@ -1391,6 +1429,7 @@ dbVersionToText = \case DbVersion2 -> "2" DbVersion3 -> "3" DbVersion4 -> "4" + DbVersion5 -> "5" dbVersionFromText :: T.Text -> Maybe DbVersion dbVersionFromText t =