Persist "click"

This commit is contained in:
Philipp Heckel 2022-01-04 23:40:41 +01:00
parent 2e40b895a7
commit 41c1189fee
3 changed files with 31 additions and 8 deletions

View file

@ -22,27 +22,28 @@ const (
title TEXT NOT NULL, title TEXT NOT NULL,
priority INT NOT NULL, priority INT NOT NULL,
tags TEXT NOT NULL, tags TEXT NOT NULL,
click TEXT NOT NULL,
published INT NOT NULL published INT NOT NULL
); );
CREATE INDEX IF NOT EXISTS idx_topic ON messages (topic); CREATE INDEX IF NOT EXISTS idx_topic ON messages (topic);
COMMIT; COMMIT;
` `
insertMessageQuery = `INSERT INTO messages (id, time, topic, message, title, priority, tags, published) VALUES (?, ?, ?, ?, ?, ?, ?, ?)` insertMessageQuery = `INSERT INTO messages (id, time, topic, message, title, priority, tags, click, published) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`
pruneMessagesQuery = `DELETE FROM messages WHERE time < ? AND published = 1` pruneMessagesQuery = `DELETE FROM messages WHERE time < ? AND published = 1`
selectMessagesSinceTimeQuery = ` selectMessagesSinceTimeQuery = `
SELECT id, time, topic, message, title, priority, tags SELECT id, time, topic, message, title, priority, tags, click
FROM messages FROM messages
WHERE topic = ? AND time >= ? AND published = 1 WHERE topic = ? AND time >= ? AND published = 1
ORDER BY time ASC ORDER BY time ASC
` `
selectMessagesSinceTimeIncludeScheduledQuery = ` selectMessagesSinceTimeIncludeScheduledQuery = `
SELECT id, time, topic, message, title, priority, tags SELECT id, time, topic, message, title, priority, tags, click
FROM messages FROM messages
WHERE topic = ? AND time >= ? WHERE topic = ? AND time >= ?
ORDER BY time ASC ORDER BY time ASC
` `
selectMessagesDueQuery = ` selectMessagesDueQuery = `
SELECT id, time, topic, message, title, priority, tags SELECT id, time, topic, message, title, priority, tags, click
FROM messages FROM messages
WHERE time <= ? AND published = 0 WHERE time <= ? AND published = 0
` `
@ -54,7 +55,7 @@ const (
// Schema management queries // Schema management queries
const ( const (
currentSchemaVersion = 2 currentSchemaVersion = 3
createSchemaVersionTableQuery = ` createSchemaVersionTableQuery = `
CREATE TABLE IF NOT EXISTS schemaVersion ( CREATE TABLE IF NOT EXISTS schemaVersion (
id INT PRIMARY KEY, id INT PRIMARY KEY,
@ -78,6 +79,11 @@ const (
migrate1To2AlterMessagesTableQuery = ` migrate1To2AlterMessagesTableQuery = `
ALTER TABLE messages ADD COLUMN published INT NOT NULL DEFAULT(1); ALTER TABLE messages ADD COLUMN published INT NOT NULL DEFAULT(1);
` `
// 2 -> 3
migrate2To3AlterMessagesTableQuery = `
ALTER TABLE messages ADD COLUMN click TEXT NOT NULL DEFAULT('');
`
) )
type sqliteCache struct { type sqliteCache struct {
@ -104,7 +110,7 @@ func (c *sqliteCache) AddMessage(m *message) error {
return errUnexpectedMessageType return errUnexpectedMessageType
} }
published := m.Time <= time.Now().Unix() published := m.Time <= time.Now().Unix()
_, err := c.db.Exec(insertMessageQuery, m.ID, m.Time, m.Topic, m.Message, m.Title, m.Priority, strings.Join(m.Tags, ","), published) _, err := c.db.Exec(insertMessageQuery, m.ID, m.Time, m.Topic, m.Message, m.Title, m.Priority, strings.Join(m.Tags, ","), m.Click, published)
return err return err
} }
@ -187,8 +193,8 @@ func readMessages(rows *sql.Rows) ([]*message, error) {
for rows.Next() { for rows.Next() {
var timestamp int64 var timestamp int64
var priority int var priority int
var id, topic, msg, title, tagsStr string var id, topic, msg, title, tagsStr, click string
if err := rows.Scan(&id, &timestamp, &topic, &msg, &title, &priority, &tagsStr); err != nil { if err := rows.Scan(&id, &timestamp, &topic, &msg, &title, &priority, &tagsStr, &click); err != nil {
return nil, err return nil, err
} }
var tags []string var tags []string
@ -204,6 +210,7 @@ func readMessages(rows *sql.Rows) ([]*message, error) {
Title: title, Title: title,
Priority: priority, Priority: priority,
Tags: tags, Tags: tags,
Click: click,
}) })
} }
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
@ -241,6 +248,8 @@ func setupDB(db *sql.DB) error {
return migrateFrom0(db) return migrateFrom0(db)
} else if schemaVersion == 1 { } else if schemaVersion == 1 {
return migrateFrom1(db) return migrateFrom1(db)
} else if schemaVersion == 2 {
return migrateFrom2(db)
} }
return fmt.Errorf("unexpected schema version found: %d", schemaVersion) return fmt.Errorf("unexpected schema version found: %d", schemaVersion)
} }
@ -280,5 +289,16 @@ func migrateFrom1(db *sql.DB) error {
if _, err := db.Exec(updateSchemaVersion, 2); err != nil { if _, err := db.Exec(updateSchemaVersion, 2); err != nil {
return err return err
} }
return migrateFrom2(db)
}
func migrateFrom2(db *sql.DB) error {
log.Print("Migrating cache database schema: from 2 to 3")
if _, err := db.Exec(migrate2To3AlterMessagesTableQuery); err != nil {
return err
}
if _, err := db.Exec(updateSchemaVersion, 3); err != nil {
return err
}
return nil // Update this when a new version is added return nil // Update this when a new version is added
} }

View file

@ -24,6 +24,7 @@ type message struct {
Topic string `json:"topic"` Topic string `json:"topic"`
Priority int `json:"priority,omitempty"` Priority int `json:"priority,omitempty"`
Tags []string `json:"tags,omitempty"` Tags []string `json:"tags,omitempty"`
Click string `json:"click,omitempty"`
Title string `json:"title,omitempty"` Title string `json:"title,omitempty"`
Message string `json:"message,omitempty"` Message string `json:"message,omitempty"`
} }

View file

@ -210,6 +210,7 @@ func createFirebaseSubscriber(conf *Config) (subscriber, error) {
"topic": m.Topic, "topic": m.Topic,
"priority": fmt.Sprintf("%d", m.Priority), "priority": fmt.Sprintf("%d", m.Priority),
"tags": strings.Join(m.Tags, ","), "tags": strings.Join(m.Tags, ","),
"click": m.Click,
"title": m.Title, "title": m.Title,
"message": m.Message, "message": m.Message,
} }
@ -449,6 +450,7 @@ func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, fi
firebase = readParam(r, "x-firebase", "firebase") != "no" firebase = readParam(r, "x-firebase", "firebase") != "no"
email = readParam(r, "x-email", "x-e-mail", "email", "e-mail", "mail", "e") email = readParam(r, "x-email", "x-e-mail", "email", "e-mail", "mail", "e")
m.Title = readParam(r, "x-title", "title", "t") m.Title = readParam(r, "x-title", "title", "t")
m.Click = readParam(r, "x-click", "click")
messageStr := readParam(r, "x-message", "message", "m") messageStr := readParam(r, "x-message", "message", "m")
if messageStr != "" { if messageStr != "" {
m.Message = messageStr m.Message = messageStr