浏览代码

Fix default campaign template not being setup on first install.

This was a ridiculous miss, where on first time installation, the
well designed default e-mail template was never installed in the
DB! I never spotted this because my local dev setup, and
surprisingly, nobody ever complained that the default campaign
template was a blank slate with no styles.
Kailash Nadh 4 年之前
父节点
当前提交
05928d57b1
共有 2 个文件被更改,包括 23 次插入6 次删除
  1. 3 3
      cmd/install.go
  2. 20 3
      internal/migrations/v0.9.0.go

+ 3 - 3
cmd/install.go

@@ -96,15 +96,15 @@ func install(lastVer string, db *sqlx.DB, fs stuffbin.FileSystem, prompt bool) {
 	}
 
 	// Default template.
-	tplBody, err := ioutil.ReadFile("static/email-templates/default.tpl")
+	tplBody, err := fs.Get("/static/email-templates/default.tpl")
 	if err != nil {
-		tplBody = []byte(tplTag)
+		lo.Fatalf("error reading default e-mail template: %v", err)
 	}
 
 	var tplID int
 	if err := q.CreateTemplate.Get(&tplID,
 		"Default template",
-		string(tplBody),
+		string(tplBody.ReadBytes()),
 	); err != nil {
 		lo.Fatalf("error creating default template: %v", err)
 	}

+ 20 - 3
internal/migrations/v0.9.0.go

@@ -1,6 +1,8 @@
 package migrations
 
 import (
+	"fmt"
+
 	"github.com/jmoiron/sqlx"
 	"github.com/knadh/koanf"
 	"github.com/knadh/stuffbin"
@@ -8,13 +10,28 @@ import (
 
 // V0_9_0 performs the DB migrations for v.0.9.0.
 func V0_9_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf) error {
-	_, err := db.Exec(`
+	if _, err := db.Exec(`
 	INSERT INTO settings (key, value) VALUES
 		('app.lang', '"en"'),
 		('app.message_sliding_window', 'false'),
 		('app.message_sliding_window_duration', '"1h"'),
 		('app.message_sliding_window_rate', '10000')
 		ON CONFLICT DO NOTHING;
-	`)
-	return err
+	`); err != nil {
+		return err
+	}
+
+	// Until this version, the default template during installation was broken!
+	// Check if there's a broken default template and if yes, override it with the
+	// actual one.
+	tplBody, err := fs.Get("/static/email-templates/default.tpl")
+	if err != nil {
+		return fmt.Errorf("error reading default e-mail template: %v", err)
+	}
+
+	if _, err := db.Exec(`UPDATE templates SET body=$1 WHERE body=$2`,
+		tplBody.ReadBytes(), `{{ template "content" . }}`); err != nil {
+		return err
+	}
+	return nil
 }