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