From a075e1bc83cbff044138f9da51154be765aefbef Mon Sep 17 00:00:00 2001 From: Duck Nebuchadnezzar Date: Sat, 18 Sep 2021 07:40:04 -0400 Subject: [PATCH] Extract db seeds --- src/main/dinsro/actions/lnd.clj | 6 +- src/main/dinsro/core.clj | 4 +- src/main/dinsro/handler.clj | 116 +------------------------------- src/main/dinsro/seed.clj | 115 +++++++++++++++++++++++++++++++ 4 files changed, 122 insertions(+), 119 deletions(-) create mode 100644 src/main/dinsro/seed.clj diff --git a/src/main/dinsro/actions/lnd.clj b/src/main/dinsro/actions/lnd.clj index 21c933f480..082361ad58 100644 --- a/src/main/dinsro/actions/lnd.clj +++ b/src/main/dinsro/actions/lnd.clj @@ -14,6 +14,7 @@ org.bitcoinj.params.RegTestParams org.bitcoinj.wallet.KeyChainGroup org.lightningj.lnd.wrapper.Message + org.lightningj.lnd.wrapper.message.AddressType org.lightningj.lnd.wrapper.message.LightningAddress org.lightningj.lnd.wrapper.message.ListChannelsRequest org.lightningj.lnd.wrapper.message.ListInvoiceRequest @@ -206,10 +207,7 @@ (defn get-lnd-address [s-lnd-api] - (.getAddress - (.newAddress s-lnd-api - org.lightningj.lnd.wrapper.message.AddressType/WITNESS_PUBKEY_HASH - "foo"))) + (.getAddress (.newAddress s-lnd-api AddressType/WITNESS_PUBKEY_HASH "foo"))) (defn open-channel-request [pubkey] diff --git a/src/main/dinsro/core.clj b/src/main/dinsro/core.clj index e59d6d779c..87d15c0743 100644 --- a/src/main/dinsro/core.clj +++ b/src/main/dinsro/core.clj @@ -5,8 +5,8 @@ [dinsro.components.nrepl] [dinsro.components.secrets :as secrets] [dinsro.components.server] - [dinsro.handler :as handler] [dinsro.middleware :as middleware] + [dinsro.seed :as seed] [mount.core :as mount] [taoensso.timbre :as log]) (:gen-class)) @@ -33,7 +33,7 @@ (let [options (parse-opts args cli-options)] (doseq [component (-> options mount/start-with-args :started)] (log/debug component "started"))) - (handler/seed-db!) + (seed/seed-db!) (.addShutdownHook (Runtime/getRuntime) (Thread. stop-app))) (defn -main diff --git a/src/main/dinsro/handler.clj b/src/main/dinsro/handler.clj index d91d24e3e0..f31abb46eb 100644 --- a/src/main/dinsro/handler.clj +++ b/src/main/dinsro/handler.clj @@ -1,28 +1,14 @@ (ns dinsro.handler (:require - [com.fulcrologic.rad.type-support.date-time :as dt] - [crux.api :as crux] [dinsro.env :refer [defaults]] - [dinsro.components.crux :as c.crux] [dinsro.layout :refer [error-page] :as layout] [dinsro.middleware :as middleware] - [dinsro.model.rate-sources :as m.rate-sources] - [dinsro.model.seed :as seed] - [dinsro.model.transactions :as m.transactions] - [dinsro.mutations.accounts :as mu.accounts] - [dinsro.mutations.categories :as mu.categories] - [dinsro.mutations.currencies :as mu.currencies] - [dinsro.mutations.rate-sources :as mu.rate-sources] - [dinsro.mutations.session :as mu.session] - [dinsro.mutations.transactions :as mu.transactions] - [dinsro.queries.currencies :as q.currencies] - [dinsro.queries.users :as q.users] [dinsro.routes :as routes] + [dinsro.seed :as seed] [mount.core :as mount] [reitit.coercion.spec] [reitit.ring :as ring] - [taoensso.timbre :as log] - [tick.alpha.api :as tick])) + [taoensso.timbre :as log])) (mount/defstate init-app :start ((or (:init defaults) (fn []))) @@ -42,103 +28,7 @@ :not-acceptable (constantly (error-page {:status 406, :title "406 - Not acceptable"}))})))) -(def links - [["accounts" "Accounts" "/accounts" :dinsro.views.index-accounts/IndexAccountsPage] - ["admin" "Admin" "/admin" :dinsro.views.admin/AdminPage] - ["categories" "Categories" "/categories" :dinsro.views.index-categories/IndexCategoriesPage] - ["currencies" "Currencies" "/currencies" :dinsro.views.index-currencies/IndexCurrenciesPage] - ["home" "Home" "/" :dinsro.views.home/HomePage] - ["login" "Login" "/login" :dinsro.views.login/LoginPage] - ["rates" "Rates" "/rates" :dinsro.views.index-rates/IndexRatesPage] - ["rate-sources" "Rate Sources" "/rate-sources" :dinsro.views.index-rate-sources/IndexRateSourcesPage] - ["registration" "Registration" "/register" :dinsro.views.registration/RegistrationPage] - ["settings" "Settings" "/settings" :dinsro.views.settings/SettingsPage] - ["transactions" "Transactions" "/transactions" :dinsro.views.index-transactions/IndexTransactionsPage] - ["users" "User" "/users" :dinsro.views.index-users/IndexUsersPage]]) - -(defn create-navlinks! - [] - (let [node (:main c.crux/crux-nodes) - add (fnil conj []) - data (reduce - (fn [data link] - (let [[id name href target] link] - (update data :navlinks add (seed/new-navlink id name href target)))) - {} links) - txes (->> data - vals - flatten - (mapv #(vector :crux.tx/put %)))] - (crux/submit-tx node txes))) - -(defn seed-db! - [] - (let [username "admin" - password "hunter2" - categories ["Category A" - "Category B" - "Category C"]] - - (create-navlinks!) - (dt/set-timezone! "America/Los_Angeles") - (mu.session/do-register username password) - - (let [user-eid (q.users/find-eid-by-name username)] - (doseq [name categories] (mu.categories/do-create user-eid name)) - - (mu.currencies/do-create "sats" "Sats" username) - (let [currency-id (q.currencies/find-eid-by-code "sats")] - (mu.accounts/do-create "exchange account" currency-id user-eid 620000.) - (mu.accounts/do-create "hot wallet" currency-id user-eid 1000000.) - (mu.accounts/do-create "duress account" currency-id user-eid (* 6.15 100000000 0.01)) - (mu.accounts/do-create "hodl stack" currency-id user-eid (* 6.15 100000000))) - - (mu.currencies/do-create "usd" "Dollars" username) - - (if-let [currency-id (q.currencies/find-eid-by-code "usd")] - (do - (mu.rate-sources/do-create - {::m.rate-sources/name "CoinLott0" - ::m.rate-sources/url "https://www.coinlott0.localhost/api/v1/quotes/BTC-USD" - ::m.rate-sources/currency currency-id}) - (mu.rate-sources/do-create - {::m.rate-sources/name "BitPonzi" - ::m.rate-sources/url "https://www.bitponzi.biz.localhost/cgi?id=3496709" - ::m.rate-sources/currency currency-id}) - (mu.rate-sources/do-create - {::m.rate-sources/name "DuckBitcoin" - ::m.rate-sources/url "https://www.duckbitcoin.localhost/api/current-rates" - ::m.rate-sources/currency currency-id}) - (mu.rate-sources/do-create - {::m.rate-sources/name "Leviathan" - ::m.rate-sources/url "https://www.leviathan.localhost/prices" - ::m.rate-sources/currency currency-id}) - - (mu.accounts/do-create "cash" currency-id user-eid 3.50) - (mu.accounts/do-create "Fun Money" currency-id user-eid 23.67) - - (if-let [account-id - (nth (:created-item (mu.accounts/do-create "debit" currency-id user-eid 500.)) - 1)] - (do - (mu.transactions/do-create - {::m.transactions/account account-id - ::m.transactions/description "a" - ::m.transactions/date (tick/instant) - ::m.transactions/value 1.0}) - (mu.transactions/do-create - {::m.transactions/account account-id - ::m.transactions/description "b" - ::m.transactions/date (tick/instant) - ::m.transactions/value 2.0})) - (throw "no account"))) - (throw "no currency")) - - (mu.currencies/do-create "eur" "Euros" username) - (let [currency-id (q.currencies/find-eid-by-code "eur")] - (mu.accounts/do-create "travel" currency-id user-eid 0))))) - (defn app [] (log/info "starting app handler") - (seed-db!) + (seed/seed-db!) (middleware/wrap-base #'app-routes)) diff --git a/src/main/dinsro/seed.clj b/src/main/dinsro/seed.clj new file mode 100644 index 0000000000..677fa16df0 --- /dev/null +++ b/src/main/dinsro/seed.clj @@ -0,0 +1,115 @@ +(ns dinsro.seed + (:require + [com.fulcrologic.rad.type-support.date-time :as dt] + [crux.api :as crux] + [dinsro.components.crux :as c.crux] + [dinsro.model.rate-sources :as m.rate-sources] + [dinsro.model.seed :as seed] + [dinsro.model.transactions :as m.transactions] + [dinsro.mutations.accounts :as mu.accounts] + [dinsro.mutations.categories :as mu.categories] + [dinsro.mutations.currencies :as mu.currencies] + [dinsro.mutations.rate-sources :as mu.rate-sources] + [dinsro.mutations.session :as mu.session] + [dinsro.mutations.transactions :as mu.transactions] + [dinsro.queries.currencies :as q.currencies] + [dinsro.queries.users :as q.users] + [reitit.coercion.spec] + [taoensso.timbre :as log] + [tick.alpha.api :as tick])) + +(def links + [["accounts" "Accounts" "/accounts" :dinsro.views.index-accounts/IndexAccountsPage] + ["admin" "Admin" "/admin" :dinsro.views.admin/AdminPage] + ["categories" "Categories" "/categories" :dinsro.views.index-categories/IndexCategoriesPage] + ["currencies" "Currencies" "/currencies" :dinsro.views.index-currencies/IndexCurrenciesPage] + ["home" "Home" "/" :dinsro.views.home/HomePage] + ["login" "Login" "/login" :dinsro.views.login/LoginPage] + ["rates" "Rates" "/rates" :dinsro.views.index-rates/IndexRatesPage] + ["rate-sources" "Rate Sources" "/rate-sources" :dinsro.views.index-rate-sources/IndexRateSourcesPage] + ["registration" "Registration" "/register" :dinsro.views.registration/RegistrationPage] + ["settings" "Settings" "/settings" :dinsro.views.settings/SettingsPage] + ["transactions" "Transactions" "/transactions" :dinsro.views.index-transactions/IndexTransactionsPage] + ["users" "User" "/users" :dinsro.views.index-users/IndexUsersPage]]) + +(defn create-navlinks! + [] + (let [node (:main c.crux/crux-nodes) + add (fnil conj []) + data (reduce + (fn [data link] + (let [[id name href target] link] + (update data :navlinks add (seed/new-navlink id name href target)))) + {} links) + txes (->> data + vals + flatten + (mapv #(vector :crux.tx/put %)))] + (crux/submit-tx node txes))) + +(defn seed-db! + [] + (let [username "admin" + password "hunter2" + categories ["Category A" + "Category B" + "Category C"]] + + (create-navlinks!) + (dt/set-timezone! "America/Los_Angeles") + (mu.session/do-register username password) + + (let [user-eid (q.users/find-eid-by-name username)] + (doseq [name categories] (mu.categories/do-create user-eid name)) + + (mu.currencies/do-create "sats" "Sats" username) + (let [currency-id (q.currencies/find-eid-by-code "sats")] + (mu.accounts/do-create "exchange account" currency-id user-eid 620000.) + (mu.accounts/do-create "hot wallet" currency-id user-eid 1000000.) + (mu.accounts/do-create "duress account" currency-id user-eid (* 6.15 100000000 0.01)) + (mu.accounts/do-create "hodl stack" currency-id user-eid (* 6.15 100000000))) + + (mu.currencies/do-create "usd" "Dollars" username) + + (if-let [currency-id (q.currencies/find-eid-by-code "usd")] + (do + (mu.rate-sources/do-create + {::m.rate-sources/name "CoinLott0" + ::m.rate-sources/url "https://www.coinlott0.localhost/api/v1/quotes/BTC-USD" + ::m.rate-sources/currency currency-id}) + (mu.rate-sources/do-create + {::m.rate-sources/name "BitPonzi" + ::m.rate-sources/url "https://www.bitponzi.biz.localhost/cgi?id=3496709" + ::m.rate-sources/currency currency-id}) + (mu.rate-sources/do-create + {::m.rate-sources/name "DuckBitcoin" + ::m.rate-sources/url "https://www.duckbitcoin.localhost/api/current-rates" + ::m.rate-sources/currency currency-id}) + (mu.rate-sources/do-create + {::m.rate-sources/name "Leviathan" + ::m.rate-sources/url "https://www.leviathan.localhost/prices" + ::m.rate-sources/currency currency-id}) + + (mu.accounts/do-create "cash" currency-id user-eid 3.50) + (mu.accounts/do-create "Fun Money" currency-id user-eid 23.67) + + (if-let [account-id + (nth (:created-item (mu.accounts/do-create "debit" currency-id user-eid 500.)) + 1)] + (do + (mu.transactions/do-create + {::m.transactions/account account-id + ::m.transactions/description "a" + ::m.transactions/date (tick/instant) + ::m.transactions/value 1.0}) + (mu.transactions/do-create + {::m.transactions/account account-id + ::m.transactions/description "b" + ::m.transactions/date (tick/instant) + ::m.transactions/value 2.0})) + (throw "no account"))) + (throw "no currency")) + + (mu.currencies/do-create "eur" "Euros" username) + (let [currency-id (q.currencies/find-eid-by-code "eur")] + (mu.accounts/do-create "travel" currency-id user-eid 0)))))