main / internal/infra/persistence/sqlite/db.go
852 B · Go Raw
1package sqlite
2
3import (
4 "database/sql"
5 "embed"
6
7 _ "github.com/mattn/go-sqlite3"
8)
9
10//go:embed migrations/*.sql
11var migrationsFS embed.FS
12
13func Open(dbPath string) (*sql.DB, error) {
14 db, err := sql.Open("sqlite3", dbPath+"?_pragma=foreign_keys(1)&_pragma=busy_timeout(5000)")
15 if err != nil {
16 return nil, err
17 }
18 if err := db.Ping(); err != nil {
19 return nil, err
20 }
21 if err := migrate(db); err != nil {
22 return nil, err
23 }
24 return db, nil
25}
26
27func migrate(db *sql.DB) error {
28 migrations, err := migrationsFS.ReadDir("migrations")
29 if err != nil {
30 return err
31 }
32 for _, migration := range migrations {
33 if migration.IsDir() {
34 continue
35 }
36 content, err := migrationsFS.ReadFile("migrations/" + migration.Name())
37 if err != nil {
38 return err
39 }
40 if _, err := db.Exec(string(content)); err != nil {
41 return err
42 }
43 }
44 return nil
45}