47 lines
1.5 KiB
Clojure
47 lines
1.5 KiB
Clojure
(ns ldview.models.schema
|
|
(:require [clojure.java.jdbc :as sql]
|
|
[noir.io :as io]))
|
|
|
|
(def db-store "site.db")
|
|
|
|
(def db-spec {:classname "org.sqlite.JDBC"
|
|
:subprotocol "sqlite"
|
|
:subname (str (io/resource-path) db-store)})
|
|
|
|
(defn initialized? []
|
|
(.exists (new java.io.File (str (io/resource-path) db-store))))
|
|
|
|
|
|
(defn create-initial-tables []
|
|
(sql/with-connection db-spec
|
|
(sql/create-table :entries
|
|
[:id "INTEGER PRIMARY KEY AUTOINCREMENT"]
|
|
[:ld_uid "INTEGER"]
|
|
[:title "VARCHAR(255)"]
|
|
[:description "TEXT"]
|
|
[:type "VARCHAR(255)"]
|
|
[:user_id "INTEGER"]
|
|
[:competition_id "INTEGER"])
|
|
|
|
(sql/create-table :users
|
|
[:id "INTEGER PRIMARY KEY AUTOINCREMENT"]
|
|
[:name "VARCHAR(255)"])
|
|
|
|
(sql/create-table :competitions
|
|
[:id "INTEGER PRIMARY KEY AUTOINCREMENT"]
|
|
[:number "INTEGER"]
|
|
[:motto "VARCHAR(255)"])
|
|
|
|
(sql/create-table :sources
|
|
[:id "INTEGER PRIMARY KEY AUTOINCREMENT"]
|
|
[:entry_id "INTEGER"]
|
|
[:type "VARCHAR(100)"]
|
|
[:uri "VARCHAR(255)"])
|
|
|
|
(sql/do-commands "CREATE INDEX ld_uid_index ON entries (ld_uid)")
|
|
(sql/do-commands "CREATE INDEX entry_id_index ON sources (entry_id)")))
|
|
|
|
(defn create-tables []
|
|
(if-not (initialized?)
|
|
(create-initial-tables)))
|