68 lines
1.1 KiB
Go
68 lines
1.1 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"os"
|
|
"scrap/internal/config"
|
|
"strings"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
var dbInstance *sql.DB
|
|
|
|
func Setup() {
|
|
cfg := config.GetAppConfig()
|
|
|
|
db, err := sql.Open("sqlite3", cfg.SqlDatabaseName)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
dbInstance = db
|
|
|
|
tableFilenames := getTableFilenames()
|
|
createTablesFromSQLFiles(tableFilenames)
|
|
}
|
|
|
|
func GetInstance() *sql.DB { return dbInstance }
|
|
|
|
func Close() { dbInstance.Close() }
|
|
|
|
func getTableFilenames() []string {
|
|
appConfig := config.GetAppConfig()
|
|
|
|
files, err := os.ReadDir(appConfig.SqlTablesDir)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
filenames := []string{}
|
|
for _, f := range files {
|
|
fName := f.Name()
|
|
if !strings.HasSuffix(fName, ".sql") {
|
|
continue
|
|
}
|
|
|
|
filenames = append(filenames, fName)
|
|
}
|
|
|
|
return filenames
|
|
}
|
|
|
|
func createTablesFromSQLFiles(filenames []string) {
|
|
appConfig := config.GetAppConfig()
|
|
|
|
for _, fName := range filenames {
|
|
tableBytes, err := os.ReadFile(appConfig.SqlTablesDir + fName)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
tableQuery := string(tableBytes)
|
|
if _, err = dbInstance.Exec(tableQuery); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|