(ns dda.backup.backup (:require [orchestra.core :refer [defn-spec]] [clojure.spec.alpha :as s] [dda.backup.backup.domain :as domain] [dda.backup.restic :as restic] [dda.backup.postgresql :as pg] [dda.backup.infrastructure :as i])) (def default (merge restic/default pg/default)) (s/def ::backup-file-config (s/merge ::restic/restic-config (s/keys :req-un [::domain/files] :opt-un []))) (s/def ::pg-role-dump-config (s/merge ::pg/pg-config ::restic/restic-config (s/keys :req-un [::domain/pg-role-prefix] :opt-un []))) (s/def ::pg-db-dump-config (s/merge ::pg/pg-config ::restic/restic-config)) (defn-spec backup-file! nil? [config ::backup-file-config] (let [config-w-defaults (merge default config)] (restic/unlock! config-w-defaults) (i/execute! (domain/backup-files-command config-w-defaults) config-w-defaults) (restic/forget! config-w-defaults))) (defn-spec backup-db-roles! nil? [config ::pg-role-dump-config] (let [config-w-defaults (merge default config)] (restic/unlock! config-w-defaults) (i/execute! (domain/backup-role-command config-w-defaults) config-w-defaults) (restic/forget! config-w-defaults))) (defn-spec backup-db! nil? [config ::pg-db-dump-config] (let [config-w-defaults (merge default config)] (restic/unlock! config-w-defaults) (i/execute! (domain/backup-db-command config-w-defaults) config-w-defaults) (restic/forget! config-w-defaults)))