|
1 | 1 | (ns clojure-game-geek.db
|
2 | 2 | (:require
|
3 | 3 | [com.stuartsierra.component :as component]
|
4 |
| - [postgres.async :refer [open-db query! close-db!]] |
5 |
| - [clojure.core.async :refer [<!!]])) |
| 4 | + [clojure.java.jdbc :as jdbc]) |
| 5 | + (:import (com.mchange.v2.c3p0 ComboPooledDataSource))) |
6 | 6 |
|
7 |
| -(defrecord ClojureGameGeekDb [conn] |
| 7 | +(defn ^:private pooled-data-source |
| 8 | + [host dbname user password port] |
| 9 | + {:datasource |
| 10 | + (doto (ComboPooledDataSource.) |
| 11 | + (.setDriverClass "org.postgresql.Driver" ) |
| 12 | + (.setJdbcUrl (str "jdbc:postgresql://" host ":" port "/" dbname)) |
| 13 | + (.setUser user) |
| 14 | + (.setPassword password))}) |
| 15 | + |
| 16 | +(defrecord ClojureGameGeekDb [ds] |
8 | 17 |
|
9 | 18 | component/Lifecycle
|
10 | 19 |
|
11 | 20 | (start [this]
|
12 | 21 | (assoc this
|
13 |
| - :conn (open-db {:hostname "localhost" |
14 |
| - :database "cggdb" |
15 |
| - :username "cgg_role" |
16 |
| - :password "lacinia" |
17 |
| - ;; Host port mapped to 5432 in the container |
18 |
| - :port 25432}))) |
| 22 | + :ds (pooled-data-source "localhost" "cggdb" "cgg_role" "lacinia" 25432))) |
19 | 23 |
|
20 | 24 | (stop [this]
|
21 |
| - (close-db! conn) |
22 |
| - (assoc this :conn nil))) |
| 25 | + (-> ds :datasource .close) |
| 26 | + (assoc this :ds nil))) |
23 | 27 |
|
24 | 28 | (defn new-db
|
25 | 29 | []
|
26 | 30 | {:db (map->ClojureGameGeekDb {})})
|
27 | 31 |
|
28 |
| -(defn ^:private take! |
29 |
| - "Takes a value from a channel and rethrows an exception if that is the |
30 |
| - conveyed value." |
31 |
| - [ch] |
32 |
| - (let [v (<!! ch)] |
33 |
| - (if (instance? Throwable v) |
34 |
| - (throw v) |
35 |
| - v))) |
36 | 32 |
|
37 | 33 | (defn find-game-by-id
|
38 | 34 | [component game-id]
|
39 |
| - (-> (query! (:conn component) |
40 |
| - ["select game_id, name, summary, min_players, max_players, created_at, updated_at |
41 |
| - from board_game where game_id = $1" game-id]) |
42 |
| - take! |
43 |
| - first)) |
| 35 | + (first |
| 36 | + (jdbc/query (:ds component) |
| 37 | + ["select game_id, name, summary, min_players, max_players, created_at, updated_at |
| 38 | + from board_game where game_id = ?" game-id]))) |
44 | 39 |
|
45 | 40 | (defn find-member-by-id
|
46 | 41 | [component member-id]
|
|
0 commit comments