mirror of
https://github.com/idanoo/GoDiscMoji
synced 2025-07-01 18:32:15 +00:00
74 lines
1.6 KiB
Go
74 lines
1.6 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) {
|
|
// Hacked up af - Rerunnable
|
|
_, 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, " +
|
|
"`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 INDEX IF NOT EXISTS `idx_emoji_usage_emoji_id,guild_id` ON `emoji_usage` (`guild_id`, `emoji_id`)")
|
|
if err != nil {
|
|
return db, err
|
|
}
|
|
|
|
return db, err
|
|
}
|
|
|
|
// CloseDbConn - Closes DB connection
|
|
func (db *Database) CloseDbConn() {
|
|
db.db.Close()
|
|
}
|