diff --git a/src/db.ml b/src/db.ml index ca88f29..deac35d 100644 --- a/src/db.ml +++ b/src/db.ml @@ -17,12 +17,24 @@ let db_uri = Format.sprintf "sqlite3://%s" (Fpath.to_string db) module Db = (val Caqti_blocking.connect (Uri.of_string db_uri) |> Caqti_blocking.or_fail) +let set_foreign_keys_on = Caqti_type.(unit ->. unit) "PRAGMA foreign_keys = ON" + +let create_dream_session = + Caqti_type.(unit ->. unit) + "CREATE TABLE IF NOT EXISTS dream_session (id TEXT PRIMARY KEY, label TEXT \ + NOT NULL, expires_at REAL NOT NULL, payload TEXT NOT NULL)" + let () = - let set_foreign_keys_on = - Caqti_type.(unit ->. unit) "PRAGMA foreign_keys = ON" + let exec_unsafe q v = + match Db.exec q v with + | Error e -> + Dream.error (fun log -> log "%s" (Caqti_error.show e)); + exit 1 + | Ok () -> () in - if Result.is_error (Db.exec set_foreign_keys_on ()) then - Dream.error (fun log -> log "can't set foreign_keys on") + exec_unsafe set_foreign_keys_on (); + exec_unsafe create_dream_session (); + () let () = let query = diff --git a/src/pellest.ml b/src/pellest.ml index 9ee23fa..19a5c9e 100644 --- a/src/pellest.ml +++ b/src/pellest.ml @@ -24,7 +24,8 @@ let () = let () = let logger = if App.log then Dream.logger else Fun.id in - Dream.run ~port:App.port @@ logger @@ Dream.memory_sessions + Dream.run ~port:App.port @@ logger @@ Dream.sql_pool Db.db_uri + @@ Dream.sql_sessions ~lifetime:3600. @@ Dream.router Dream. [ get "/assets/**" Asset.get