user.clj 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. (ns user
  2. (:require [com.stuartsierra.component :as component]
  3. [clojure.tools.namespace.repl :as namespace]
  4. [backend.config :as config]
  5. [backend.db-migrate :as migrate]
  6. [io.pedestal.service-tools.dev :as dev]
  7. [clj-time
  8. [coerce :as tc]
  9. [core :as t]]
  10. [clojure.java.io :as io]
  11. [clojure.string :as string]))
  12. (namespace/disable-reload!)
  13. (namespace/set-refresh-dirs "src" "dev")
  14. (defonce *system (atom nil))
  15. (defonce *db (atom nil))
  16. (defn migrate []
  17. (migrate/migrate @*db))
  18. (defn rollback []
  19. (migrate/rollback @*db))
  20. (defn stop []
  21. (some-> @*system (component/stop))
  22. (reset! *system nil))
  23. (defn refresh []
  24. (let [res (namespace/refresh)]
  25. (when (not= res :ok)
  26. (throw res))
  27. :ok))
  28. (defn go
  29. []
  30. (require 'backend.core)
  31. (dev/watch)
  32. (when-some [f (resolve 'backend.system/new-system)]
  33. (when-some [system (f config/config)]
  34. (when-some [system' (component/start system)]
  35. (reset! *system system')
  36. (reset! *db {:datasource (get-in @*system [:hikari :datasource])}))))
  37. (migrate))
  38. (defn reset []
  39. (stop)
  40. (refresh)
  41. (go))
  42. (defn get-unix-timestamp []
  43. (tc/to-long (t/now)))
  44. (def date-format
  45. "Format for DateTime"
  46. "yyyyMMddHHmmss")
  47. (def migrations-dir
  48. "Default migrations directory"
  49. "resources/migrations/")
  50. (def ragtime-format-edn
  51. "EDN template for SQL migrations"
  52. "{:up [\"\"]\n :down [\"\"]}")
  53. (defn migrations-dir-exist?
  54. "Checks if 'resources/migrations' directory exists"
  55. []
  56. (.isDirectory (io/file migrations-dir)))
  57. (defn now
  58. "Gets the current DateTime" []
  59. (.format (java.text.SimpleDateFormat. date-format) (new java.util.Date)))
  60. (defn migration-file-path
  61. "Complete migration file path"
  62. [name]
  63. (str migrations-dir (now) "_" (string/replace name #"\s+|-+|_+" "_") ".edn"))
  64. (defn create-migration
  65. "Creates a migration file with the current DateTime"
  66. [name]
  67. (let [migration-file (migration-file-path name)]
  68. (if-not (migrations-dir-exist?)
  69. (io/make-parents migration-file))
  70. (spit migration-file ragtime-format-edn)))
  71. (defn reset-db
  72. []
  73. (dotimes [i 100]
  74. (rollback))
  75. (migrate))