@@ -222,7 +222,7 @@ type DecksAPI =
222222 Protected :> QueryParam " owner_id" UserId :> Get '[JSON ] [Item DeckId Deck ] :<|>
223223 Protected :>
224224 Capture " deck_id" DeckId :>
225- Get '[JSON ] Deck :<|>
225+ Get '[JSON ] ( Item DeckId Deck ) :<|>
226226 Protected :>
227227 Capture " deck_id" DeckId :>
228228 " publish" :>
@@ -810,7 +810,7 @@ decksGetDeckId
810810 :: HC. Connection
811811 -> Firebase. UserId
812812 -> DeckId
813- -> Servant. Handler Deck
813+ -> Servant. Handler ( Item DeckId Deck )
814814decksGetDeckId conn fuid deckId = do
815815
816816 iface <- liftIO $ getDbInterface conn
@@ -827,7 +827,7 @@ decksGetDeckId conn fuid deckId = do
827827 [ " Deck was found" , show deck, " but requester is not the owner" , show fuid ]
828828 Servant. throwError Servant. err404
829829
830- pure deck
830+ pure ( Item deckId deck)
831831
832832decksDeleteSession :: DeckId -> HS. Session ()
833833decksDeleteSession did = do
@@ -1209,6 +1209,8 @@ data DbVersion
12091209 | DbVersion1
12101210 | DbVersion2
12111211 | DbVersion3
1212+ | DbVersion4
1213+ | DbVersion5
12121214 deriving stock (Enum , Bounded , Ord , Eq )
12131215
12141216-- | Migrates from ver to latest
@@ -1309,6 +1311,80 @@ migrateFrom = \frm -> do
13091311 , " );"
13101312 ]
13111313 ) HE. unit HD. unit True
1314+ DbVersion4 -> do
1315+ HS. sql " DROP TABLE IF EXISTS username"
1316+ HS. sql " DROP TABLE IF EXISTS account CASCADE"
1317+ HS. sql " DROP TABLE IF EXISTS slide"
1318+ HS. sql " DROP TABLE IF EXISTS deck"
1319+ HS. statement () $ Statement
1320+ (BS8. unwords
1321+ [ " CREATE TABLE account ("
1322+ , " id TEXT PRIMARY KEY,"
1323+ , " firebase_id TEXT UNIQUE,"
1324+ , " username TEXT UNIQUE NULL"
1325+ , " );"
1326+ ]
1327+ ) HE. unit HD. unit True
1328+ HS. statement () $ Statement
1329+ (BS8. unwords
1330+ [ " CREATE TABLE deck ("
1331+ , " id TEXT PRIMARY KEY,"
1332+ , " name TEXT NOT NULL,"
1333+ , " background TEXT NULL,"
1334+ , " owner TEXT NOT NULL REFERENCES account (id),"
1335+ , " attributes JSON"
1336+ , " );"
1337+ ]
1338+ ) HE. unit HD. unit True
1339+ HS. statement () $ Statement
1340+ (BS8. unwords
1341+ [ " CREATE TABLE slide ("
1342+ , " id TEXT PRIMARY KEY,"
1343+ , " deck TEXT NOT NULL REFERENCES deck (id) ON DELETE CASCADE,"
1344+ , " index INT2 NULL,"
1345+ , " content TEXT," -- TODO: is any of this nullable?
1346+ , " template TEXT,"
1347+ , " attributes JSON"
1348+ , " );"
1349+ ]
1350+ ) HE. unit HD. unit True
1351+ DbVersion5 -> do
1352+ HS. sql " DROP TABLE IF EXISTS username"
1353+ HS. sql " DROP TABLE IF EXISTS account CASCADE"
1354+ HS. sql " DROP TABLE IF EXISTS slide"
1355+ HS. sql " DROP TABLE IF EXISTS deck"
1356+ HS. statement () $ Statement
1357+ (BS8. unwords
1358+ [ " CREATE TABLE account ("
1359+ , " id TEXT PRIMARY KEY,"
1360+ , " firebase_id TEXT UNIQUE,"
1361+ , " username TEXT UNIQUE NULL"
1362+ , " );"
1363+ ]
1364+ ) HE. unit HD. unit True
1365+ HS. statement () $ Statement
1366+ (BS8. unwords
1367+ [ " CREATE TABLE deck ("
1368+ , " id TEXT PRIMARY KEY,"
1369+ , " name TEXT NOT NULL,"
1370+ , " background TEXT NULL,"
1371+ , " owner TEXT NOT NULL REFERENCES account (id) ON DELETE CASCADE,"
1372+ , " attributes JSON"
1373+ , " );"
1374+ ]
1375+ ) HE. unit HD. unit True
1376+ HS. statement () $ Statement
1377+ (BS8. unwords
1378+ [ " CREATE TABLE slide ("
1379+ , " id TEXT PRIMARY KEY,"
1380+ , " deck TEXT NOT NULL REFERENCES deck (id) ON DELETE CASCADE,"
1381+ , " index INT2 NULL,"
1382+ , " content TEXT," -- TODO: is any of this nullable?
1383+ , " template TEXT,"
1384+ , " attributes JSON"
1385+ , " );"
1386+ ]
1387+ ) HE. unit HD. unit True
13121388
13131389readDbVersion :: HS. Session (Either String (Maybe DbVersion ))
13141390readDbVersion = do
@@ -1352,6 +1428,8 @@ dbVersionToText = \case
13521428 DbVersion1 -> " 1"
13531429 DbVersion2 -> " 2"
13541430 DbVersion3 -> " 3"
1431+ DbVersion4 -> " 4"
1432+ DbVersion5 -> " 5"
13551433
13561434dbVersionFromText :: T. Text -> Maybe DbVersion
13571435dbVersionFromText t =
0 commit comments