GoDiscMoji/src/internal/db/database.go
2025-06-26 20:18:17 +12:00

98 lines
2.2 KiB
Go

package db
import (
"database/sql"
_ "github.com/golang-migrate/migrate/source/file"
_ "github.com/mattn/go-sqlite3"
)
type Database struct {
db *sql.DB
}
// InitDb - Initialize DB connection
func InitDb() (*Database, error) {
ddb := Database{}
db, err := sql.Open("sqlite3", "file:/data/db.sqlite?loc=auto")
if err != nil {
return &ddb, err
}
db.SetConnMaxLifetime(0)
db.SetMaxOpenConns(5)
db.SetMaxIdleConns(2)
err = db.Ping()
if err != nil {
return &ddb, err
}
ddb.db = db
return ddb.runMigrations()
}
// runMigrations - Run migrations for connection
func (db *Database) runMigrations() (*Database, error) {
_, err := db.db.Exec("CREATE TABLE IF NOT EXISTS `emoji_usage` (" +
"`id` INTEGER PRIMARY KEY AUTOINCREMENT, " +
"`guild_id` TEXT, " +
"`channel_id` TEXT, " +
"`message_id` TEXT, " +
"`user_id` TEXT, " +
"`emoji_id` TEXT, " +
"`emoji_name` TEXT, " +
"`timestamp` DATETIME" +
")")
if err != nil {
return db, err
}
_, err = db.db.Exec("CREATE INDEX IF NOT EXISTS `idx_emoji_usage_guild_id_user_id` ON `emoji_usage` (`guild_id`, `user_id`, `emoji_id`)")
if err != nil {
return db, err
}
_, err = db.db.Exec("CREATE INDEX IF NOT EXISTS `idx_emoji_usage_message_id_user_id_emoji_id` ON `emoji_usage` (`message_id`, `user_id`, `guild_id`, `emoji_id`)")
if err != nil {
return db, err
}
_, err = db.db.Exec("CREATE TABLE IF NOT EXISTS `auto_scrubber` (" +
"`id` INTEGER PRIMARY KEY AUTOINCREMENT, " +
"`guild_id` TEXT, " +
"`user_id` TEXT, " +
"`duration` INT " +
")")
if err != nil {
return db, err
}
_, err = db.db.Exec("CREATE INDEX IF NOT EXISTS `idx_auto_scrubber_guild_user` ON `auto_scrubber` (`guild_id`, `user_id`)")
if err != nil {
return db, err
}
// emojitest := map[string]string{
// "pepe_analyze": "579431592624390147",
// "kekw": "1317987954102112347",
// "pepe_kek": "1300985103182336010",
// "KEKW": "649918246119669770",
// }
// for name, id := range emojitest {
// _, err = db.db.Exec("UPDATE `emoji_usage` SET `emoji_id` = '" + id + "' WHERE `emoji_name` = '" + name + "'")
// if err != nil {
// return db, err
// }
// }
return db, nil
}
// CloseDbConn - Closes DB connection
func (db *Database) CloseDbConn() {
db.db.Close()
}