Revert adding a db since I'm going with flat files

This commit is contained in:
Charlotte Allen 2020-01-27 19:42:36 -08:00
parent 29e932d14d
commit b41d6534ca
No known key found for this signature in database
GPG Key ID: 3A64C3A6C69860B0
13 changed files with 13 additions and 237 deletions

41
env/dev/clj/user.clj vendored
View File

@ -2,14 +2,11 @@
"Userspace functions you can run by default in your local REPL."
(:require
[shapey-shifty.config :refer [env]]
[clojure.pprint]
[clojure.spec.alpha :as s]
[expound.alpha :as expound]
[mount.core :as mount]
[shapey-shifty.core :refer [start-app]]
[shapey-shifty.db.core]
[conman.core :as conman]
[luminus-migrations.core :as migrations]))
[clojure.pprint]
[clojure.spec.alpha :as s]
[expound.alpha :as expound]
[mount.core :as mount]
[shapey-shifty.core :refer [start-app]]))
(alter-var-root #'s/*explain-out* (constantly expound/printer))
@ -32,32 +29,4 @@
(stop)
(start))
(defn restart-db
"Restarts database."
[]
(mount/stop #'shapey-shifty.db.core/*db*)
(mount/start #'shapey-shifty.db.core/*db*)
(binding [*ns* 'shapey-shifty.db.core]
(conman/bind-connection shapey-shifty.db.core/*db* "sql/queries.sql")))
(defn reset-db
"Resets database."
[]
(migrations/migrate ["reset"] (select-keys env [:database-url])))
(defn migrate
"Migrates database up for all outstanding migrations."
[]
(migrations/migrate ["migrate"] (select-keys env [:database-url])))
(defn rollback
"Rollback latest database migration."
[]
(migrations/migrate ["rollback"] (select-keys env [:database-url])))
(defn create-migration
"Create a new up and down migration file with a generated timestamp and `name`."
[name]
(migrations/create name (select-keys env [:database-url])))

View File

@ -26,7 +26,6 @@
</appender>
<logger name="org.apache.http" level="warn" />
<logger name="org.xnio.nio" level="warn" />
<logger name="com.zaxxer.hikari" level="warn" />
<logger name="org.eclipse.jetty" level="warn" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />

View File

@ -18,7 +18,6 @@
</appender>
<logger name="org.apache.http" level="warn" />
<logger name="org.xnio.nio" level="warn" />
<logger name="com.zaxxer.hikari" level="warn" />
<logger name="org.eclipse.jetty" level="warn" />
<root level="INFO">
<appender-ref ref="FILE" />

View File

@ -26,7 +26,6 @@
</appender>
<logger name="org.apache.http" level="warn" />
<logger name="org.xnio.nio" level="warn" />
<logger name="com.zaxxer.hikari" level="warn" />
<logger name="org.eclipse.jetty" level="warn" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />

View File

@ -7,12 +7,10 @@
[cheshire "5.9.0"]
[clojure.java-time "0.3.2"]
[org.clojure/data.json "0.2.7"]
[conman "0.8.4"]
[cprop "0.1.15"]
[expound "0.8.3"]
[funcool/struct "1.4.0"]
[luminus-jetty "0.1.7"]
[luminus-migrations "0.6.6"]
[luminus-transit "0.1.2"]
[luminus/ring-ttl-session "0.3.3"]
[markdown-clj "1.10.1"]
@ -24,7 +22,6 @@
[org.clojure/clojure "1.10.1"]
[org.clojure/tools.cli "0.4.2"]
[org.clojure/tools.logging "0.5.0"]
[org.postgresql/postgresql "42.2.9"]
[org.webjars.npm/bulma "0.8.0"]
[org.webjars.npm/material-icons "0.3.1"]
[org.webjars/webjars-locator "0.38"]

View File

@ -91,21 +91,6 @@ the `env/dev/clj/` source path.
<a class="btn btn-primary" href="http://www.luminusweb.net/docs/middleware.md">learn more about middleware »</a>
<div class="bs-callout bs-callout-danger">
#### Database configuration is required
If you haven't already, then please follow the steps below to configure your database connection and run the necessary migrations.
* Create the database for your application.
* Update the connection URL in the `dev-config.edn` and `test-config.edn` files with your database name and login credentials.
* Run `lein run migrate` in the root of the project to create the tables.
* Let `mount` know to start the database connection by `require`-ing `shapey-shifty.db.core` in some other namespace.
* Restart the application.
<a class="btn btn-primary" href="http://www.luminusweb.net/docs/database.md">learn more about database access »</a>
</div>

View File

@ -1 +0,0 @@
DROP TABLE users;

View File

@ -1,9 +0,0 @@
CREATE TABLE users
(id VARCHAR(20) PRIMARY KEY,
first_name VARCHAR(30),
last_name VARCHAR(30),
email VARCHAR(30),
admin BOOLEAN,
last_login TIMESTAMP,
is_active BOOLEAN,
pass VARCHAR(300));

View File

@ -1,21 +0,0 @@
-- :name create-user! :! :n
-- :doc creates a new user record
INSERT INTO users
(id, first_name, last_name, email, pass)
VALUES (:id, :first_name, :last_name, :email, :pass)
-- :name update-user! :! :n
-- :doc updates an existing user record
UPDATE users
SET first_name = :first_name, last_name = :last_name, email = :email
WHERE id = :id
-- :name get-user :? :1
-- :doc retrieves a user record given the id
SELECT * FROM users
WHERE id = :id
-- :name delete-user! :! :n
-- :doc deletes a user record given the id
DELETE FROM users
WHERE id = :id

View File

@ -1,13 +1,12 @@
(ns shapey-shifty.core
(:require
[shapey-shifty.handler :as handler]
[shapey-shifty.nrepl :as nrepl]
[luminus.http-server :as http]
[luminus-migrations.core :as migrations]
[shapey-shifty.config :refer [env]]
[clojure.tools.cli :refer [parse-opts]]
[clojure.tools.logging :as log]
[mount.core :as mount])
[shapey-shifty.handler :as handler]
[shapey-shifty.nrepl :as nrepl]
[luminus.http-server :as http]
[shapey-shifty.config :refer [env]]
[clojure.tools.cli :refer [parse-opts]]
[clojure.tools.logging :as log]
[mount.core :as mount])
(:gen-class))
;; log uncaught exceptions in threads
@ -55,20 +54,4 @@
(.addShutdownHook (Runtime/getRuntime) (Thread. stop-app)))
(defn -main [& args]
(mount/start #'shapey-shifty.config/env)
(cond
(nil? (:database-url env))
(do
(log/error "Database configuration not found, :database-url environment variable must be set before running")
(System/exit 1))
(some #{"init"} args)
(do
(migrations/init (select-keys env [:database-url :init-script]))
(System/exit 0))
(migrations/migration? args)
(do
(migrations/migrate args (select-keys env [:database-url]))
(System/exit 0))
:else
(start-app args)))
(start-app args))

View File

@ -1,85 +0,0 @@
(ns shapey-shifty.db.core
(:require
[cheshire.core :refer [generate-string parse-string]]
[clojure.java.jdbc :as jdbc]
[clojure.tools.logging :as log]
[conman.core :as conman]
[java-time :as jt]
[java-time.pre-java8]
[shapey-shifty.config :refer [env]]
[mount.core :refer [defstate]])
(:import org.postgresql.util.PGobject
java.sql.Array
clojure.lang.IPersistentMap
clojure.lang.IPersistentVector
[java.sql
BatchUpdateException
PreparedStatement]))
(defstate ^:dynamic *db*
:start (if-let [jdbc-url (env :database-url)]
(conman/connect! {:jdbc-url jdbc-url})
(do
(log/warn "database connection URL was not found, please set :database-url in your config, e.g: dev-config.edn")
*db*))
:stop (conman/disconnect! *db*))
(conman/bind-connection *db* "sql/queries.sql")
(extend-protocol jdbc/IResultSetReadColumn
java.sql.Timestamp
(result-set-read-column [v _2 _3]
(.toLocalDateTime v))
java.sql.Date
(result-set-read-column [v _2 _3]
(.toLocalDate v))
java.sql.Time
(result-set-read-column [v _2 _3]
(.toLocalTime v))
Array
(result-set-read-column [v _ _] (vec (.getArray v)))
PGobject
(result-set-read-column [pgobj _metadata _index]
(let [type (.getType pgobj)
value (.getValue pgobj)]
(case type
"json" (parse-string value true)
"jsonb" (parse-string value true)
"citext" (str value)
value))))
(defn to-pg-json [value]
(doto (PGobject.)
(.setType "jsonb")
(.setValue (generate-string value))))
(extend-type clojure.lang.IPersistentVector
jdbc/ISQLParameter
(set-parameter [v ^java.sql.PreparedStatement stmt ^long idx]
(let [conn (.getConnection stmt)
meta (.getParameterMetaData stmt)
type-name (.getParameterTypeName meta idx)]
(if-let [elem-type (when (= (first type-name) \_) (apply str (rest type-name)))]
(.setObject stmt idx (.createArrayOf conn elem-type (to-array v)))
(.setObject stmt idx (to-pg-json v))))))
(extend-protocol jdbc/ISQLValue
java.util.Date
(sql-value [v]
(java.sql.Timestamp. (.getTime v)))
java.time.LocalTime
(sql-value [v]
(jt/sql-time v))
java.time.LocalDate
(sql-value [v]
(jt/sql-date v))
java.time.LocalDateTime
(sql-value [v]
(jt/sql-timestamp v))
java.time.ZonedDateTime
(sql-value [v]
(jt/sql-timestamp v))
IPersistentMap
(sql-value [value] (to-pg-json value))
IPersistentVector
(sql-value [value] (to-pg-json value)))

View File

@ -1,7 +1,6 @@
(ns shapey-shifty.routes.home
(:require
[shapey-shifty.layout :as layout]
[shapey-shifty.db.core :as db]
[clojure.java.io :as io]
[shapey-shifty.middleware :as middleware]
[ring.util.response]

View File

@ -1,38 +0,0 @@
(ns shapey-shifty.test.db.core
(:require
[shapey-shifty.db.core :refer [*db*] :as db]
[java-time.pre-java8]
[luminus-migrations.core :as migrations]
[clojure.test :refer :all]
[clojure.java.jdbc :as jdbc]
[shapey-shifty.config :refer [env]]
[mount.core :as mount]))
(use-fixtures
:once
(fn [f]
(mount/start
#'shapey-shifty.config/env
#'shapey-shifty.db.core/*db*)
(migrations/migrate ["migrate"] (select-keys env [:database-url]))
(f)))
(deftest test-users
(jdbc/with-db-transaction [t-conn *db*]
(jdbc/db-set-rollback-only! t-conn)
(is (= 1 (db/create-user!
t-conn
{:id "1"
:first_name "Sam"
:last_name "Smith"
:email "sam.smith@example.com"
:pass "pass"})))
(is (= {:id "1"
:first_name "Sam"
:last_name "Smith"
:email "sam.smith@example.com"
:pass "pass"
:admin nil
:last_login nil
:is_active nil}
(db/get-user t-conn {:id "1"})))))