Files
mangaGetter/internal/database/database.go
2024-05-21 11:56:14 +02:00

60 lines
1.1 KiB
Go

package database
import (
_ "embed"
_ "github.com/mattn/go-sqlite3"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type Manager struct {
ConnectionString string
Db *gorm.DB
CreateIfNotExists bool
}
func NewDatabase(connectionString string, createIfNotExists bool) Manager {
return Manager{
ConnectionString: connectionString,
Db: nil,
CreateIfNotExists: createIfNotExists,
}
}
func (dbMgr *Manager) Open() error {
db, err := gorm.Open(sqlite.Open(dbMgr.ConnectionString), &gorm.Config{})
if err != nil {
return err
}
dbMgr.Db = db
if dbMgr.CreateIfNotExists {
err = dbMgr.createDatabaseIfNotExists()
if err != nil {
return err
}
}
return err
}
func (dbMgr *Manager) Close() error {
sql, err := dbMgr.Db.DB()
if err != nil {
return err
}
err = sql.Close()
if err != nil {
return err
}
dbMgr.Db = nil
return nil
}
func (dbMgr *Manager) Delete(mangaId int) {
dbMgr.Db.Delete(&Manga{}, mangaId)
}
func (dbMgr *Manager) createDatabaseIfNotExists() error {
err := dbMgr.Db.AutoMigrate(&MangaDefinition{}, &User{}, &Manga{}, &Chapter{}, &Setting{})
return err
}