56 lines
1.0 KiB
Go
56 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"path/filepath"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/clause"
|
|
)
|
|
|
|
type DB interface {
|
|
DB() *gorm.DB
|
|
Raw(sql string, args ...any) *gorm.DB
|
|
SaveKillmails(killmails []Killmail) error
|
|
}
|
|
|
|
type DBWrapper struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
var db *DBWrapper
|
|
|
|
func GetDB() (DB, error) {
|
|
if db != nil {
|
|
return db, nil
|
|
}
|
|
var err error
|
|
|
|
dbFile := filepath.Join("sqlite-latest.sqlite")
|
|
gdb, err := gorm.Open(sqlite.Open(dbFile), &gorm.Config{
|
|
// SkipDefaultTransaction: true,
|
|
PrepareStmt: true,
|
|
// Logger: gormlogger.Default.LogMode(gormlogger.Silent),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
db = &DBWrapper{db: gdb}
|
|
return db, nil
|
|
}
|
|
|
|
func (db *DBWrapper) Raw(sql string, args ...any) *gorm.DB {
|
|
return db.db.Raw(sql, args...)
|
|
}
|
|
|
|
func (db *DBWrapper) DB() *gorm.DB {
|
|
return db.db
|
|
}
|
|
|
|
func (db *DBWrapper) SaveKillmails(killmails []Killmail) error {
|
|
return db.db.Session(&gorm.Session{FullSaveAssociations: true}).
|
|
Clauses(clause.OnConflict{DoNothing: true}).
|
|
CreateInBatches(killmails, 10).Error
|
|
}
|