0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-01 10:15:59 -05:00
penpot/backend/src/uxbox/emails.clj

59 lines
1.6 KiB
Clojure
Raw Normal View History

;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) 2016-2019 Andrey Antukh <niwi@niwi.nz>
(ns uxbox.emails
"Main api for send emails."
(:require
[clojure.spec.alpha :as s]
[promesa.core :as p]
[uxbox.config :as cfg]
[uxbox.common.exceptions :as ex]
[uxbox.common.spec :as us]
[uxbox.db :as db]
[uxbox.media :as media]
[uxbox.util.emails :as emails]
[uxbox.util.blob :as blob]))
2019-11-26 14:17:10 +01:00
;; --- Defaults
(def default-context
{:static media/resolve-asset
:comment (constantly nil)})
2019-11-26 14:17:10 +01:00
;; --- Register Email
(s/def ::name ::us/string)
(s/def ::register
(s/keys :req-un [::name]))
(def register
"A new profile registration welcome email."
(emails/build ::register default-context))
2019-11-26 14:17:10 +01:00
;; --- Public API
(defn render
[email context]
(let [defaults {:from (:email-from cfg/config)
:reply-to (:email-reply-to cfg/config)}]
(email (merge defaults context))))
(defn send!
"Schedule the email for sending."
[email context]
(us/assert fn? email)
(us/assert map? context)
(let [defaults {:from (:email-from cfg/config)
:reply-to (:email-reply-to cfg/config)}
data (->> (merge defaults context)
(email)
(blob/encode))
priority (case (:priority context :high) :low 1 :high 10)
sql "insert into email_queue (data, priority)
values ($1, $2) returning *"]
(-> (db/query-one db/pool [sql data priority])
(p/then' (constantly nil)))))