Renaming for consistency
This commit is contained in:
@@ -7,99 +7,99 @@ import (
|
|||||||
|
|
||||||
// PostgreSQL runtime query constants
|
// PostgreSQL runtime query constants
|
||||||
const (
|
const (
|
||||||
pgInsertMessageQuery = `
|
postgresInsertMessageQuery = `
|
||||||
INSERT INTO message (mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, attachment_deleted, sender, user_id, content_type, encoding, published)
|
INSERT INTO message (mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, attachment_deleted, sender, user_id, content_type, encoding, published)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24)
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24)
|
||||||
`
|
`
|
||||||
pgDeleteMessageQuery = `DELETE FROM message WHERE mid = $1`
|
postgresDeleteMessageQuery = `DELETE FROM message WHERE mid = $1`
|
||||||
pgSelectScheduledMessageIDsBySeqIDQuery = `SELECT mid FROM message WHERE topic = $1 AND sequence_id = $2 AND published = FALSE`
|
postgresSelectScheduledMessageIDsBySeqIDQuery = `SELECT mid FROM message WHERE topic = $1 AND sequence_id = $2 AND published = FALSE`
|
||||||
pgDeleteScheduledBySequenceIDQuery = `DELETE FROM message WHERE topic = $1 AND sequence_id = $2 AND published = FALSE`
|
postgresDeleteScheduledBySequenceIDQuery = `DELETE FROM message WHERE topic = $1 AND sequence_id = $2 AND published = FALSE`
|
||||||
pgUpdateMessagesForTopicExpiryQuery = `UPDATE message SET expires = $1 WHERE topic = $2`
|
postgresUpdateMessagesForTopicExpiryQuery = `UPDATE message SET expires = $1 WHERE topic = $2`
|
||||||
pgSelectRowIDFromMessageID = `SELECT id FROM message WHERE mid = $1`
|
postgresSelectRowIDFromMessageIDQuery = `SELECT id FROM message WHERE mid = $1`
|
||||||
pgSelectMessagesByIDQuery = `
|
postgresSelectMessagesByIDQuery = `
|
||||||
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
||||||
FROM message
|
FROM message
|
||||||
WHERE mid = $1
|
WHERE mid = $1
|
||||||
`
|
`
|
||||||
pgSelectMessagesSinceTimeQuery = `
|
postgresSelectMessagesSinceTimeQuery = `
|
||||||
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
||||||
FROM message
|
FROM message
|
||||||
WHERE topic = $1 AND time >= $2 AND published = TRUE
|
WHERE topic = $1 AND time >= $2 AND published = TRUE
|
||||||
ORDER BY time, id
|
ORDER BY time, id
|
||||||
`
|
`
|
||||||
pgSelectMessagesSinceTimeIncludeScheduledQuery = `
|
postgresSelectMessagesSinceTimeIncludeScheduledQuery = `
|
||||||
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
||||||
FROM message
|
FROM message
|
||||||
WHERE topic = $1 AND time >= $2
|
WHERE topic = $1 AND time >= $2
|
||||||
ORDER BY time, id
|
ORDER BY time, id
|
||||||
`
|
`
|
||||||
pgSelectMessagesSinceIDQuery = `
|
postgresSelectMessagesSinceIDQuery = `
|
||||||
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
||||||
FROM message
|
FROM message
|
||||||
WHERE topic = $1 AND id > $2 AND published = TRUE
|
WHERE topic = $1 AND id > $2 AND published = TRUE
|
||||||
ORDER BY time, id
|
ORDER BY time, id
|
||||||
`
|
`
|
||||||
pgSelectMessagesSinceIDIncludeScheduledQuery = `
|
postgresSelectMessagesSinceIDIncludeScheduledQuery = `
|
||||||
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
||||||
FROM message
|
FROM message
|
||||||
WHERE topic = $1 AND (id > $2 OR published = FALSE)
|
WHERE topic = $1 AND (id > $2 OR published = FALSE)
|
||||||
ORDER BY time, id
|
ORDER BY time, id
|
||||||
`
|
`
|
||||||
pgSelectMessagesLatestQuery = `
|
postgresSelectMessagesLatestQuery = `
|
||||||
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
||||||
FROM message
|
FROM message
|
||||||
WHERE topic = $1 AND published = TRUE
|
WHERE topic = $1 AND published = TRUE
|
||||||
ORDER BY time DESC, id DESC
|
ORDER BY time DESC, id DESC
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
`
|
`
|
||||||
pgSelectMessagesDueQuery = `
|
postgresSelectMessagesDueQuery = `
|
||||||
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user_id, content_type, encoding
|
||||||
FROM message
|
FROM message
|
||||||
WHERE time <= $1 AND published = FALSE
|
WHERE time <= $1 AND published = FALSE
|
||||||
ORDER BY time, id
|
ORDER BY time, id
|
||||||
`
|
`
|
||||||
pgSelectMessagesExpiredQuery = `SELECT mid FROM message WHERE expires <= $1 AND published = TRUE`
|
postgresSelectMessagesExpiredQuery = `SELECT mid FROM message WHERE expires <= $1 AND published = TRUE`
|
||||||
pgUpdateMessagePublishedQuery = `UPDATE message SET published = TRUE WHERE mid = $1`
|
postgresUpdateMessagePublishedQuery = `UPDATE message SET published = TRUE WHERE mid = $1`
|
||||||
pgSelectMessagesCountQuery = `SELECT COUNT(*) FROM message`
|
postgresSelectMessagesCountQuery = `SELECT COUNT(*) FROM message`
|
||||||
pgSelectMessageCountPerTopicQuery = `SELECT topic, COUNT(*) FROM message GROUP BY topic`
|
postgresSelectMessageCountPerTopicQuery = `SELECT topic, COUNT(*) FROM message GROUP BY topic`
|
||||||
pgSelectTopicsQuery = `SELECT topic FROM message GROUP BY topic`
|
postgresSelectTopicsQuery = `SELECT topic FROM message GROUP BY topic`
|
||||||
|
|
||||||
pgUpdateAttachmentDeleted = `UPDATE message SET attachment_deleted = TRUE WHERE mid = $1`
|
postgresUpdateAttachmentDeletedQuery = `UPDATE message SET attachment_deleted = TRUE WHERE mid = $1`
|
||||||
pgSelectAttachmentsExpiredQuery = `SELECT mid FROM message WHERE attachment_expires > 0 AND attachment_expires <= $1 AND attachment_deleted = FALSE`
|
postgresSelectAttachmentsExpiredQuery = `SELECT mid FROM message WHERE attachment_expires > 0 AND attachment_expires <= $1 AND attachment_deleted = FALSE`
|
||||||
pgSelectAttachmentsSizeBySenderQuery = `SELECT COALESCE(SUM(attachment_size), 0) FROM message WHERE user_id = '' AND sender = $1 AND attachment_expires >= $2`
|
postgresSelectAttachmentsSizeBySenderQuery = `SELECT COALESCE(SUM(attachment_size), 0) FROM message WHERE user_id = '' AND sender = $1 AND attachment_expires >= $2`
|
||||||
pgSelectAttachmentsSizeByUserIDQuery = `SELECT COALESCE(SUM(attachment_size), 0) FROM message WHERE user_id = $1 AND attachment_expires >= $2`
|
postgresSelectAttachmentsSizeByUserIDQuery = `SELECT COALESCE(SUM(attachment_size), 0) FROM message WHERE user_id = $1 AND attachment_expires >= $2`
|
||||||
|
|
||||||
pgSelectStatsQuery = `SELECT value FROM message_stats WHERE key = 'messages'`
|
postgresSelectStatsQuery = `SELECT value FROM message_stats WHERE key = 'messages'`
|
||||||
pgUpdateStatsQuery = `UPDATE message_stats SET value = $1 WHERE key = 'messages'`
|
postgresUpdateStatsQuery = `UPDATE message_stats SET value = $1 WHERE key = 'messages'`
|
||||||
pgUpdateMessageTimesQuery = `UPDATE message SET time = $1 WHERE mid = $2`
|
postgresUpdateMessageTimesQuery = `UPDATE message SET time = $1 WHERE mid = $2`
|
||||||
)
|
)
|
||||||
|
|
||||||
var pgQueries = storeQueries{
|
var pgQueries = storeQueries{
|
||||||
insertMessage: pgInsertMessageQuery,
|
insertMessage: postgresInsertMessageQuery,
|
||||||
deleteMessage: pgDeleteMessageQuery,
|
deleteMessage: postgresDeleteMessageQuery,
|
||||||
selectScheduledMessageIDsBySeqID: pgSelectScheduledMessageIDsBySeqIDQuery,
|
selectScheduledMessageIDsBySeqID: postgresSelectScheduledMessageIDsBySeqIDQuery,
|
||||||
deleteScheduledBySequenceID: pgDeleteScheduledBySequenceIDQuery,
|
deleteScheduledBySequenceID: postgresDeleteScheduledBySequenceIDQuery,
|
||||||
updateMessagesForTopicExpiry: pgUpdateMessagesForTopicExpiryQuery,
|
updateMessagesForTopicExpiry: postgresUpdateMessagesForTopicExpiryQuery,
|
||||||
selectRowIDFromMessageID: pgSelectRowIDFromMessageID,
|
selectRowIDFromMessageID: postgresSelectRowIDFromMessageIDQuery,
|
||||||
selectMessagesByID: pgSelectMessagesByIDQuery,
|
selectMessagesByID: postgresSelectMessagesByIDQuery,
|
||||||
selectMessagesSinceTime: pgSelectMessagesSinceTimeQuery,
|
selectMessagesSinceTime: postgresSelectMessagesSinceTimeQuery,
|
||||||
selectMessagesSinceTimeScheduled: pgSelectMessagesSinceTimeIncludeScheduledQuery,
|
selectMessagesSinceTimeScheduled: postgresSelectMessagesSinceTimeIncludeScheduledQuery,
|
||||||
selectMessagesSinceID: pgSelectMessagesSinceIDQuery,
|
selectMessagesSinceID: postgresSelectMessagesSinceIDQuery,
|
||||||
selectMessagesSinceIDScheduled: pgSelectMessagesSinceIDIncludeScheduledQuery,
|
selectMessagesSinceIDScheduled: postgresSelectMessagesSinceIDIncludeScheduledQuery,
|
||||||
selectMessagesLatest: pgSelectMessagesLatestQuery,
|
selectMessagesLatest: postgresSelectMessagesLatestQuery,
|
||||||
selectMessagesDue: pgSelectMessagesDueQuery,
|
selectMessagesDue: postgresSelectMessagesDueQuery,
|
||||||
selectMessagesExpired: pgSelectMessagesExpiredQuery,
|
selectMessagesExpired: postgresSelectMessagesExpiredQuery,
|
||||||
updateMessagePublished: pgUpdateMessagePublishedQuery,
|
updateMessagePublished: postgresUpdateMessagePublishedQuery,
|
||||||
selectMessagesCount: pgSelectMessagesCountQuery,
|
selectMessagesCount: postgresSelectMessagesCountQuery,
|
||||||
selectMessageCountPerTopic: pgSelectMessageCountPerTopicQuery,
|
selectMessageCountPerTopic: postgresSelectMessageCountPerTopicQuery,
|
||||||
selectTopics: pgSelectTopicsQuery,
|
selectTopics: postgresSelectTopicsQuery,
|
||||||
updateAttachmentDeleted: pgUpdateAttachmentDeleted,
|
updateAttachmentDeleted: postgresUpdateAttachmentDeletedQuery,
|
||||||
selectAttachmentsExpired: pgSelectAttachmentsExpiredQuery,
|
selectAttachmentsExpired: postgresSelectAttachmentsExpiredQuery,
|
||||||
selectAttachmentsSizeBySender: pgSelectAttachmentsSizeBySenderQuery,
|
selectAttachmentsSizeBySender: postgresSelectAttachmentsSizeBySenderQuery,
|
||||||
selectAttachmentsSizeByUserID: pgSelectAttachmentsSizeByUserIDQuery,
|
selectAttachmentsSizeByUserID: postgresSelectAttachmentsSizeByUserIDQuery,
|
||||||
selectStats: pgSelectStatsQuery,
|
selectStats: postgresSelectStatsQuery,
|
||||||
updateStats: pgUpdateStatsQuery,
|
updateStats: postgresUpdateStatsQuery,
|
||||||
updateMessageTime: pgUpdateMessageTimesQuery,
|
updateMessageTime: postgresUpdateMessageTimesQuery,
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPostgresStore creates a new PostgreSQL-backed message cache store using an existing database connection pool.
|
// NewPostgresStore creates a new PostgreSQL-backed message cache store using an existing database connection pool.
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
// Initial PostgreSQL schema
|
// Initial PostgreSQL schema
|
||||||
const (
|
const (
|
||||||
pgCreateTablesQuery = `
|
postgresCreateTablesQuery = `
|
||||||
CREATE TABLE IF NOT EXISTS message (
|
CREATE TABLE IF NOT EXISTS message (
|
||||||
id BIGSERIAL PRIMARY KEY,
|
id BIGSERIAL PRIMARY KEY,
|
||||||
mid TEXT NOT NULL,
|
mid TEXT NOT NULL,
|
||||||
@@ -57,14 +57,14 @@ const (
|
|||||||
|
|
||||||
// PostgreSQL schema management queries
|
// PostgreSQL schema management queries
|
||||||
const (
|
const (
|
||||||
pgCurrentSchemaVersion = 14
|
pgCurrentSchemaVersion = 14
|
||||||
pgInsertSchemaVersion = `INSERT INTO schema_version (store, version) VALUES ('message', $1)`
|
postgresInsertSchemaVersionQuery = `INSERT INTO schema_version (store, version) VALUES ('message', $1)`
|
||||||
pgSelectSchemaVersionQuery = `SELECT version FROM schema_version WHERE store = 'message'`
|
postgresSelectSchemaVersionQuery = `SELECT version FROM schema_version WHERE store = 'message'`
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupPostgresDB(db *sql.DB) error {
|
func setupPostgresDB(db *sql.DB) error {
|
||||||
var schemaVersion int
|
var schemaVersion int
|
||||||
err := db.QueryRow(pgSelectSchemaVersionQuery).Scan(&schemaVersion)
|
err := db.QueryRow(postgresSelectSchemaVersionQuery).Scan(&schemaVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return setupNewPostgresDB(db)
|
return setupNewPostgresDB(db)
|
||||||
}
|
}
|
||||||
@@ -80,10 +80,10 @@ func setupNewPostgresDB(db *sql.DB) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer tx.Rollback()
|
defer tx.Rollback()
|
||||||
if _, err := tx.Exec(pgCreateTablesQuery); err != nil {
|
if _, err := tx.Exec(postgresCreateTablesQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(pgInsertSchemaVersion, pgCurrentSchemaVersion); err != nil {
|
if _, err := tx.Exec(postgresInsertSchemaVersionQuery, pgCurrentSchemaVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const (
|
|||||||
sqliteSelectScheduledMessageIDsBySeqIDQuery = `SELECT mid FROM messages WHERE topic = ? AND sequence_id = ? AND published = 0`
|
sqliteSelectScheduledMessageIDsBySeqIDQuery = `SELECT mid FROM messages WHERE topic = ? AND sequence_id = ? AND published = 0`
|
||||||
sqliteDeleteScheduledBySequenceIDQuery = `DELETE FROM messages WHERE topic = ? AND sequence_id = ? AND published = 0`
|
sqliteDeleteScheduledBySequenceIDQuery = `DELETE FROM messages WHERE topic = ? AND sequence_id = ? AND published = 0`
|
||||||
sqliteUpdateMessagesForTopicExpiryQuery = `UPDATE messages SET expires = ? WHERE topic = ?`
|
sqliteUpdateMessagesForTopicExpiryQuery = `UPDATE messages SET expires = ? WHERE topic = ?`
|
||||||
sqliteSelectRowIDFromMessageID = `SELECT id FROM messages WHERE mid = ?`
|
sqliteSelectRowIDFromMessageIDQuery = `SELECT id FROM messages WHERE mid = ?`
|
||||||
sqliteSelectMessagesByIDQuery = `
|
sqliteSelectMessagesByIDQuery = `
|
||||||
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, content_type, encoding
|
SELECT mid, sequence_id, time, event, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, content_type, encoding
|
||||||
FROM messages
|
FROM messages
|
||||||
@@ -69,7 +69,7 @@ const (
|
|||||||
sqliteSelectMessageCountPerTopicQuery = `SELECT topic, COUNT(*) FROM messages GROUP BY topic`
|
sqliteSelectMessageCountPerTopicQuery = `SELECT topic, COUNT(*) FROM messages GROUP BY topic`
|
||||||
sqliteSelectTopicsQuery = `SELECT topic FROM messages GROUP BY topic`
|
sqliteSelectTopicsQuery = `SELECT topic FROM messages GROUP BY topic`
|
||||||
|
|
||||||
sqliteUpdateAttachmentDeleted = `UPDATE messages SET attachment_deleted = 1 WHERE mid = ?`
|
sqliteUpdateAttachmentDeletedQuery = `UPDATE messages SET attachment_deleted = 1 WHERE mid = ?`
|
||||||
sqliteSelectAttachmentsExpiredQuery = `SELECT mid FROM messages WHERE attachment_expires > 0 AND attachment_expires <= ? AND attachment_deleted = 0`
|
sqliteSelectAttachmentsExpiredQuery = `SELECT mid FROM messages WHERE attachment_expires > 0 AND attachment_expires <= ? AND attachment_deleted = 0`
|
||||||
sqliteSelectAttachmentsSizeBySenderQuery = `SELECT IFNULL(SUM(attachment_size), 0) FROM messages WHERE user = '' AND sender = ? AND attachment_expires >= ?`
|
sqliteSelectAttachmentsSizeBySenderQuery = `SELECT IFNULL(SUM(attachment_size), 0) FROM messages WHERE user = '' AND sender = ? AND attachment_expires >= ?`
|
||||||
sqliteSelectAttachmentsSizeByUserIDQuery = `SELECT IFNULL(SUM(attachment_size), 0) FROM messages WHERE user = ? AND attachment_expires >= ?`
|
sqliteSelectAttachmentsSizeByUserIDQuery = `SELECT IFNULL(SUM(attachment_size), 0) FROM messages WHERE user = ? AND attachment_expires >= ?`
|
||||||
@@ -85,7 +85,7 @@ var sqliteQueries = storeQueries{
|
|||||||
selectScheduledMessageIDsBySeqID: sqliteSelectScheduledMessageIDsBySeqIDQuery,
|
selectScheduledMessageIDsBySeqID: sqliteSelectScheduledMessageIDsBySeqIDQuery,
|
||||||
deleteScheduledBySequenceID: sqliteDeleteScheduledBySequenceIDQuery,
|
deleteScheduledBySequenceID: sqliteDeleteScheduledBySequenceIDQuery,
|
||||||
updateMessagesForTopicExpiry: sqliteUpdateMessagesForTopicExpiryQuery,
|
updateMessagesForTopicExpiry: sqliteUpdateMessagesForTopicExpiryQuery,
|
||||||
selectRowIDFromMessageID: sqliteSelectRowIDFromMessageID,
|
selectRowIDFromMessageID: sqliteSelectRowIDFromMessageIDQuery,
|
||||||
selectMessagesByID: sqliteSelectMessagesByIDQuery,
|
selectMessagesByID: sqliteSelectMessagesByIDQuery,
|
||||||
selectMessagesSinceTime: sqliteSelectMessagesSinceTimeQuery,
|
selectMessagesSinceTime: sqliteSelectMessagesSinceTimeQuery,
|
||||||
selectMessagesSinceTimeScheduled: sqliteSelectMessagesSinceTimeIncludeScheduledQuery,
|
selectMessagesSinceTimeScheduled: sqliteSelectMessagesSinceTimeIncludeScheduledQuery,
|
||||||
@@ -98,7 +98,7 @@ var sqliteQueries = storeQueries{
|
|||||||
selectMessagesCount: sqliteSelectMessagesCountQuery,
|
selectMessagesCount: sqliteSelectMessagesCountQuery,
|
||||||
selectMessageCountPerTopic: sqliteSelectMessageCountPerTopicQuery,
|
selectMessageCountPerTopic: sqliteSelectMessageCountPerTopicQuery,
|
||||||
selectTopics: sqliteSelectTopicsQuery,
|
selectTopics: sqliteSelectTopicsQuery,
|
||||||
updateAttachmentDeleted: sqliteUpdateAttachmentDeleted,
|
updateAttachmentDeleted: sqliteUpdateAttachmentDeletedQuery,
|
||||||
selectAttachmentsExpired: sqliteSelectAttachmentsExpiredQuery,
|
selectAttachmentsExpired: sqliteSelectAttachmentsExpiredQuery,
|
||||||
selectAttachmentsSizeBySender: sqliteSelectAttachmentsSizeBySenderQuery,
|
selectAttachmentsSizeBySender: sqliteSelectAttachmentsSizeBySenderQuery,
|
||||||
selectAttachmentsSizeByUserID: sqliteSelectAttachmentsSizeByUserIDQuery,
|
selectAttachmentsSizeByUserID: sqliteSelectAttachmentsSizeByUserIDQuery,
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ const (
|
|||||||
version INT NOT NULL
|
version INT NOT NULL
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
sqliteInsertSchemaVersion = `INSERT INTO schemaVersion VALUES (1, ?)`
|
sqliteInsertSchemaVersionQuery = `INSERT INTO schemaVersion VALUES (1, ?)`
|
||||||
sqliteUpdateSchemaVersion = `UPDATE schemaVersion SET version = ? WHERE id = 1`
|
sqliteUpdateSchemaVersionQuery = `UPDATE schemaVersion SET version = ? WHERE id = 1`
|
||||||
sqliteSelectSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1`
|
sqliteSelectSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1`
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -265,7 +265,7 @@ func setupNewSQLite(db *sql.DB) error {
|
|||||||
if _, err := db.Exec(sqliteCreateSchemaVersionTableQuery); err != nil {
|
if _, err := db.Exec(sqliteCreateSchemaVersionTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteInsertSchemaVersion, sqliteCurrentSchemaVersion); err != nil {
|
if _, err := db.Exec(sqliteInsertSchemaVersionQuery, sqliteCurrentSchemaVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -288,7 +288,7 @@ func sqliteMigrateFrom0(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteCreateSchemaVersionTableQuery); err != nil {
|
if _, err := db.Exec(sqliteCreateSchemaVersionTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteInsertSchemaVersion, 1); err != nil {
|
if _, err := db.Exec(sqliteInsertSchemaVersionQuery, 1); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -299,7 +299,7 @@ func sqliteMigrateFrom1(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteMigrate1To2AlterMessagesTableQuery); err != nil {
|
if _, err := db.Exec(sqliteMigrate1To2AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteUpdateSchemaVersion, 2); err != nil {
|
if _, err := db.Exec(sqliteUpdateSchemaVersionQuery, 2); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -310,7 +310,7 @@ func sqliteMigrateFrom2(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteMigrate2To3AlterMessagesTableQuery); err != nil {
|
if _, err := db.Exec(sqliteMigrate2To3AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteUpdateSchemaVersion, 3); err != nil {
|
if _, err := db.Exec(sqliteUpdateSchemaVersionQuery, 3); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -321,7 +321,7 @@ func sqliteMigrateFrom3(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteMigrate3To4AlterMessagesTableQuery); err != nil {
|
if _, err := db.Exec(sqliteMigrate3To4AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteUpdateSchemaVersion, 4); err != nil {
|
if _, err := db.Exec(sqliteUpdateSchemaVersionQuery, 4); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -332,7 +332,7 @@ func sqliteMigrateFrom4(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteMigrate4To5AlterMessagesTableQuery); err != nil {
|
if _, err := db.Exec(sqliteMigrate4To5AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteUpdateSchemaVersion, 5); err != nil {
|
if _, err := db.Exec(sqliteUpdateSchemaVersionQuery, 5); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -343,7 +343,7 @@ func sqliteMigrateFrom5(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteMigrate5To6AlterMessagesTableQuery); err != nil {
|
if _, err := db.Exec(sqliteMigrate5To6AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteUpdateSchemaVersion, 6); err != nil {
|
if _, err := db.Exec(sqliteUpdateSchemaVersionQuery, 6); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -354,7 +354,7 @@ func sqliteMigrateFrom6(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteMigrate6To7AlterMessagesTableQuery); err != nil {
|
if _, err := db.Exec(sqliteMigrate6To7AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteUpdateSchemaVersion, 7); err != nil {
|
if _, err := db.Exec(sqliteUpdateSchemaVersionQuery, 7); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -365,7 +365,7 @@ func sqliteMigrateFrom7(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteMigrate7To8AlterMessagesTableQuery); err != nil {
|
if _, err := db.Exec(sqliteMigrate7To8AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteUpdateSchemaVersion, 8); err != nil {
|
if _, err := db.Exec(sqliteUpdateSchemaVersionQuery, 8); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -376,7 +376,7 @@ func sqliteMigrateFrom8(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := db.Exec(sqliteMigrate8To9AlterMessagesTableQuery); err != nil {
|
if _, err := db.Exec(sqliteMigrate8To9AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteUpdateSchemaVersion, 9); err != nil {
|
if _, err := db.Exec(sqliteUpdateSchemaVersionQuery, 9); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -395,7 +395,7 @@ func sqliteMigrateFrom9(db *sql.DB, cacheDuration time.Duration) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate9To10UpdateMessageExpiryQuery, int64(cacheDuration.Seconds())); err != nil {
|
if _, err := tx.Exec(sqliteMigrate9To10UpdateMessageExpiryQuery, int64(cacheDuration.Seconds())); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 10); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 10); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
@@ -411,7 +411,7 @@ func sqliteMigrateFrom10(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate10To11AlterMessagesTableQuery); err != nil {
|
if _, err := tx.Exec(sqliteMigrate10To11AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 11); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 11); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
@@ -427,7 +427,7 @@ func sqliteMigrateFrom11(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate11To12AlterMessagesTableQuery); err != nil {
|
if _, err := tx.Exec(sqliteMigrate11To12AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 12); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 12); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
@@ -443,7 +443,7 @@ func sqliteMigrateFrom12(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate12To13AlterMessagesTableQuery); err != nil {
|
if _, err := tx.Exec(sqliteMigrate12To13AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 13); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 13); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
@@ -459,7 +459,7 @@ func sqliteMigrateFrom13(db *sql.DB, _ time.Duration) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate13To14AlterMessagesTableQuery); err != nil {
|
if _, err := tx.Exec(sqliteMigrate13To14AlterMessagesTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 14); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 14); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
|
|||||||
@@ -7,32 +7,32 @@ import (
|
|||||||
// PostgreSQL queries
|
// PostgreSQL queries
|
||||||
const (
|
const (
|
||||||
// User queries
|
// User queries
|
||||||
postgresSelectUserByID = `
|
postgresSelectUserByIDQuery = `
|
||||||
SELECT u.id, u.user_name, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, u.deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
SELECT u.id, u.user_name, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, u.deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
||||||
FROM "user" u
|
FROM "user" u
|
||||||
LEFT JOIN tier t on t.id = u.tier_id
|
LEFT JOIN tier t on t.id = u.tier_id
|
||||||
WHERE u.id = $1
|
WHERE u.id = $1
|
||||||
`
|
`
|
||||||
postgresSelectUserByName = `
|
postgresSelectUserByNameQuery = `
|
||||||
SELECT u.id, u.user_name, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, u.deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
SELECT u.id, u.user_name, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, u.deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
||||||
FROM "user" u
|
FROM "user" u
|
||||||
LEFT JOIN tier t on t.id = u.tier_id
|
LEFT JOIN tier t on t.id = u.tier_id
|
||||||
WHERE user_name = $1
|
WHERE user_name = $1
|
||||||
`
|
`
|
||||||
postgresSelectUserByToken = `
|
postgresSelectUserByTokenQuery = `
|
||||||
SELECT u.id, u.user_name, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, u.deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
SELECT u.id, u.user_name, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, u.deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
||||||
FROM "user" u
|
FROM "user" u
|
||||||
JOIN user_token tk on u.id = tk.user_id
|
JOIN user_token tk on u.id = tk.user_id
|
||||||
LEFT JOIN tier t on t.id = u.tier_id
|
LEFT JOIN tier t on t.id = u.tier_id
|
||||||
WHERE tk.token = $1 AND (tk.expires = 0 OR tk.expires >= $2)
|
WHERE tk.token = $1 AND (tk.expires = 0 OR tk.expires >= $2)
|
||||||
`
|
`
|
||||||
postgresSelectUserByStripeID = `
|
postgresSelectUserByStripeIDQuery = `
|
||||||
SELECT u.id, u.user_name, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, u.deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
SELECT u.id, u.user_name, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, u.deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
||||||
FROM "user" u
|
FROM "user" u
|
||||||
LEFT JOIN tier t on t.id = u.tier_id
|
LEFT JOIN tier t on t.id = u.tier_id
|
||||||
WHERE u.stripe_customer_id = $1
|
WHERE u.stripe_customer_id = $1
|
||||||
`
|
`
|
||||||
postgresSelectUsernames = `
|
postgresSelectUsernamesQuery = `
|
||||||
SELECT user_name
|
SELECT user_name
|
||||||
FROM "user"
|
FROM "user"
|
||||||
ORDER BY
|
ORDER BY
|
||||||
@@ -42,41 +42,41 @@ const (
|
|||||||
ELSE 2
|
ELSE 2
|
||||||
END, user_name
|
END, user_name
|
||||||
`
|
`
|
||||||
postgresSelectUserCount = `SELECT COUNT(*) FROM "user"`
|
postgresSelectUserCountQuery = `SELECT COUNT(*) FROM "user"`
|
||||||
postgresSelectUserIDFromUsername = `SELECT id FROM "user" WHERE user_name = $1`
|
postgresSelectUserIDFromUsernameQuery = `SELECT id FROM "user" WHERE user_name = $1`
|
||||||
postgresInsertUser = `INSERT INTO "user" (id, user_name, pass, role, sync_topic, provisioned, created) VALUES ($1, $2, $3, $4, $5, $6, $7)`
|
postgresInsertUserQuery = `INSERT INTO "user" (id, user_name, pass, role, sync_topic, provisioned, created) VALUES ($1, $2, $3, $4, $5, $6, $7)`
|
||||||
postgresUpdateUserPass = `UPDATE "user" SET pass = $1 WHERE user_name = $2`
|
postgresUpdateUserPassQuery = `UPDATE "user" SET pass = $1 WHERE user_name = $2`
|
||||||
postgresUpdateUserRole = `UPDATE "user" SET role = $1 WHERE user_name = $2`
|
postgresUpdateUserRoleQuery = `UPDATE "user" SET role = $1 WHERE user_name = $2`
|
||||||
postgresUpdateUserProvisioned = `UPDATE "user" SET provisioned = $1 WHERE user_name = $2`
|
postgresUpdateUserProvisionedQuery = `UPDATE "user" SET provisioned = $1 WHERE user_name = $2`
|
||||||
postgresUpdateUserPrefs = `UPDATE "user" SET prefs = $1 WHERE id = $2`
|
postgresUpdateUserPrefsQuery = `UPDATE "user" SET prefs = $1 WHERE id = $2`
|
||||||
postgresUpdateUserStats = `UPDATE "user" SET stats_messages = $1, stats_emails = $2, stats_calls = $3 WHERE id = $4`
|
postgresUpdateUserStatsQuery = `UPDATE "user" SET stats_messages = $1, stats_emails = $2, stats_calls = $3 WHERE id = $4`
|
||||||
postgresUpdateUserStatsResetAll = `UPDATE "user" SET stats_messages = 0, stats_emails = 0, stats_calls = 0`
|
postgresUpdateUserStatsResetAllQuery = `UPDATE "user" SET stats_messages = 0, stats_emails = 0, stats_calls = 0`
|
||||||
postgresUpdateUserTier = `UPDATE "user" SET tier_id = (SELECT id FROM tier WHERE code = $1) WHERE user_name = $2`
|
postgresUpdateUserTierQuery = `UPDATE "user" SET tier_id = (SELECT id FROM tier WHERE code = $1) WHERE user_name = $2`
|
||||||
postgresUpdateUserDeleted = `UPDATE "user" SET deleted = $1 WHERE id = $2`
|
postgresUpdateUserDeletedQuery = `UPDATE "user" SET deleted = $1 WHERE id = $2`
|
||||||
postgresDeleteUser = `DELETE FROM "user" WHERE user_name = $1`
|
postgresDeleteUserQuery = `DELETE FROM "user" WHERE user_name = $1`
|
||||||
postgresDeleteUserTier = `UPDATE "user" SET tier_id = null WHERE user_name = $1`
|
postgresDeleteUserTierQuery = `UPDATE "user" SET tier_id = null WHERE user_name = $1`
|
||||||
postgresDeleteUsersMarked = `DELETE FROM "user" WHERE deleted < $1`
|
postgresDeleteUsersMarkedQuery = `DELETE FROM "user" WHERE deleted < $1`
|
||||||
|
|
||||||
// Access queries
|
// Access queries
|
||||||
postgresSelectTopicPerms = `
|
postgresSelectTopicPermsQuery = `
|
||||||
SELECT read, write
|
SELECT read, write
|
||||||
FROM user_access a
|
FROM user_access a
|
||||||
JOIN "user" u ON u.id = a.user_id
|
JOIN "user" u ON u.id = a.user_id
|
||||||
WHERE (u.user_name = $1 OR u.user_name = $2) AND $3 LIKE a.topic ESCAPE '\'
|
WHERE (u.user_name = $1 OR u.user_name = $2) AND $3 LIKE a.topic ESCAPE '\'
|
||||||
ORDER BY u.user_name DESC, LENGTH(a.topic) DESC, CASE WHEN a.write THEN 1 ELSE 0 END DESC
|
ORDER BY u.user_name DESC, LENGTH(a.topic) DESC, CASE WHEN a.write THEN 1 ELSE 0 END DESC
|
||||||
`
|
`
|
||||||
postgresSelectUserAllAccess = `
|
postgresSelectUserAllAccessQuery = `
|
||||||
SELECT user_id, topic, read, write, provisioned
|
SELECT user_id, topic, read, write, provisioned
|
||||||
FROM user_access
|
FROM user_access
|
||||||
ORDER BY LENGTH(topic) DESC, CASE WHEN write THEN 1 ELSE 0 END DESC, CASE WHEN read THEN 1 ELSE 0 END DESC, topic
|
ORDER BY LENGTH(topic) DESC, CASE WHEN write THEN 1 ELSE 0 END DESC, CASE WHEN read THEN 1 ELSE 0 END DESC, topic
|
||||||
`
|
`
|
||||||
postgresSelectUserAccess = `
|
postgresSelectUserAccessQuery = `
|
||||||
SELECT topic, read, write, provisioned
|
SELECT topic, read, write, provisioned
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
WHERE user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
||||||
ORDER BY LENGTH(topic) DESC, CASE WHEN write THEN 1 ELSE 0 END DESC, CASE WHEN read THEN 1 ELSE 0 END DESC, topic
|
ORDER BY LENGTH(topic) DESC, CASE WHEN write THEN 1 ELSE 0 END DESC, CASE WHEN read THEN 1 ELSE 0 END DESC, topic
|
||||||
`
|
`
|
||||||
postgresSelectUserReservations = `
|
postgresSelectUserReservationsQuery = `
|
||||||
SELECT a_user.topic, a_user.read, a_user.write, a_everyone.read AS everyone_read, a_everyone.write AS everyone_write
|
SELECT a_user.topic, a_user.read, a_user.write, a_everyone.read AS everyone_read, a_everyone.write AS everyone_write
|
||||||
FROM user_access a_user
|
FROM user_access a_user
|
||||||
LEFT JOIN user_access a_everyone ON a_user.topic = a_everyone.topic AND a_everyone.user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
LEFT JOIN user_access a_everyone ON a_user.topic = a_everyone.topic AND a_everyone.user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
||||||
@@ -84,32 +84,32 @@ const (
|
|||||||
AND a_user.owner_user_id = (SELECT id FROM "user" WHERE user_name = $2)
|
AND a_user.owner_user_id = (SELECT id FROM "user" WHERE user_name = $2)
|
||||||
ORDER BY a_user.topic
|
ORDER BY a_user.topic
|
||||||
`
|
`
|
||||||
postgresSelectUserReservationsCount = `
|
postgresSelectUserReservationsCountQuery = `
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE user_id = owner_user_id
|
WHERE user_id = owner_user_id
|
||||||
AND owner_user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
AND owner_user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
||||||
`
|
`
|
||||||
postgresSelectUserReservationsOwner = `
|
postgresSelectUserReservationsOwnerQuery = `
|
||||||
SELECT owner_user_id
|
SELECT owner_user_id
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE topic = $1
|
WHERE topic = $1
|
||||||
AND user_id = owner_user_id
|
AND user_id = owner_user_id
|
||||||
`
|
`
|
||||||
postgresSelectUserHasReservation = `
|
postgresSelectUserHasReservationQuery = `
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE user_id = owner_user_id
|
WHERE user_id = owner_user_id
|
||||||
AND owner_user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
AND owner_user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
||||||
AND topic = $2
|
AND topic = $2
|
||||||
`
|
`
|
||||||
postgresSelectOtherAccessCount = `
|
postgresSelectOtherAccessCountQuery = `
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE (topic = $1 OR $2 LIKE topic ESCAPE '\')
|
WHERE (topic = $1 OR $2 LIKE topic ESCAPE '\')
|
||||||
AND (owner_user_id IS NULL OR owner_user_id != (SELECT id FROM "user" WHERE user_name = $3))
|
AND (owner_user_id IS NULL OR owner_user_id != (SELECT id FROM "user" WHERE user_name = $3))
|
||||||
`
|
`
|
||||||
postgresUpsertUserAccess = `
|
postgresUpsertUserAccessQuery = `
|
||||||
INSERT INTO user_access (user_id, topic, read, write, owner_user_id, provisioned)
|
INSERT INTO user_access (user_id, topic, read, write, owner_user_id, provisioned)
|
||||||
VALUES (
|
VALUES (
|
||||||
(SELECT id FROM "user" WHERE user_name = $1),
|
(SELECT id FROM "user" WHERE user_name = $1),
|
||||||
@@ -122,38 +122,38 @@ const (
|
|||||||
ON CONFLICT (user_id, topic)
|
ON CONFLICT (user_id, topic)
|
||||||
DO UPDATE SET read=EXCLUDED.read, write=EXCLUDED.write, owner_user_id=EXCLUDED.owner_user_id, provisioned=EXCLUDED.provisioned
|
DO UPDATE SET read=EXCLUDED.read, write=EXCLUDED.write, owner_user_id=EXCLUDED.owner_user_id, provisioned=EXCLUDED.provisioned
|
||||||
`
|
`
|
||||||
postgresDeleteUserAccess = `
|
postgresDeleteUserAccessQuery = `
|
||||||
DELETE FROM user_access
|
DELETE FROM user_access
|
||||||
WHERE user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
WHERE user_id = (SELECT id FROM "user" WHERE user_name = $1)
|
||||||
OR owner_user_id = (SELECT id FROM "user" WHERE user_name = $2)
|
OR owner_user_id = (SELECT id FROM "user" WHERE user_name = $2)
|
||||||
`
|
`
|
||||||
postgresDeleteUserAccessProvisioned = `DELETE FROM user_access WHERE provisioned = true`
|
postgresDeleteUserAccessProvisionedQuery = `DELETE FROM user_access WHERE provisioned = true`
|
||||||
postgresDeleteTopicAccess = `
|
postgresDeleteTopicAccessQuery = `
|
||||||
DELETE FROM user_access
|
DELETE FROM user_access
|
||||||
WHERE (user_id = (SELECT id FROM "user" WHERE user_name = $1) OR owner_user_id = (SELECT id FROM "user" WHERE user_name = $2))
|
WHERE (user_id = (SELECT id FROM "user" WHERE user_name = $1) OR owner_user_id = (SELECT id FROM "user" WHERE user_name = $2))
|
||||||
AND topic = $3
|
AND topic = $3
|
||||||
`
|
`
|
||||||
postgresDeleteAllAccess = `DELETE FROM user_access`
|
postgresDeleteAllAccessQuery = `DELETE FROM user_access`
|
||||||
|
|
||||||
// Token queries
|
// Token queries
|
||||||
postgresSelectToken = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE user_id = $1 AND token = $2`
|
postgresSelectTokenQuery = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE user_id = $1 AND token = $2`
|
||||||
postgresSelectTokens = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE user_id = $1`
|
postgresSelectTokensQuery = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE user_id = $1`
|
||||||
postgresSelectTokenCount = `SELECT COUNT(*) FROM user_token WHERE user_id = $1`
|
postgresSelectTokenCountQuery = `SELECT COUNT(*) FROM user_token WHERE user_id = $1`
|
||||||
postgresSelectAllProvisionedTokens = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE provisioned = true`
|
postgresSelectAllProvisionedTokensQuery = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE provisioned = true`
|
||||||
postgresUpsertToken = `
|
postgresUpsertTokenQuery = `
|
||||||
INSERT INTO user_token (user_id, token, label, last_access, last_origin, expires, provisioned)
|
INSERT INTO user_token (user_id, token, label, last_access, last_origin, expires, provisioned)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||||
ON CONFLICT (user_id, token)
|
ON CONFLICT (user_id, token)
|
||||||
DO UPDATE SET label = EXCLUDED.label, expires = EXCLUDED.expires, provisioned = EXCLUDED.provisioned
|
DO UPDATE SET label = EXCLUDED.label, expires = EXCLUDED.expires, provisioned = EXCLUDED.provisioned
|
||||||
`
|
`
|
||||||
postgresUpdateTokenLabel = `UPDATE user_token SET label = $1 WHERE user_id = $2 AND token = $3`
|
postgresUpdateTokenLabelQuery = `UPDATE user_token SET label = $1 WHERE user_id = $2 AND token = $3`
|
||||||
postgresUpdateTokenExpiry = `UPDATE user_token SET expires = $1 WHERE user_id = $2 AND token = $3`
|
postgresUpdateTokenExpiryQuery = `UPDATE user_token SET expires = $1 WHERE user_id = $2 AND token = $3`
|
||||||
postgresUpdateTokenLastAccess = `UPDATE user_token SET last_access = $1, last_origin = $2 WHERE token = $3`
|
postgresUpdateTokenLastAccessQuery = `UPDATE user_token SET last_access = $1, last_origin = $2 WHERE token = $3`
|
||||||
postgresDeleteToken = `DELETE FROM user_token WHERE user_id = $1 AND token = $2`
|
postgresDeleteTokenQuery = `DELETE FROM user_token WHERE user_id = $1 AND token = $2`
|
||||||
postgresDeleteProvisionedToken = `DELETE FROM user_token WHERE token = $1`
|
postgresDeleteProvisionedTokenQuery = `DELETE FROM user_token WHERE token = $1`
|
||||||
postgresDeleteAllToken = `DELETE FROM user_token WHERE user_id = $1`
|
postgresDeleteAllTokenQuery = `DELETE FROM user_token WHERE user_id = $1`
|
||||||
postgresDeleteExpiredTokens = `DELETE FROM user_token WHERE expires > 0 AND expires < $1`
|
postgresDeleteExpiredTokensQuery = `DELETE FROM user_token WHERE expires > 0 AND expires < $1`
|
||||||
postgresDeleteExcessTokens = `
|
postgresDeleteExcessTokensQuery = `
|
||||||
DELETE FROM user_token
|
DELETE FROM user_token
|
||||||
WHERE user_id = $1
|
WHERE user_id = $1
|
||||||
AND (user_id, token) NOT IN (
|
AND (user_id, token) NOT IN (
|
||||||
@@ -166,38 +166,38 @@ const (
|
|||||||
`
|
`
|
||||||
|
|
||||||
// Tier queries
|
// Tier queries
|
||||||
postgresInsertTier = `
|
postgresInsertTierQuery = `
|
||||||
INSERT INTO tier (id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id)
|
INSERT INTO tier (id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)
|
||||||
`
|
`
|
||||||
postgresUpdateTier = `
|
postgresUpdateTierQuery = `
|
||||||
UPDATE tier
|
UPDATE tier
|
||||||
SET name = $1, messages_limit = $2, messages_expiry_duration = $3, emails_limit = $4, calls_limit = $5, reservations_limit = $6, attachment_file_size_limit = $7, attachment_total_size_limit = $8, attachment_expiry_duration = $9, attachment_bandwidth_limit = $10, stripe_monthly_price_id = $11, stripe_yearly_price_id = $12
|
SET name = $1, messages_limit = $2, messages_expiry_duration = $3, emails_limit = $4, calls_limit = $5, reservations_limit = $6, attachment_file_size_limit = $7, attachment_total_size_limit = $8, attachment_expiry_duration = $9, attachment_bandwidth_limit = $10, stripe_monthly_price_id = $11, stripe_yearly_price_id = $12
|
||||||
WHERE code = $13
|
WHERE code = $13
|
||||||
`
|
`
|
||||||
postgresSelectTiers = `
|
postgresSelectTiersQuery = `
|
||||||
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
||||||
FROM tier
|
FROM tier
|
||||||
`
|
`
|
||||||
postgresSelectTierByCode = `
|
postgresSelectTierByCodeQuery = `
|
||||||
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
||||||
FROM tier
|
FROM tier
|
||||||
WHERE code = $1
|
WHERE code = $1
|
||||||
`
|
`
|
||||||
postgresSelectTierByPriceID = `
|
postgresSelectTierByPriceIDQuery = `
|
||||||
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
||||||
FROM tier
|
FROM tier
|
||||||
WHERE (stripe_monthly_price_id = $1 OR stripe_yearly_price_id = $2)
|
WHERE (stripe_monthly_price_id = $1 OR stripe_yearly_price_id = $2)
|
||||||
`
|
`
|
||||||
postgresDeleteTier = `DELETE FROM tier WHERE code = $1`
|
postgresDeleteTierQuery = `DELETE FROM tier WHERE code = $1`
|
||||||
|
|
||||||
// Phone queries
|
// Phone queries
|
||||||
postgresSelectPhoneNumbers = `SELECT phone_number FROM user_phone WHERE user_id = $1`
|
postgresSelectPhoneNumbersQuery = `SELECT phone_number FROM user_phone WHERE user_id = $1`
|
||||||
postgresInsertPhoneNumber = `INSERT INTO user_phone (user_id, phone_number) VALUES ($1, $2)`
|
postgresInsertPhoneNumberQuery = `INSERT INTO user_phone (user_id, phone_number) VALUES ($1, $2)`
|
||||||
postgresDeletePhoneNumber = `DELETE FROM user_phone WHERE user_id = $1 AND phone_number = $2`
|
postgresDeletePhoneNumberQuery = `DELETE FROM user_phone WHERE user_id = $1 AND phone_number = $2`
|
||||||
|
|
||||||
// Billing queries
|
// Billing queries
|
||||||
postgresUpdateBilling = `
|
postgresUpdateBillingQuery = `
|
||||||
UPDATE "user"
|
UPDATE "user"
|
||||||
SET stripe_customer_id = $1, stripe_subscription_id = $2, stripe_subscription_status = $3, stripe_subscription_interval = $4, stripe_subscription_paid_until = $5, stripe_subscription_cancel_at = $6
|
SET stripe_customer_id = $1, stripe_subscription_id = $2, stripe_subscription_status = $3, stripe_subscription_interval = $4, stripe_subscription_paid_until = $5, stripe_subscription_cancel_at = $6
|
||||||
WHERE user_name = $7
|
WHERE user_name = $7
|
||||||
@@ -213,71 +213,71 @@ func NewPostgresStore(db *sql.DB) (Store, error) {
|
|||||||
db: db,
|
db: db,
|
||||||
queries: storeQueries{
|
queries: storeQueries{
|
||||||
// User queries
|
// User queries
|
||||||
selectUserByID: postgresSelectUserByID,
|
selectUserByID: postgresSelectUserByIDQuery,
|
||||||
selectUserByName: postgresSelectUserByName,
|
selectUserByName: postgresSelectUserByNameQuery,
|
||||||
selectUserByToken: postgresSelectUserByToken,
|
selectUserByToken: postgresSelectUserByTokenQuery,
|
||||||
selectUserByStripeID: postgresSelectUserByStripeID,
|
selectUserByStripeID: postgresSelectUserByStripeIDQuery,
|
||||||
selectUsernames: postgresSelectUsernames,
|
selectUsernames: postgresSelectUsernamesQuery,
|
||||||
selectUserCount: postgresSelectUserCount,
|
selectUserCount: postgresSelectUserCountQuery,
|
||||||
selectUserIDFromUsername: postgresSelectUserIDFromUsername,
|
selectUserIDFromUsername: postgresSelectUserIDFromUsernameQuery,
|
||||||
insertUser: postgresInsertUser,
|
insertUser: postgresInsertUserQuery,
|
||||||
updateUserPass: postgresUpdateUserPass,
|
updateUserPass: postgresUpdateUserPassQuery,
|
||||||
updateUserRole: postgresUpdateUserRole,
|
updateUserRole: postgresUpdateUserRoleQuery,
|
||||||
updateUserProvisioned: postgresUpdateUserProvisioned,
|
updateUserProvisioned: postgresUpdateUserProvisionedQuery,
|
||||||
updateUserPrefs: postgresUpdateUserPrefs,
|
updateUserPrefs: postgresUpdateUserPrefsQuery,
|
||||||
updateUserStats: postgresUpdateUserStats,
|
updateUserStats: postgresUpdateUserStatsQuery,
|
||||||
updateUserStatsResetAll: postgresUpdateUserStatsResetAll,
|
updateUserStatsResetAll: postgresUpdateUserStatsResetAllQuery,
|
||||||
updateUserTier: postgresUpdateUserTier,
|
updateUserTier: postgresUpdateUserTierQuery,
|
||||||
updateUserDeleted: postgresUpdateUserDeleted,
|
updateUserDeleted: postgresUpdateUserDeletedQuery,
|
||||||
deleteUser: postgresDeleteUser,
|
deleteUser: postgresDeleteUserQuery,
|
||||||
deleteUserTier: postgresDeleteUserTier,
|
deleteUserTier: postgresDeleteUserTierQuery,
|
||||||
deleteUsersMarked: postgresDeleteUsersMarked,
|
deleteUsersMarked: postgresDeleteUsersMarkedQuery,
|
||||||
|
|
||||||
// Access queries
|
// Access queries
|
||||||
selectTopicPerms: postgresSelectTopicPerms,
|
selectTopicPerms: postgresSelectTopicPermsQuery,
|
||||||
selectUserAllAccess: postgresSelectUserAllAccess,
|
selectUserAllAccess: postgresSelectUserAllAccessQuery,
|
||||||
selectUserAccess: postgresSelectUserAccess,
|
selectUserAccess: postgresSelectUserAccessQuery,
|
||||||
selectUserReservations: postgresSelectUserReservations,
|
selectUserReservations: postgresSelectUserReservationsQuery,
|
||||||
selectUserReservationsCount: postgresSelectUserReservationsCount,
|
selectUserReservationsCount: postgresSelectUserReservationsCountQuery,
|
||||||
selectUserReservationsOwner: postgresSelectUserReservationsOwner,
|
selectUserReservationsOwner: postgresSelectUserReservationsOwnerQuery,
|
||||||
selectUserHasReservation: postgresSelectUserHasReservation,
|
selectUserHasReservation: postgresSelectUserHasReservationQuery,
|
||||||
selectOtherAccessCount: postgresSelectOtherAccessCount,
|
selectOtherAccessCount: postgresSelectOtherAccessCountQuery,
|
||||||
upsertUserAccess: postgresUpsertUserAccess,
|
upsertUserAccess: postgresUpsertUserAccessQuery,
|
||||||
deleteUserAccess: postgresDeleteUserAccess,
|
deleteUserAccess: postgresDeleteUserAccessQuery,
|
||||||
deleteUserAccessProvisioned: postgresDeleteUserAccessProvisioned,
|
deleteUserAccessProvisioned: postgresDeleteUserAccessProvisionedQuery,
|
||||||
deleteTopicAccess: postgresDeleteTopicAccess,
|
deleteTopicAccess: postgresDeleteTopicAccessQuery,
|
||||||
deleteAllAccess: postgresDeleteAllAccess,
|
deleteAllAccess: postgresDeleteAllAccessQuery,
|
||||||
|
|
||||||
// Token queries
|
// Token queries
|
||||||
selectToken: postgresSelectToken,
|
selectToken: postgresSelectTokenQuery,
|
||||||
selectTokens: postgresSelectTokens,
|
selectTokens: postgresSelectTokensQuery,
|
||||||
selectTokenCount: postgresSelectTokenCount,
|
selectTokenCount: postgresSelectTokenCountQuery,
|
||||||
selectAllProvisionedTokens: postgresSelectAllProvisionedTokens,
|
selectAllProvisionedTokens: postgresSelectAllProvisionedTokensQuery,
|
||||||
upsertToken: postgresUpsertToken,
|
upsertToken: postgresUpsertTokenQuery,
|
||||||
updateTokenLabel: postgresUpdateTokenLabel,
|
updateTokenLabel: postgresUpdateTokenLabelQuery,
|
||||||
updateTokenExpiry: postgresUpdateTokenExpiry,
|
updateTokenExpiry: postgresUpdateTokenExpiryQuery,
|
||||||
updateTokenLastAccess: postgresUpdateTokenLastAccess,
|
updateTokenLastAccess: postgresUpdateTokenLastAccessQuery,
|
||||||
deleteToken: postgresDeleteToken,
|
deleteToken: postgresDeleteTokenQuery,
|
||||||
deleteProvisionedToken: postgresDeleteProvisionedToken,
|
deleteProvisionedToken: postgresDeleteProvisionedTokenQuery,
|
||||||
deleteAllToken: postgresDeleteAllToken,
|
deleteAllToken: postgresDeleteAllTokenQuery,
|
||||||
deleteExpiredTokens: postgresDeleteExpiredTokens,
|
deleteExpiredTokens: postgresDeleteExpiredTokensQuery,
|
||||||
deleteExcessTokens: postgresDeleteExcessTokens,
|
deleteExcessTokens: postgresDeleteExcessTokensQuery,
|
||||||
|
|
||||||
// Tier queries
|
// Tier queries
|
||||||
insertTier: postgresInsertTier,
|
insertTier: postgresInsertTierQuery,
|
||||||
selectTiers: postgresSelectTiers,
|
selectTiers: postgresSelectTiersQuery,
|
||||||
selectTierByCode: postgresSelectTierByCode,
|
selectTierByCode: postgresSelectTierByCodeQuery,
|
||||||
selectTierByPriceID: postgresSelectTierByPriceID,
|
selectTierByPriceID: postgresSelectTierByPriceIDQuery,
|
||||||
updateTier: postgresUpdateTier,
|
updateTier: postgresUpdateTierQuery,
|
||||||
deleteTier: postgresDeleteTier,
|
deleteTier: postgresDeleteTierQuery,
|
||||||
|
|
||||||
// Phone queries
|
// Phone queries
|
||||||
selectPhoneNumbers: postgresSelectPhoneNumbers,
|
selectPhoneNumbers: postgresSelectPhoneNumbersQuery,
|
||||||
insertPhoneNumber: postgresInsertPhoneNumber,
|
insertPhoneNumber: postgresInsertPhoneNumberQuery,
|
||||||
deletePhoneNumber: postgresDeletePhoneNumber,
|
deletePhoneNumber: postgresDeletePhoneNumberQuery,
|
||||||
|
|
||||||
// Billing queries
|
// Billing queries
|
||||||
updateBilling: postgresUpdateBilling,
|
updateBilling: postgresUpdateBillingQuery,
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,14 +84,14 @@ const (
|
|||||||
|
|
||||||
// Schema table management queries for Postgres
|
// Schema table management queries for Postgres
|
||||||
const (
|
const (
|
||||||
postgresCurrentSchemaVersion = 6
|
postgresCurrentSchemaVersion = 6
|
||||||
postgresSelectSchemaVersion = `SELECT version FROM schema_version WHERE store = 'user'`
|
postgresSelectSchemaVersionQuery = `SELECT version FROM schema_version WHERE store = 'user'`
|
||||||
postgresInsertSchemaVersion = `INSERT INTO schema_version (store, version) VALUES ('user', $1)`
|
postgresInsertSchemaVersionQuery = `INSERT INTO schema_version (store, version) VALUES ('user', $1)`
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupPostgres(db *sql.DB) error {
|
func setupPostgres(db *sql.DB) error {
|
||||||
var schemaVersion int
|
var schemaVersion int
|
||||||
err := db.QueryRow(postgresSelectSchemaVersion).Scan(&schemaVersion)
|
err := db.QueryRow(postgresSelectSchemaVersionQuery).Scan(&schemaVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return setupNewPostgres(db)
|
return setupNewPostgres(db)
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ func setupNewPostgres(db *sql.DB) error {
|
|||||||
if _, err := db.Exec(postgresCreateTablesQueries); err != nil {
|
if _, err := db.Exec(postgresCreateTablesQueries); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(postgresInsertSchemaVersion, postgresCurrentSchemaVersion); err != nil {
|
if _, err := db.Exec(postgresInsertSchemaVersionQuery, postgresCurrentSchemaVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -8,32 +8,32 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
// User queries
|
// User queries
|
||||||
sqliteSelectUserByID = `
|
sqliteSelectUserByIDQuery = `
|
||||||
SELECT u.id, u.user, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
SELECT u.id, u.user, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
||||||
FROM user u
|
FROM user u
|
||||||
LEFT JOIN tier t on t.id = u.tier_id
|
LEFT JOIN tier t on t.id = u.tier_id
|
||||||
WHERE u.id = ?
|
WHERE u.id = ?
|
||||||
`
|
`
|
||||||
sqliteSelectUserByName = `
|
sqliteSelectUserByNameQuery = `
|
||||||
SELECT u.id, u.user, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
SELECT u.id, u.user, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
||||||
FROM user u
|
FROM user u
|
||||||
LEFT JOIN tier t on t.id = u.tier_id
|
LEFT JOIN tier t on t.id = u.tier_id
|
||||||
WHERE user = ?
|
WHERE user = ?
|
||||||
`
|
`
|
||||||
sqliteSelectUserByToken = `
|
sqliteSelectUserByTokenQuery = `
|
||||||
SELECT u.id, u.user, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
SELECT u.id, u.user, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
||||||
FROM user u
|
FROM user u
|
||||||
JOIN user_token tk on u.id = tk.user_id
|
JOIN user_token tk on u.id = tk.user_id
|
||||||
LEFT JOIN tier t on t.id = u.tier_id
|
LEFT JOIN tier t on t.id = u.tier_id
|
||||||
WHERE tk.token = ? AND (tk.expires = 0 OR tk.expires >= ?)
|
WHERE tk.token = ? AND (tk.expires = 0 OR tk.expires >= ?)
|
||||||
`
|
`
|
||||||
sqliteSelectUserByStripeID = `
|
sqliteSelectUserByStripeIDQuery = `
|
||||||
SELECT u.id, u.user, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
SELECT u.id, u.user, u.pass, u.role, u.prefs, u.sync_topic, u.provisioned, u.stats_messages, u.stats_emails, u.stats_calls, u.stripe_customer_id, u.stripe_subscription_id, u.stripe_subscription_status, u.stripe_subscription_interval, u.stripe_subscription_paid_until, u.stripe_subscription_cancel_at, deleted, t.id, t.code, t.name, t.messages_limit, t.messages_expiry_duration, t.emails_limit, t.calls_limit, t.reservations_limit, t.attachment_file_size_limit, t.attachment_total_size_limit, t.attachment_expiry_duration, t.attachment_bandwidth_limit, t.stripe_monthly_price_id, t.stripe_yearly_price_id
|
||||||
FROM user u
|
FROM user u
|
||||||
LEFT JOIN tier t on t.id = u.tier_id
|
LEFT JOIN tier t on t.id = u.tier_id
|
||||||
WHERE u.stripe_customer_id = ?
|
WHERE u.stripe_customer_id = ?
|
||||||
`
|
`
|
||||||
sqliteSelectUsernames = `
|
sqliteSelectUsernamesQuery = `
|
||||||
SELECT user
|
SELECT user
|
||||||
FROM user
|
FROM user
|
||||||
ORDER BY
|
ORDER BY
|
||||||
@@ -43,41 +43,41 @@ const (
|
|||||||
ELSE 2
|
ELSE 2
|
||||||
END, user
|
END, user
|
||||||
`
|
`
|
||||||
sqliteSelectUserCount = `SELECT COUNT(*) FROM user`
|
sqliteSelectUserCountQuery = `SELECT COUNT(*) FROM user`
|
||||||
sqliteSelectUserIDFromUsername = `SELECT id FROM user WHERE user = ?`
|
sqliteSelectUserIDFromUsernameQuery = `SELECT id FROM user WHERE user = ?`
|
||||||
sqliteInsertUser = `INSERT INTO user (id, user, pass, role, sync_topic, provisioned, created) VALUES (?, ?, ?, ?, ?, ?, ?)`
|
sqliteInsertUserQuery = `INSERT INTO user (id, user, pass, role, sync_topic, provisioned, created) VALUES (?, ?, ?, ?, ?, ?, ?)`
|
||||||
sqliteUpdateUserPass = `UPDATE user SET pass = ? WHERE user = ?`
|
sqliteUpdateUserPassQuery = `UPDATE user SET pass = ? WHERE user = ?`
|
||||||
sqliteUpdateUserRole = `UPDATE user SET role = ? WHERE user = ?`
|
sqliteUpdateUserRoleQuery = `UPDATE user SET role = ? WHERE user = ?`
|
||||||
sqliteUpdateUserProvisioned = `UPDATE user SET provisioned = ? WHERE user = ?`
|
sqliteUpdateUserProvisionedQuery = `UPDATE user SET provisioned = ? WHERE user = ?`
|
||||||
sqliteUpdateUserPrefs = `UPDATE user SET prefs = ? WHERE id = ?`
|
sqliteUpdateUserPrefsQuery = `UPDATE user SET prefs = ? WHERE id = ?`
|
||||||
sqliteUpdateUserStats = `UPDATE user SET stats_messages = ?, stats_emails = ?, stats_calls = ? WHERE id = ?`
|
sqliteUpdateUserStatsQuery = `UPDATE user SET stats_messages = ?, stats_emails = ?, stats_calls = ? WHERE id = ?`
|
||||||
sqliteUpdateUserStatsResetAll = `UPDATE user SET stats_messages = 0, stats_emails = 0, stats_calls = 0`
|
sqliteUpdateUserStatsResetAllQuery = `UPDATE user SET stats_messages = 0, stats_emails = 0, stats_calls = 0`
|
||||||
sqliteUpdateUserTier = `UPDATE user SET tier_id = (SELECT id FROM tier WHERE code = ?) WHERE user = ?`
|
sqliteUpdateUserTierQuery = `UPDATE user SET tier_id = (SELECT id FROM tier WHERE code = ?) WHERE user = ?`
|
||||||
sqliteUpdateUserDeleted = `UPDATE user SET deleted = ? WHERE id = ?`
|
sqliteUpdateUserDeletedQuery = `UPDATE user SET deleted = ? WHERE id = ?`
|
||||||
sqliteDeleteUser = `DELETE FROM user WHERE user = ?`
|
sqliteDeleteUserQuery = `DELETE FROM user WHERE user = ?`
|
||||||
sqliteDeleteUserTier = `UPDATE user SET tier_id = null WHERE user = ?`
|
sqliteDeleteUserTierQuery = `UPDATE user SET tier_id = null WHERE user = ?`
|
||||||
sqliteDeleteUsersMarked = `DELETE FROM user WHERE deleted < ?`
|
sqliteDeleteUsersMarkedQuery = `DELETE FROM user WHERE deleted < ?`
|
||||||
|
|
||||||
// Access queries
|
// Access queries
|
||||||
sqliteSelectTopicPerms = `
|
sqliteSelectTopicPermsQuery = `
|
||||||
SELECT read, write
|
SELECT read, write
|
||||||
FROM user_access a
|
FROM user_access a
|
||||||
JOIN user u ON u.id = a.user_id
|
JOIN user u ON u.id = a.user_id
|
||||||
WHERE (u.user = ? OR u.user = ?) AND ? LIKE a.topic ESCAPE '\'
|
WHERE (u.user = ? OR u.user = ?) AND ? LIKE a.topic ESCAPE '\'
|
||||||
ORDER BY u.user DESC, LENGTH(a.topic) DESC, a.write DESC
|
ORDER BY u.user DESC, LENGTH(a.topic) DESC, a.write DESC
|
||||||
`
|
`
|
||||||
sqliteSelectUserAllAccess = `
|
sqliteSelectUserAllAccessQuery = `
|
||||||
SELECT user_id, topic, read, write, provisioned
|
SELECT user_id, topic, read, write, provisioned
|
||||||
FROM user_access
|
FROM user_access
|
||||||
ORDER BY LENGTH(topic) DESC, write DESC, read DESC, topic
|
ORDER BY LENGTH(topic) DESC, write DESC, read DESC, topic
|
||||||
`
|
`
|
||||||
sqliteSelectUserAccess = `
|
sqliteSelectUserAccessQuery = `
|
||||||
SELECT topic, read, write, provisioned
|
SELECT topic, read, write, provisioned
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE user_id = (SELECT id FROM user WHERE user = ?)
|
WHERE user_id = (SELECT id FROM user WHERE user = ?)
|
||||||
ORDER BY LENGTH(topic) DESC, write DESC, read DESC, topic
|
ORDER BY LENGTH(topic) DESC, write DESC, read DESC, topic
|
||||||
`
|
`
|
||||||
sqliteSelectUserReservations = `
|
sqliteSelectUserReservationsQuery = `
|
||||||
SELECT a_user.topic, a_user.read, a_user.write, a_everyone.read AS everyone_read, a_everyone.write AS everyone_write
|
SELECT a_user.topic, a_user.read, a_user.write, a_everyone.read AS everyone_read, a_everyone.write AS everyone_write
|
||||||
FROM user_access a_user
|
FROM user_access a_user
|
||||||
LEFT JOIN user_access a_everyone ON a_user.topic = a_everyone.topic AND a_everyone.user_id = (SELECT id FROM user WHERE user = ?)
|
LEFT JOIN user_access a_everyone ON a_user.topic = a_everyone.topic AND a_everyone.user_id = (SELECT id FROM user WHERE user = ?)
|
||||||
@@ -85,69 +85,69 @@ const (
|
|||||||
AND a_user.owner_user_id = (SELECT id FROM user WHERE user = ?)
|
AND a_user.owner_user_id = (SELECT id FROM user WHERE user = ?)
|
||||||
ORDER BY a_user.topic
|
ORDER BY a_user.topic
|
||||||
`
|
`
|
||||||
sqliteSelectUserReservationsCount = `
|
sqliteSelectUserReservationsCountQuery = `
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE user_id = owner_user_id
|
WHERE user_id = owner_user_id
|
||||||
AND owner_user_id = (SELECT id FROM user WHERE user = ?)
|
AND owner_user_id = (SELECT id FROM user WHERE user = ?)
|
||||||
`
|
`
|
||||||
sqliteSelectUserReservationsOwner = `
|
sqliteSelectUserReservationsOwnerQuery = `
|
||||||
SELECT owner_user_id
|
SELECT owner_user_id
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE topic = ?
|
WHERE topic = ?
|
||||||
AND user_id = owner_user_id
|
AND user_id = owner_user_id
|
||||||
`
|
`
|
||||||
sqliteSelectUserHasReservation = `
|
sqliteSelectUserHasReservationQuery = `
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE user_id = owner_user_id
|
WHERE user_id = owner_user_id
|
||||||
AND owner_user_id = (SELECT id FROM user WHERE user = ?)
|
AND owner_user_id = (SELECT id FROM user WHERE user = ?)
|
||||||
AND topic = ?
|
AND topic = ?
|
||||||
`
|
`
|
||||||
sqliteSelectOtherAccessCount = `
|
sqliteSelectOtherAccessCountQuery = `
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM user_access
|
FROM user_access
|
||||||
WHERE (topic = ? OR ? LIKE topic ESCAPE '\')
|
WHERE (topic = ? OR ? LIKE topic ESCAPE '\')
|
||||||
AND (owner_user_id IS NULL OR owner_user_id != (SELECT id FROM user WHERE user = ?))
|
AND (owner_user_id IS NULL OR owner_user_id != (SELECT id FROM user WHERE user = ?))
|
||||||
`
|
`
|
||||||
sqliteUpsertUserAccess = `
|
sqliteUpsertUserAccessQuery = `
|
||||||
INSERT INTO user_access (user_id, topic, read, write, owner_user_id, provisioned)
|
INSERT INTO user_access (user_id, topic, read, write, owner_user_id, provisioned)
|
||||||
VALUES ((SELECT id FROM user WHERE user = ?), ?, ?, ?, (SELECT IIF(?='',NULL,(SELECT id FROM user WHERE user=?))), ?)
|
VALUES ((SELECT id FROM user WHERE user = ?), ?, ?, ?, (SELECT IIF(?='',NULL,(SELECT id FROM user WHERE user=?))), ?)
|
||||||
ON CONFLICT (user_id, topic)
|
ON CONFLICT (user_id, topic)
|
||||||
DO UPDATE SET read=excluded.read, write=excluded.write, owner_user_id=excluded.owner_user_id, provisioned=excluded.provisioned
|
DO UPDATE SET read=excluded.read, write=excluded.write, owner_user_id=excluded.owner_user_id, provisioned=excluded.provisioned
|
||||||
`
|
`
|
||||||
sqliteDeleteUserAccess = `
|
sqliteDeleteUserAccessQuery = `
|
||||||
DELETE FROM user_access
|
DELETE FROM user_access
|
||||||
WHERE user_id = (SELECT id FROM user WHERE user = ?)
|
WHERE user_id = (SELECT id FROM user WHERE user = ?)
|
||||||
OR owner_user_id = (SELECT id FROM user WHERE user = ?)
|
OR owner_user_id = (SELECT id FROM user WHERE user = ?)
|
||||||
`
|
`
|
||||||
sqliteDeleteUserAccessProvisioned = `DELETE FROM user_access WHERE provisioned = 1`
|
sqliteDeleteUserAccessProvisionedQuery = `DELETE FROM user_access WHERE provisioned = 1`
|
||||||
sqliteDeleteTopicAccess = `
|
sqliteDeleteTopicAccessQuery = `
|
||||||
DELETE FROM user_access
|
DELETE FROM user_access
|
||||||
WHERE (user_id = (SELECT id FROM user WHERE user = ?) OR owner_user_id = (SELECT id FROM user WHERE user = ?))
|
WHERE (user_id = (SELECT id FROM user WHERE user = ?) OR owner_user_id = (SELECT id FROM user WHERE user = ?))
|
||||||
AND topic = ?
|
AND topic = ?
|
||||||
`
|
`
|
||||||
sqliteDeleteAllAccess = `DELETE FROM user_access`
|
sqliteDeleteAllAccessQuery = `DELETE FROM user_access`
|
||||||
|
|
||||||
// Token queries
|
// Token queries
|
||||||
sqliteSelectToken = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE user_id = ? AND token = ?`
|
sqliteSelectTokenQuery = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE user_id = ? AND token = ?`
|
||||||
sqliteSelectTokens = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE user_id = ?`
|
sqliteSelectTokensQuery = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE user_id = ?`
|
||||||
sqliteSelectTokenCount = `SELECT COUNT(*) FROM user_token WHERE user_id = ?`
|
sqliteSelectTokenCountQuery = `SELECT COUNT(*) FROM user_token WHERE user_id = ?`
|
||||||
sqliteSelectAllProvisionedTokens = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE provisioned = 1`
|
sqliteSelectAllProvisionedTokensQuery = `SELECT token, label, last_access, last_origin, expires, provisioned FROM user_token WHERE provisioned = 1`
|
||||||
sqliteUpsertToken = `
|
sqliteUpsertTokenQuery = `
|
||||||
INSERT INTO user_token (user_id, token, label, last_access, last_origin, expires, provisioned)
|
INSERT INTO user_token (user_id, token, label, last_access, last_origin, expires, provisioned)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||||
ON CONFLICT (user_id, token)
|
ON CONFLICT (user_id, token)
|
||||||
DO UPDATE SET label = excluded.label, expires = excluded.expires, provisioned = excluded.provisioned;
|
DO UPDATE SET label = excluded.label, expires = excluded.expires, provisioned = excluded.provisioned;
|
||||||
`
|
`
|
||||||
sqliteUpdateTokenLabel = `UPDATE user_token SET label = ? WHERE user_id = ? AND token = ?`
|
sqliteUpdateTokenLabelQuery = `UPDATE user_token SET label = ? WHERE user_id = ? AND token = ?`
|
||||||
sqliteUpdateTokenExpiry = `UPDATE user_token SET expires = ? WHERE user_id = ? AND token = ?`
|
sqliteUpdateTokenExpiryQuery = `UPDATE user_token SET expires = ? WHERE user_id = ? AND token = ?`
|
||||||
sqliteUpdateTokenLastAccess = `UPDATE user_token SET last_access = ?, last_origin = ? WHERE token = ?`
|
sqliteUpdateTokenLastAccessQuery = `UPDATE user_token SET last_access = ?, last_origin = ? WHERE token = ?`
|
||||||
sqliteDeleteToken = `DELETE FROM user_token WHERE user_id = ? AND token = ?`
|
sqliteDeleteTokenQuery = `DELETE FROM user_token WHERE user_id = ? AND token = ?`
|
||||||
sqliteDeleteProvisionedToken = `DELETE FROM user_token WHERE token = ?`
|
sqliteDeleteProvisionedTokenQuery = `DELETE FROM user_token WHERE token = ?`
|
||||||
sqliteDeleteAllToken = `DELETE FROM user_token WHERE user_id = ?`
|
sqliteDeleteAllTokenQuery = `DELETE FROM user_token WHERE user_id = ?`
|
||||||
sqliteDeleteExpiredTokens = `DELETE FROM user_token WHERE expires > 0 AND expires < ?`
|
sqliteDeleteExpiredTokensQuery = `DELETE FROM user_token WHERE expires > 0 AND expires < ?`
|
||||||
sqliteDeleteExcessTokens = `
|
sqliteDeleteExcessTokensQuery = `
|
||||||
DELETE FROM user_token
|
DELETE FROM user_token
|
||||||
WHERE user_id = ?
|
WHERE user_id = ?
|
||||||
AND (user_id, token) NOT IN (
|
AND (user_id, token) NOT IN (
|
||||||
@@ -160,38 +160,38 @@ const (
|
|||||||
`
|
`
|
||||||
|
|
||||||
// Tier queries
|
// Tier queries
|
||||||
sqliteInsertTier = `
|
sqliteInsertTierQuery = `
|
||||||
INSERT INTO tier (id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id)
|
INSERT INTO tier (id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
`
|
`
|
||||||
sqliteUpdateTier = `
|
sqliteUpdateTierQuery = `
|
||||||
UPDATE tier
|
UPDATE tier
|
||||||
SET name = ?, messages_limit = ?, messages_expiry_duration = ?, emails_limit = ?, calls_limit = ?, reservations_limit = ?, attachment_file_size_limit = ?, attachment_total_size_limit = ?, attachment_expiry_duration = ?, attachment_bandwidth_limit = ?, stripe_monthly_price_id = ?, stripe_yearly_price_id = ?
|
SET name = ?, messages_limit = ?, messages_expiry_duration = ?, emails_limit = ?, calls_limit = ?, reservations_limit = ?, attachment_file_size_limit = ?, attachment_total_size_limit = ?, attachment_expiry_duration = ?, attachment_bandwidth_limit = ?, stripe_monthly_price_id = ?, stripe_yearly_price_id = ?
|
||||||
WHERE code = ?
|
WHERE code = ?
|
||||||
`
|
`
|
||||||
sqliteSelectTiers = `
|
sqliteSelectTiersQuery = `
|
||||||
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
||||||
FROM tier
|
FROM tier
|
||||||
`
|
`
|
||||||
sqliteSelectTierByCode = `
|
sqliteSelectTierByCodeQuery = `
|
||||||
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
||||||
FROM tier
|
FROM tier
|
||||||
WHERE code = ?
|
WHERE code = ?
|
||||||
`
|
`
|
||||||
sqliteSelectTierByPriceID = `
|
sqliteSelectTierByPriceIDQuery = `
|
||||||
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
SELECT id, code, name, messages_limit, messages_expiry_duration, emails_limit, calls_limit, reservations_limit, attachment_file_size_limit, attachment_total_size_limit, attachment_expiry_duration, attachment_bandwidth_limit, stripe_monthly_price_id, stripe_yearly_price_id
|
||||||
FROM tier
|
FROM tier
|
||||||
WHERE (stripe_monthly_price_id = ? OR stripe_yearly_price_id = ?)
|
WHERE (stripe_monthly_price_id = ? OR stripe_yearly_price_id = ?)
|
||||||
`
|
`
|
||||||
sqliteDeleteTier = `DELETE FROM tier WHERE code = ?`
|
sqliteDeleteTierQuery = `DELETE FROM tier WHERE code = ?`
|
||||||
|
|
||||||
// Phone queries
|
// Phone queries
|
||||||
sqliteSelectPhoneNumbers = `SELECT phone_number FROM user_phone WHERE user_id = ?`
|
sqliteSelectPhoneNumbersQuery = `SELECT phone_number FROM user_phone WHERE user_id = ?`
|
||||||
sqliteInsertPhoneNumber = `INSERT INTO user_phone (user_id, phone_number) VALUES (?, ?)`
|
sqliteInsertPhoneNumberQuery = `INSERT INTO user_phone (user_id, phone_number) VALUES (?, ?)`
|
||||||
sqliteDeletePhoneNumber = `DELETE FROM user_phone WHERE user_id = ? AND phone_number = ?`
|
sqliteDeletePhoneNumberQuery = `DELETE FROM user_phone WHERE user_id = ? AND phone_number = ?`
|
||||||
|
|
||||||
// Billing queries
|
// Billing queries
|
||||||
sqliteUpdateBilling = `
|
sqliteUpdateBillingQuery = `
|
||||||
UPDATE user
|
UPDATE user
|
||||||
SET stripe_customer_id = ?, stripe_subscription_id = ?, stripe_subscription_status = ?, stripe_subscription_interval = ?, stripe_subscription_paid_until = ?, stripe_subscription_cancel_at = ?
|
SET stripe_customer_id = ?, stripe_subscription_id = ?, stripe_subscription_status = ?, stripe_subscription_interval = ?, stripe_subscription_paid_until = ?, stripe_subscription_cancel_at = ?
|
||||||
WHERE user = ?
|
WHERE user = ?
|
||||||
@@ -213,61 +213,61 @@ func NewSQLiteStore(filename, startupQueries string) (Store, error) {
|
|||||||
return &commonStore{
|
return &commonStore{
|
||||||
db: db,
|
db: db,
|
||||||
queries: storeQueries{
|
queries: storeQueries{
|
||||||
selectUserByID: sqliteSelectUserByID,
|
selectUserByID: sqliteSelectUserByIDQuery,
|
||||||
selectUserByName: sqliteSelectUserByName,
|
selectUserByName: sqliteSelectUserByNameQuery,
|
||||||
selectUserByToken: sqliteSelectUserByToken,
|
selectUserByToken: sqliteSelectUserByTokenQuery,
|
||||||
selectUserByStripeID: sqliteSelectUserByStripeID,
|
selectUserByStripeID: sqliteSelectUserByStripeIDQuery,
|
||||||
selectUsernames: sqliteSelectUsernames,
|
selectUsernames: sqliteSelectUsernamesQuery,
|
||||||
selectUserCount: sqliteSelectUserCount,
|
selectUserCount: sqliteSelectUserCountQuery,
|
||||||
selectUserIDFromUsername: sqliteSelectUserIDFromUsername,
|
selectUserIDFromUsername: sqliteSelectUserIDFromUsernameQuery,
|
||||||
insertUser: sqliteInsertUser,
|
insertUser: sqliteInsertUserQuery,
|
||||||
updateUserPass: sqliteUpdateUserPass,
|
updateUserPass: sqliteUpdateUserPassQuery,
|
||||||
updateUserRole: sqliteUpdateUserRole,
|
updateUserRole: sqliteUpdateUserRoleQuery,
|
||||||
updateUserProvisioned: sqliteUpdateUserProvisioned,
|
updateUserProvisioned: sqliteUpdateUserProvisionedQuery,
|
||||||
updateUserPrefs: sqliteUpdateUserPrefs,
|
updateUserPrefs: sqliteUpdateUserPrefsQuery,
|
||||||
updateUserStats: sqliteUpdateUserStats,
|
updateUserStats: sqliteUpdateUserStatsQuery,
|
||||||
updateUserStatsResetAll: sqliteUpdateUserStatsResetAll,
|
updateUserStatsResetAll: sqliteUpdateUserStatsResetAllQuery,
|
||||||
updateUserTier: sqliteUpdateUserTier,
|
updateUserTier: sqliteUpdateUserTierQuery,
|
||||||
updateUserDeleted: sqliteUpdateUserDeleted,
|
updateUserDeleted: sqliteUpdateUserDeletedQuery,
|
||||||
deleteUser: sqliteDeleteUser,
|
deleteUser: sqliteDeleteUserQuery,
|
||||||
deleteUserTier: sqliteDeleteUserTier,
|
deleteUserTier: sqliteDeleteUserTierQuery,
|
||||||
deleteUsersMarked: sqliteDeleteUsersMarked,
|
deleteUsersMarked: sqliteDeleteUsersMarkedQuery,
|
||||||
selectTopicPerms: sqliteSelectTopicPerms,
|
selectTopicPerms: sqliteSelectTopicPermsQuery,
|
||||||
selectUserAllAccess: sqliteSelectUserAllAccess,
|
selectUserAllAccess: sqliteSelectUserAllAccessQuery,
|
||||||
selectUserAccess: sqliteSelectUserAccess,
|
selectUserAccess: sqliteSelectUserAccessQuery,
|
||||||
selectUserReservations: sqliteSelectUserReservations,
|
selectUserReservations: sqliteSelectUserReservationsQuery,
|
||||||
selectUserReservationsCount: sqliteSelectUserReservationsCount,
|
selectUserReservationsCount: sqliteSelectUserReservationsCountQuery,
|
||||||
selectUserReservationsOwner: sqliteSelectUserReservationsOwner,
|
selectUserReservationsOwner: sqliteSelectUserReservationsOwnerQuery,
|
||||||
selectUserHasReservation: sqliteSelectUserHasReservation,
|
selectUserHasReservation: sqliteSelectUserHasReservationQuery,
|
||||||
selectOtherAccessCount: sqliteSelectOtherAccessCount,
|
selectOtherAccessCount: sqliteSelectOtherAccessCountQuery,
|
||||||
upsertUserAccess: sqliteUpsertUserAccess,
|
upsertUserAccess: sqliteUpsertUserAccessQuery,
|
||||||
deleteUserAccess: sqliteDeleteUserAccess,
|
deleteUserAccess: sqliteDeleteUserAccessQuery,
|
||||||
deleteUserAccessProvisioned: sqliteDeleteUserAccessProvisioned,
|
deleteUserAccessProvisioned: sqliteDeleteUserAccessProvisionedQuery,
|
||||||
deleteTopicAccess: sqliteDeleteTopicAccess,
|
deleteTopicAccess: sqliteDeleteTopicAccessQuery,
|
||||||
deleteAllAccess: sqliteDeleteAllAccess,
|
deleteAllAccess: sqliteDeleteAllAccessQuery,
|
||||||
selectToken: sqliteSelectToken,
|
selectToken: sqliteSelectTokenQuery,
|
||||||
selectTokens: sqliteSelectTokens,
|
selectTokens: sqliteSelectTokensQuery,
|
||||||
selectTokenCount: sqliteSelectTokenCount,
|
selectTokenCount: sqliteSelectTokenCountQuery,
|
||||||
selectAllProvisionedTokens: sqliteSelectAllProvisionedTokens,
|
selectAllProvisionedTokens: sqliteSelectAllProvisionedTokensQuery,
|
||||||
upsertToken: sqliteUpsertToken,
|
upsertToken: sqliteUpsertTokenQuery,
|
||||||
updateTokenLabel: sqliteUpdateTokenLabel,
|
updateTokenLabel: sqliteUpdateTokenLabelQuery,
|
||||||
updateTokenExpiry: sqliteUpdateTokenExpiry,
|
updateTokenExpiry: sqliteUpdateTokenExpiryQuery,
|
||||||
updateTokenLastAccess: sqliteUpdateTokenLastAccess,
|
updateTokenLastAccess: sqliteUpdateTokenLastAccessQuery,
|
||||||
deleteToken: sqliteDeleteToken,
|
deleteToken: sqliteDeleteTokenQuery,
|
||||||
deleteProvisionedToken: sqliteDeleteProvisionedToken,
|
deleteProvisionedToken: sqliteDeleteProvisionedTokenQuery,
|
||||||
deleteAllToken: sqliteDeleteAllToken,
|
deleteAllToken: sqliteDeleteAllTokenQuery,
|
||||||
deleteExpiredTokens: sqliteDeleteExpiredTokens,
|
deleteExpiredTokens: sqliteDeleteExpiredTokensQuery,
|
||||||
deleteExcessTokens: sqliteDeleteExcessTokens,
|
deleteExcessTokens: sqliteDeleteExcessTokensQuery,
|
||||||
insertTier: sqliteInsertTier,
|
insertTier: sqliteInsertTierQuery,
|
||||||
selectTiers: sqliteSelectTiers,
|
selectTiers: sqliteSelectTiersQuery,
|
||||||
selectTierByCode: sqliteSelectTierByCode,
|
selectTierByCode: sqliteSelectTierByCodeQuery,
|
||||||
selectTierByPriceID: sqliteSelectTierByPriceID,
|
selectTierByPriceID: sqliteSelectTierByPriceIDQuery,
|
||||||
updateTier: sqliteUpdateTier,
|
updateTier: sqliteUpdateTierQuery,
|
||||||
deleteTier: sqliteDeleteTier,
|
deleteTier: sqliteDeleteTierQuery,
|
||||||
selectPhoneNumbers: sqliteSelectPhoneNumbers,
|
selectPhoneNumbers: sqliteSelectPhoneNumbersQuery,
|
||||||
insertPhoneNumber: sqliteInsertPhoneNumber,
|
insertPhoneNumber: sqliteInsertPhoneNumberQuery,
|
||||||
deletePhoneNumber: sqliteDeletePhoneNumber,
|
deletePhoneNumber: sqliteDeletePhoneNumberQuery,
|
||||||
updateBilling: sqliteUpdateBilling,
|
updateBilling: sqliteUpdateBillingQuery,
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,8 +103,8 @@ const (
|
|||||||
// Schema version table management for SQLite
|
// Schema version table management for SQLite
|
||||||
const (
|
const (
|
||||||
sqliteCurrentSchemaVersion = 6
|
sqliteCurrentSchemaVersion = 6
|
||||||
sqliteInsertSchemaVersion = `INSERT INTO schemaVersion VALUES (1, ?)`
|
sqliteInsertSchemaVersionQuery = `INSERT INTO schemaVersion VALUES (1, ?)`
|
||||||
sqliteUpdateSchemaVersion = `UPDATE schemaVersion SET version = ? WHERE id = 1`
|
sqliteUpdateSchemaVersionQuery = `UPDATE schemaVersion SET version = ? WHERE id = 1`
|
||||||
sqliteSelectSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1`
|
sqliteSelectSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1`
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -179,12 +179,12 @@ const (
|
|||||||
VALUES ('u_everyone', '*', '', 'anonymous', '', UNIXEPOCH())
|
VALUES ('u_everyone', '*', '', 'anonymous', '', UNIXEPOCH())
|
||||||
ON CONFLICT (id) DO NOTHING;
|
ON CONFLICT (id) DO NOTHING;
|
||||||
`
|
`
|
||||||
sqliteMigrate1To2SelectAllOldUsernamesNoTx = `SELECT user FROM user_old`
|
sqliteMigrate1To2SelectAllOldUsernamesNoTxQuery = `SELECT user FROM user_old`
|
||||||
sqliteMigrate1To2InsertUserNoTx = `
|
sqliteMigrate1To2InsertUserNoTxQuery = `
|
||||||
INSERT INTO user (id, user, pass, role, sync_topic, created)
|
INSERT INTO user (id, user, pass, role, sync_topic, created)
|
||||||
SELECT ?, user, pass, role, ?, UNIXEPOCH() FROM user_old WHERE user = ?
|
SELECT ?, user, pass, role, ?, UNIXEPOCH() FROM user_old WHERE user = ?
|
||||||
`
|
`
|
||||||
sqliteMigrate1To2InsertFromOldTablesAndDropNoTx = `
|
sqliteMigrate1To2InsertFromOldTablesAndDropNoTxQuery = `
|
||||||
INSERT INTO user_access (user_id, topic, read, write)
|
INSERT INTO user_access (user_id, topic, read, write)
|
||||||
SELECT u.id, a.topic, a.read, a.write
|
SELECT u.id, a.topic, a.read, a.write
|
||||||
FROM user u
|
FROM user u
|
||||||
@@ -352,7 +352,7 @@ func setupNewSQLite(db *sql.DB) error {
|
|||||||
if _, err := db.Exec(sqliteCreateTablesQueries); err != nil {
|
if _, err := db.Exec(sqliteCreateTablesQueries); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteInsertSchemaVersion, sqliteCurrentSchemaVersion); err != nil {
|
if _, err := db.Exec(sqliteInsertSchemaVersionQuery, sqliteCurrentSchemaVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -382,7 +382,7 @@ func sqliteMigrateFrom1(db *sql.DB) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Insert users from user_old into new user table, with ID and sync_topic
|
// Insert users from user_old into new user table, with ID and sync_topic
|
||||||
rows, err := tx.Query(sqliteMigrate1To2SelectAllOldUsernamesNoTx)
|
rows, err := tx.Query(sqliteMigrate1To2SelectAllOldUsernamesNoTxQuery)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -401,15 +401,15 @@ func sqliteMigrateFrom1(db *sql.DB) error {
|
|||||||
for _, username := range usernames {
|
for _, username := range usernames {
|
||||||
userID := util.RandomStringPrefix(userIDPrefix, userIDLength)
|
userID := util.RandomStringPrefix(userIDPrefix, userIDLength)
|
||||||
syncTopic := util.RandomStringPrefix(syncTopicPrefix, syncTopicLength)
|
syncTopic := util.RandomStringPrefix(syncTopicPrefix, syncTopicLength)
|
||||||
if _, err := tx.Exec(sqliteMigrate1To2InsertUserNoTx, userID, syncTopic, username); err != nil {
|
if _, err := tx.Exec(sqliteMigrate1To2InsertUserNoTxQuery, userID, syncTopic, username); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Migrate old "access" table to "user_access" and drop "access" and "user_old"
|
// Migrate old "access" table to "user_access" and drop "access" and "user_old"
|
||||||
if _, err := tx.Exec(sqliteMigrate1To2InsertFromOldTablesAndDropNoTx); err != nil {
|
if _, err := tx.Exec(sqliteMigrate1To2InsertFromOldTablesAndDropNoTxQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 2); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 2); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := tx.Commit(); err != nil {
|
if err := tx.Commit(); err != nil {
|
||||||
@@ -428,7 +428,7 @@ func sqliteMigrateFrom2(db *sql.DB) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate2To3UpdateQueries); err != nil {
|
if _, err := tx.Exec(sqliteMigrate2To3UpdateQueries); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 3); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 3); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
@@ -444,7 +444,7 @@ func sqliteMigrateFrom3(db *sql.DB) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate3To4UpdateQueries); err != nil {
|
if _, err := tx.Exec(sqliteMigrate3To4UpdateQueries); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 4); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 4); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
@@ -460,7 +460,7 @@ func sqliteMigrateFrom4(db *sql.DB) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate4To5UpdateQueries); err != nil {
|
if _, err := tx.Exec(sqliteMigrate4To5UpdateQueries); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 5); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 5); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
@@ -476,7 +476,7 @@ func sqliteMigrateFrom5(db *sql.DB) error {
|
|||||||
if _, err := tx.Exec(sqliteMigrate5To6UpdateQueries); err != nil {
|
if _, err := tx.Exec(sqliteMigrate5To6UpdateQueries); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(sqliteUpdateSchemaVersion, 6); err != nil {
|
if _, err := tx.Exec(sqliteUpdateSchemaVersionQuery, 6); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
pgCreateTablesQuery = `
|
postgresCreateTablesQuery = `
|
||||||
CREATE TABLE IF NOT EXISTS webpush_subscription (
|
CREATE TABLE IF NOT EXISTS webpush_subscription (
|
||||||
id TEXT PRIMARY KEY,
|
id TEXT PRIMARY KEY,
|
||||||
endpoint TEXT NOT NULL UNIQUE,
|
endpoint TEXT NOT NULL UNIQUE,
|
||||||
@@ -30,42 +30,42 @@ const (
|
|||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
pgSelectSubscriptionIDByEndpoint = `SELECT id FROM webpush_subscription WHERE endpoint = $1`
|
postgresSelectSubscriptionIDByEndpointQuery = `SELECT id FROM webpush_subscription WHERE endpoint = $1`
|
||||||
pgSelectSubscriptionCountBySubscriberIP = `SELECT COUNT(*) FROM webpush_subscription WHERE subscriber_ip = $1`
|
postgresSelectSubscriptionCountBySubscriberIPQuery = `SELECT COUNT(*) FROM webpush_subscription WHERE subscriber_ip = $1`
|
||||||
pgSelectSubscriptionsForTopicQuery = `
|
postgresSelectSubscriptionsForTopicQuery = `
|
||||||
SELECT s.id, s.endpoint, s.key_auth, s.key_p256dh, s.user_id
|
SELECT s.id, s.endpoint, s.key_auth, s.key_p256dh, s.user_id
|
||||||
FROM webpush_subscription_topic st
|
FROM webpush_subscription_topic st
|
||||||
JOIN webpush_subscription s ON s.id = st.subscription_id
|
JOIN webpush_subscription s ON s.id = st.subscription_id
|
||||||
WHERE st.topic = $1
|
WHERE st.topic = $1
|
||||||
ORDER BY s.endpoint
|
ORDER BY s.endpoint
|
||||||
`
|
`
|
||||||
pgSelectSubscriptionsExpiringSoonQuery = `
|
postgresSelectSubscriptionsExpiringSoonQuery = `
|
||||||
SELECT id, endpoint, key_auth, key_p256dh, user_id
|
SELECT id, endpoint, key_auth, key_p256dh, user_id
|
||||||
FROM webpush_subscription
|
FROM webpush_subscription
|
||||||
WHERE warned_at = 0 AND updated_at <= $1
|
WHERE warned_at = 0 AND updated_at <= $1
|
||||||
`
|
`
|
||||||
pgInsertSubscriptionQuery = `
|
postgresInsertSubscriptionQuery = `
|
||||||
INSERT INTO webpush_subscription (id, endpoint, key_auth, key_p256dh, user_id, subscriber_ip, updated_at, warned_at)
|
INSERT INTO webpush_subscription (id, endpoint, key_auth, key_p256dh, user_id, subscriber_ip, updated_at, warned_at)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
||||||
ON CONFLICT (endpoint)
|
ON CONFLICT (endpoint)
|
||||||
DO UPDATE SET key_auth = excluded.key_auth, key_p256dh = excluded.key_p256dh, user_id = excluded.user_id, subscriber_ip = excluded.subscriber_ip, updated_at = excluded.updated_at, warned_at = excluded.warned_at
|
DO UPDATE SET key_auth = excluded.key_auth, key_p256dh = excluded.key_p256dh, user_id = excluded.user_id, subscriber_ip = excluded.subscriber_ip, updated_at = excluded.updated_at, warned_at = excluded.warned_at
|
||||||
`
|
`
|
||||||
pgUpdateSubscriptionWarningSentQuery = `UPDATE webpush_subscription SET warned_at = $1 WHERE id = $2`
|
postgresUpdateSubscriptionWarningSentQuery = `UPDATE webpush_subscription SET warned_at = $1 WHERE id = $2`
|
||||||
pgUpdateSubscriptionUpdatedAtQuery = `UPDATE webpush_subscription SET updated_at = $1 WHERE endpoint = $2`
|
postgresUpdateSubscriptionUpdatedAtQuery = `UPDATE webpush_subscription SET updated_at = $1 WHERE endpoint = $2`
|
||||||
pgDeleteSubscriptionByEndpointQuery = `DELETE FROM webpush_subscription WHERE endpoint = $1`
|
postgresDeleteSubscriptionByEndpointQuery = `DELETE FROM webpush_subscription WHERE endpoint = $1`
|
||||||
pgDeleteSubscriptionByUserIDQuery = `DELETE FROM webpush_subscription WHERE user_id = $1`
|
postgresDeleteSubscriptionByUserIDQuery = `DELETE FROM webpush_subscription WHERE user_id = $1`
|
||||||
pgDeleteSubscriptionByAgeQuery = `DELETE FROM webpush_subscription WHERE updated_at <= $1`
|
postgresDeleteSubscriptionByAgeQuery = `DELETE FROM webpush_subscription WHERE updated_at <= $1`
|
||||||
|
|
||||||
pgInsertSubscriptionTopicQuery = `INSERT INTO webpush_subscription_topic (subscription_id, topic) VALUES ($1, $2)`
|
postgresInsertSubscriptionTopicQuery = `INSERT INTO webpush_subscription_topic (subscription_id, topic) VALUES ($1, $2)`
|
||||||
pgDeleteSubscriptionTopicAllQuery = `DELETE FROM webpush_subscription_topic WHERE subscription_id = $1`
|
postgresDeleteSubscriptionTopicAllQuery = `DELETE FROM webpush_subscription_topic WHERE subscription_id = $1`
|
||||||
pgDeleteSubscriptionTopicWithoutSubscription = `DELETE FROM webpush_subscription_topic WHERE subscription_id NOT IN (SELECT id FROM webpush_subscription)`
|
postgresDeleteSubscriptionTopicWithoutSubscriptionQuery = `DELETE FROM webpush_subscription_topic WHERE subscription_id NOT IN (SELECT id FROM webpush_subscription)`
|
||||||
)
|
)
|
||||||
|
|
||||||
// PostgreSQL schema management queries
|
// PostgreSQL schema management queries
|
||||||
const (
|
const (
|
||||||
pgCurrentSchemaVersion = 1
|
pgCurrentSchemaVersion = 1
|
||||||
pgInsertSchemaVersion = `INSERT INTO schema_version (store, version) VALUES ('webpush', $1)`
|
postgresInsertSchemaVersionQuery = `INSERT INTO schema_version (store, version) VALUES ('webpush', $1)`
|
||||||
pgSelectSchemaVersionQuery = `SELECT version FROM schema_version WHERE store = 'webpush'`
|
postgresSelectSchemaVersionQuery = `SELECT version FROM schema_version WHERE store = 'webpush'`
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewPostgresStore creates a new PostgreSQL-backed web push store using an existing database connection pool.
|
// NewPostgresStore creates a new PostgreSQL-backed web push store using an existing database connection pool.
|
||||||
@@ -76,26 +76,26 @@ func NewPostgresStore(db *sql.DB) (Store, error) {
|
|||||||
return &commonStore{
|
return &commonStore{
|
||||||
db: db,
|
db: db,
|
||||||
queries: storeQueries{
|
queries: storeQueries{
|
||||||
selectSubscriptionIDByEndpoint: pgSelectSubscriptionIDByEndpoint,
|
selectSubscriptionIDByEndpoint: postgresSelectSubscriptionIDByEndpointQuery,
|
||||||
selectSubscriptionCountBySubscriberIP: pgSelectSubscriptionCountBySubscriberIP,
|
selectSubscriptionCountBySubscriberIP: postgresSelectSubscriptionCountBySubscriberIPQuery,
|
||||||
selectSubscriptionsForTopic: pgSelectSubscriptionsForTopicQuery,
|
selectSubscriptionsForTopic: postgresSelectSubscriptionsForTopicQuery,
|
||||||
selectSubscriptionsExpiringSoon: pgSelectSubscriptionsExpiringSoonQuery,
|
selectSubscriptionsExpiringSoon: postgresSelectSubscriptionsExpiringSoonQuery,
|
||||||
insertSubscription: pgInsertSubscriptionQuery,
|
insertSubscription: postgresInsertSubscriptionQuery,
|
||||||
updateSubscriptionWarningSent: pgUpdateSubscriptionWarningSentQuery,
|
updateSubscriptionWarningSent: postgresUpdateSubscriptionWarningSentQuery,
|
||||||
updateSubscriptionUpdatedAt: pgUpdateSubscriptionUpdatedAtQuery,
|
updateSubscriptionUpdatedAt: postgresUpdateSubscriptionUpdatedAtQuery,
|
||||||
deleteSubscriptionByEndpoint: pgDeleteSubscriptionByEndpointQuery,
|
deleteSubscriptionByEndpoint: postgresDeleteSubscriptionByEndpointQuery,
|
||||||
deleteSubscriptionByUserID: pgDeleteSubscriptionByUserIDQuery,
|
deleteSubscriptionByUserID: postgresDeleteSubscriptionByUserIDQuery,
|
||||||
deleteSubscriptionByAge: pgDeleteSubscriptionByAgeQuery,
|
deleteSubscriptionByAge: postgresDeleteSubscriptionByAgeQuery,
|
||||||
insertSubscriptionTopic: pgInsertSubscriptionTopicQuery,
|
insertSubscriptionTopic: postgresInsertSubscriptionTopicQuery,
|
||||||
deleteSubscriptionTopicAll: pgDeleteSubscriptionTopicAllQuery,
|
deleteSubscriptionTopicAll: postgresDeleteSubscriptionTopicAllQuery,
|
||||||
deleteSubscriptionTopicWithoutSubscription: pgDeleteSubscriptionTopicWithoutSubscription,
|
deleteSubscriptionTopicWithoutSubscription: postgresDeleteSubscriptionTopicWithoutSubscriptionQuery,
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupPostgresDB(db *sql.DB) error {
|
func setupPostgresDB(db *sql.DB) error {
|
||||||
var schemaVersion int
|
var schemaVersion int
|
||||||
err := db.QueryRow(pgSelectSchemaVersionQuery).Scan(&schemaVersion)
|
err := db.QueryRow(postgresSelectSchemaVersionQuery).Scan(&schemaVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return setupNewPostgresDB(db)
|
return setupNewPostgresDB(db)
|
||||||
}
|
}
|
||||||
@@ -111,10 +111,10 @@ func setupNewPostgresDB(db *sql.DB) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer tx.Rollback()
|
defer tx.Rollback()
|
||||||
if _, err := tx.Exec(pgCreateTablesQuery); err != nil {
|
if _, err := tx.Exec(postgresCreateTablesQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := tx.Exec(pgInsertSchemaVersion, pgCurrentSchemaVersion); err != nil {
|
if _, err := tx.Exec(postgresInsertSchemaVersionQuery, pgCurrentSchemaVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ const (
|
|||||||
PRAGMA foreign_keys = ON;
|
PRAGMA foreign_keys = ON;
|
||||||
`
|
`
|
||||||
|
|
||||||
sqliteSelectWebPushSubscriptionIDByEndpoint = `SELECT id FROM subscription WHERE endpoint = ?`
|
sqliteSelectWebPushSubscriptionIDByEndpointQuery = `SELECT id FROM subscription WHERE endpoint = ?`
|
||||||
sqliteSelectWebPushSubscriptionCountBySubscriberIP = `SELECT COUNT(*) FROM subscription WHERE subscriber_ip = ?`
|
sqliteSelectWebPushSubscriptionCountBySubscriberIPQuery = `SELECT COUNT(*) FROM subscription WHERE subscriber_ip = ?`
|
||||||
sqliteSelectWebPushSubscriptionsForTopicQuery = `
|
sqliteSelectWebPushSubscriptionsForTopicQuery = `
|
||||||
SELECT id, endpoint, key_auth, key_p256dh, user_id
|
SELECT id, endpoint, key_auth, key_p256dh, user_id
|
||||||
FROM subscription_topic st
|
FROM subscription_topic st
|
||||||
JOIN subscription s ON s.id = st.subscription_id
|
JOIN subscription s ON s.id = st.subscription_id
|
||||||
@@ -65,15 +65,15 @@ const (
|
|||||||
sqliteDeleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscription WHERE user_id = ?`
|
sqliteDeleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscription WHERE user_id = ?`
|
||||||
sqliteDeleteWebPushSubscriptionByAgeQuery = `DELETE FROM subscription WHERE updated_at <= ?` // Full table scan!
|
sqliteDeleteWebPushSubscriptionByAgeQuery = `DELETE FROM subscription WHERE updated_at <= ?` // Full table scan!
|
||||||
|
|
||||||
sqliteInsertWebPushSubscriptionTopicQuery = `INSERT INTO subscription_topic (subscription_id, topic) VALUES (?, ?)`
|
sqliteInsertWebPushSubscriptionTopicQuery = `INSERT INTO subscription_topic (subscription_id, topic) VALUES (?, ?)`
|
||||||
sqliteDeleteWebPushSubscriptionTopicAllQuery = `DELETE FROM subscription_topic WHERE subscription_id = ?`
|
sqliteDeleteWebPushSubscriptionTopicAllQuery = `DELETE FROM subscription_topic WHERE subscription_id = ?`
|
||||||
sqliteDeleteWebPushSubscriptionTopicWithoutSubscription = `DELETE FROM subscription_topic WHERE subscription_id NOT IN (SELECT id FROM subscription)`
|
sqliteDeleteWebPushSubscriptionTopicWithoutSubscriptionQuery = `DELETE FROM subscription_topic WHERE subscription_id NOT IN (SELECT id FROM subscription)`
|
||||||
)
|
)
|
||||||
|
|
||||||
// SQLite schema management queries
|
// SQLite schema management queries
|
||||||
const (
|
const (
|
||||||
sqliteCurrentWebPushSchemaVersion = 1
|
sqliteCurrentWebPushSchemaVersion = 1
|
||||||
sqliteInsertWebPushSchemaVersion = `INSERT INTO schemaVersion VALUES (1, ?)`
|
sqliteInsertWebPushSchemaVersionQuery = `INSERT INTO schemaVersion VALUES (1, ?)`
|
||||||
sqliteSelectWebPushSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1`
|
sqliteSelectWebPushSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1`
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -92,8 +92,8 @@ func NewSQLiteStore(filename, startupQueries string) (Store, error) {
|
|||||||
return &commonStore{
|
return &commonStore{
|
||||||
db: db,
|
db: db,
|
||||||
queries: storeQueries{
|
queries: storeQueries{
|
||||||
selectSubscriptionIDByEndpoint: sqliteSelectWebPushSubscriptionIDByEndpoint,
|
selectSubscriptionIDByEndpoint: sqliteSelectWebPushSubscriptionIDByEndpointQuery,
|
||||||
selectSubscriptionCountBySubscriberIP: sqliteSelectWebPushSubscriptionCountBySubscriberIP,
|
selectSubscriptionCountBySubscriberIP: sqliteSelectWebPushSubscriptionCountBySubscriberIPQuery,
|
||||||
selectSubscriptionsForTopic: sqliteSelectWebPushSubscriptionsForTopicQuery,
|
selectSubscriptionsForTopic: sqliteSelectWebPushSubscriptionsForTopicQuery,
|
||||||
selectSubscriptionsExpiringSoon: sqliteSelectWebPushSubscriptionsExpiringSoonQuery,
|
selectSubscriptionsExpiringSoon: sqliteSelectWebPushSubscriptionsExpiringSoonQuery,
|
||||||
insertSubscription: sqliteInsertWebPushSubscriptionQuery,
|
insertSubscription: sqliteInsertWebPushSubscriptionQuery,
|
||||||
@@ -104,7 +104,7 @@ func NewSQLiteStore(filename, startupQueries string) (Store, error) {
|
|||||||
deleteSubscriptionByAge: sqliteDeleteWebPushSubscriptionByAgeQuery,
|
deleteSubscriptionByAge: sqliteDeleteWebPushSubscriptionByAgeQuery,
|
||||||
insertSubscriptionTopic: sqliteInsertWebPushSubscriptionTopicQuery,
|
insertSubscriptionTopic: sqliteInsertWebPushSubscriptionTopicQuery,
|
||||||
deleteSubscriptionTopicAll: sqliteDeleteWebPushSubscriptionTopicAllQuery,
|
deleteSubscriptionTopicAll: sqliteDeleteWebPushSubscriptionTopicAllQuery,
|
||||||
deleteSubscriptionTopicWithoutSubscription: sqliteDeleteWebPushSubscriptionTopicWithoutSubscription,
|
deleteSubscriptionTopicWithoutSubscription: sqliteDeleteWebPushSubscriptionTopicWithoutSubscriptionQuery,
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@@ -125,7 +125,7 @@ func setupNewSQLite(db *sql.DB) error {
|
|||||||
if _, err := db.Exec(sqliteCreateWebPushSubscriptionsTableQuery); err != nil {
|
if _, err := db.Exec(sqliteCreateWebPushSubscriptionsTableQuery); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := db.Exec(sqliteInsertWebPushSchemaVersion, sqliteCurrentWebPushSchemaVersion); err != nil {
|
if _, err := db.Exec(sqliteInsertWebPushSchemaVersionQuery, sqliteCurrentWebPushSchemaVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user