bloaterbot/commands/notify/sql.go
2023-09-07 03:24:31 +02:00

111 lines
3 KiB
Go

package notify
import (
"database/sql"
"github.com/rs/zerolog/log"
)
var notifySetReminder *sql.Stmt
var notifyGetReminders *sql.Stmt
var notifyGetReminderDetails *sql.Stmt
var notifyDeleteReminder *sql.Stmt
func InitDB() {
const dbPath string = "./bloater.db"
log.Info().Str("dbpath", dbPath).Msg("init database")
db, err := sql.Open("sqlite3", dbPath)
if err != nil {
log.Panic().Err(err).Msg("failed to open sqlite database")
}
_, err = db.Exec("CREATE TABLE IF NOT EXISTS notify (updateID INTEGER,notifyTime INTEGER,chatID INTEGER, userID INTEGER,messageToReplyToID INTEGER,notifyText TEXT)")
if err != nil {
log.Panic().Err(err).Msg("failed to create table")
}
notifySetReminder, err = db.Prepare("INSERT OR REPLACE INTO notify (updateID,notifyTime,chatID, userID,messageToReplyToID,notifyText) values (?,?,?,?,?,?)")
if err != nil {
log.Panic().Err(err).Msg("failed to create sql statement")
}
notifyGetReminders, err = db.Prepare("SELECT updateID,notifyTime FROM notify")
if err != nil {
log.Panic().Err(err).Msg("failed to create sql statement")
}
notifyGetReminderDetails, err = db.Prepare("SELECT chatID, userID,messageToReplyToID,notifyText FROM notify WHERE updateID=?")
if err != nil {
log.Panic().Err(err).Msg("failed to create sql statement")
}
notifyDeleteReminder, err = db.Prepare("DELETE FROM notify WHERE updateID=?")
if err != nil {
log.Panic().Err(err).Msg("failed to create sql statement")
}
log.Info().Msg("init database: done")
}
func sqlDeleteReminder(updateID int) {
_, err := notifyDeleteReminder.Exec(updateID)
if err != nil {
log.Error().Err(err).Msg("failed to execute SQL to delete reminder")
return
}
log.Debug().Msg("executed SQL to delete reminder")
}
func sqlAddReminder(reminder reminderConfig) {
_, err := notifySetReminder.Exec(reminder.updateID, reminder.notifyTime, reminder.chatID, reminder.userID, reminder.messageToReplyToID, reminder.reminderText)
if err != nil {
log.Error().Err(err).Msg("failed to execute SQL to add reminder")
return
}
log.Debug().Msg("executed SQL to add reminder")
}
func sqlGetReminders() (reminders map[int]int64) {
rows, err := notifyGetReminders.Query()
if err != nil {
log.Error().Err(err).Msg("failed to execute SQL to get reminder")
return
}
reminders = make(map[int]int64)
var c int
var b int64
for rows.Next() {
switch err := rows.Scan(&c, &b); err {
case nil:
reminders[c] = b
default:
log.Error().Err(err).Msg("failed to parse SQL to get reminder")
return
}
}
log.Debug().Msg("executed SQL to get reminders")
return reminders
}
func sqlGetReminderDetails(updateID int) (reminder reminderConfig) {
row := notifyGetReminderDetails.QueryRow(updateID)
switch err := row.Scan(&reminder.chatID, &reminder.userID, &reminder.messageToReplyToID, &reminder.reminderText); err {
case nil:
break
default:
log.Error().Err(err).Msg("failed to execute SQL to get reminder details")
return
}
log.Debug().Msg("executed SQL to get reminder details")
return reminder
}