keiro-migrations-0.6.0.0: src/Keiro/Migrations/New.hs
-- | Generate a new timestamped Keiro migration skeleton.
--
-- The embedded migrations are ordered by their @YYYY-MM-DD-HH-MM-SS-slug.sql@
-- file names (lexicographic order == chronological order because every field is
-- fixed-width and zero-padded). 'newMigrationFile' stamps the /real/ current UTC
-- time, so two migrations authored at different moments can never collide and
-- always sort in authoring order -- no hand-assigned slots to coordinate.
module Keiro.Migrations.New
( newMigrationFile,
defaultMigrationsDir,
migrationFileName,
migrationSlug,
migrationTemplate,
)
where
import Codd.Extras.New qualified as New
import Data.Time (UTCTime)
defaultMigrationsDir :: FilePath
defaultMigrationsDir = New.defaultMigrationsDir
newMigrationFile :: FilePath -> String -> IO FilePath
newMigrationFile = New.newMigrationFile migrationFileConfig
migrationFileName :: UTCTime -> String -> FilePath
migrationFileName = New.migrationFileName migrationFileConfig
migrationSlug :: String -> String
migrationSlug = New.migrationSlug (Just "keiro")
migrationTemplate :: String -> String
migrationTemplate description =
unlines
[ "-- " <> description,
"--",
"-- Create objects fully qualified in the keiro schema (no session path pin).",
"-- Example:",
"-- CREATE TABLE IF NOT EXISTS keiro.keiro_example (",
"-- id UUID PRIMARY KEY",
"-- );",
"",
"-- TODO: write the migration body. Prefer idempotent DDL (IF NOT EXISTS)."
]
migrationFileConfig :: New.MigrationFileConfig
migrationFileConfig =
New.MigrationFileConfig
{ New.migrationSlugPrefix = Just "keiro",
New.migrationTemplate = migrationTemplate
}