LoginSignup
4
0

More than 5 years have passed since last update.

Yesodで作るWebアプリの起動時にDBに対して処理を行う

Posted at

Yesod Advent Calendar 2016|14日目の投稿です。

Webサーバ起動時にDBに対して処理を行いたいことがあります。
例えば設定値テーブルにデフォルト値を突っ込んだり、システム管理者を登録したり・・・

Yesodでこのような処理を行う場所は、Application.hsの中のmakeFoundation 関数が良さそうです。

書き方

Yesodのテンプレートで作成したmakeFoundation関数の中には次のような処理があります。

Application.hs
-- Perform database migration using our application's logging settings.
runLoggingT (runSqlPool (runMigration migrateAll) pool) logFunc

この処理を真似して新しい処理を追加することで、起動時にオリジナルのDBアクセス処理を追加することが出来ます。
例えば以下のように。

Application.hs
-- Perform database migration using our application's logging settings.
runLoggingT (runSqlPool (runMigration migrateAll) pool) logFunc

-- DB処理を追加
runLoggingT (runSqlPool (initializeDbData) pool) logFunc

initializeDbData 関数の中では、selectList など、 Database.Persist モジュールの関数が使えます。Modelも展開されているので、Handler関数の中と同じ感覚でDBアクセスが書けます。

Applicatin.hs
initializeDbData = do
    l::(Maybe (Entity SystemConfiguration)) <- selectFirst [] []
    case l of
        Nothing -> do
                     now <- liftIO $ getCurrentTime
                     sc  <- pure $ SystemConfiguration {
                                     _systemConfigurationValue = "XXXX"
                                   }
                     _ <- insert sc
                     pure ()
        Just _ -> pure ()

以上です。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0