bill-server-go/internal/infrastructure/sqlite.go

55 lines
1.1 KiB
Go
Raw Normal View History

package infrastructure
import (
2023-06-12 18:12:30 +08:00
"bill-server/internal/bill"
"bill-server/internal/label"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
2023-06-01 20:25:38 +08:00
"log"
2023-06-01 20:07:02 +08:00
"os"
)
func ConnectToSqlite() (*gorm.DB, error) {
2023-06-01 20:25:38 +08:00
var dsn string
switch os.Getenv("ENV") {
case "prod":
dsn = "bill.db"
default:
dsn = "file::memory:?cache=shared"
}
db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{})
if err != nil {
2023-06-01 17:55:41 +08:00
panic("failed to connect database.\n")
2023-06-01 20:25:38 +08:00
} else {
log.Println("Connecting to sqlite.")
}
2023-06-01 19:38:07 +08:00
err = db.AutoMigrate(&label.Label{})
if err != nil {
panic("failed to migrate database.\n")
}
err = db.AutoMigrate(&bill.Bill{})
if err != nil {
panic("failed to migrate database.\n")
}
2023-06-01 20:07:02 +08:00
// migrate data
2023-06-01 20:25:38 +08:00
if os.Getenv("ENV") != "prod" {
go func() {
2023-06-12 18:19:36 +08:00
sql, err := os.ReadFile("scripts/migrations.sql")
2023-06-01 20:25:38 +08:00
if err != nil {
//panic("failed to read migration sql file: " + err.Error())
log.Fatal("failed to read migration sql file: " + err.Error())
}
res := db.Exec(string(sql))
if res.Error != nil {
log.Fatal("failed to migrate" + res.Error.Error())
}
log.Println("SQL migrated successfully!")
}()
}
2023-06-01 19:38:07 +08:00
return db, nil
}