module Database.Schema.Migrations.Migration
( Migration(..)
, MonadMigration(..)
, newMigration
)
where
import Database.Schema.Migrations.Dependencies
import Data.Time ()
import qualified Data.Time.Clock as Clock
data Migration = Migration { mTimestamp :: Clock.UTCTime
, mId :: String
, mDesc :: Maybe String
, mApply :: String
, mRevert :: Maybe String
, mDeps :: [String]
}
deriving (Eq, Show, Ord)
instance Dependable Migration where
depsOf = mDeps
depId = mId
class (Monad m) => MonadMigration m where
getCurrentTime :: m Clock.UTCTime
instance MonadMigration IO where
getCurrentTime = Clock.getCurrentTime
newMigration :: (MonadMigration m) => String -> m Migration
newMigration theId = do
curTime <- getCurrentTime
return $ Migration { mTimestamp = curTime
, mId = theId
, mDesc = Nothing
, mApply = ""
, mRevert = Nothing
, mDeps = []
}