@@ -2,9 +2,9 @@ module Database.Migrations
22 (migrateDatabase ) where
33
44import Control.Monad.Reader (MonadIO )
5- import Database.Database ( getDatabaseVersion )
6- import Database.Persist.Sql ( Migration , SqlPersistT , addMigration , runMigration , runMigrationUnsafe )
7- import Database.Tables ( migrateAll )
5+ import Data.List ( sortOn )
6+ import Database.Database ( getDatabaseVersion , setDatabaseVersion )
7+ import Database.Persist.Sql ( Migration , SqlPersistT , addMigration , runMigrationUnsafe )
88
99data MigrationWrapper = MigrationWrapper {
1010 version :: Int ,
@@ -14,16 +14,19 @@ data MigrationWrapper = MigrationWrapper {
1414-- | Migrates the database
1515migrateDatabase :: MonadIO m => SqlPersistT m ()
1616migrateDatabase = do
17- -- Run unsafe migrations
1817 currVersion <- getDatabaseVersion
1918 applyMigrations currVersion migrationList
20- -- Run safe migrations
21- runMigration migrateAll
2219
2320-- | Migrates the database by applying only migrations newer than the current version number
2421applyMigrations :: MonadIO m => Int -> [MigrationWrapper ] -> SqlPersistT m ()
2522applyMigrations currVersion migrations = do
26- mapM_ (runMigrationUnsafe . script) $ filter (\ migration -> version migration > currVersion) migrations
23+ mapM_ (runMigrationUnsafe . script)
24+ $ sortOn version
25+ $ filter (\ migration -> version migration > currVersion) migrations
26+
27+ case migrations of
28+ [] -> return ()
29+ _ -> setDatabaseVersion $ maximum $ map version migrations
2730
2831-- | List of migrations
2932migrationList :: [MigrationWrapper ]
0 commit comments