Skip to content

Commit 94ecb98

Browse files
Add utility functions for querying
1 parent d7701b1 commit 94ecb98

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

db_generator.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"path/filepath"
1010
"regexp"
1111
"romnibus/models"
12+
"romnibus/utils"
1213
"strings"
1314
)
1415

@@ -27,7 +28,7 @@ func main() {
2728
_ = os.Remove(databaseFilename)
2829
_, _ = os.Create(databaseFilename)
2930

30-
db, err := sql.Open("sqlite3", databaseFilename)
31+
db, err := utils.InitDB(databaseFilename)
3132
if err != nil {
3233
panic(err)
3334
}

utils/db.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package utils
2+
3+
import (
4+
"database/sql"
5+
"errors"
6+
"fmt"
7+
"romnibus/models"
8+
)
9+
10+
var db *sql.DB
11+
12+
func InitDB(databasePath string) (*sql.DB, error) {
13+
var err error
14+
db, err = sql.Open("sqlite3", databasePath)
15+
16+
return db, err
17+
}
18+
19+
func CloseDB() error {
20+
return db.Close()
21+
}
22+
23+
func FindByHash(db *sql.DB, hash string) (*models.Game, error) {
24+
if db == nil {
25+
return nil, errors.New("database is not initialized")
26+
}
27+
28+
query := `SELECT name, filename, platform, hash FROM games WHERE LOWER(hash) = LOWER(?) LIMIT 1`
29+
30+
var game models.Game
31+
err := db.QueryRow(query, hash).Scan(&game.Name, &game.Filename, &game.Platform, &game.Hash)
32+
if err != nil {
33+
if errors.Is(err, sql.ErrNoRows) {
34+
return nil, nil
35+
}
36+
return nil, fmt.Errorf("failed to query game by hash: %w", err)
37+
}
38+
39+
return &game, nil
40+
}
41+
42+
func FindByFilename(db *sql.DB, filename string) (*models.Game, error) {
43+
if db == nil {
44+
return nil, errors.New("database is not initialized")
45+
}
46+
47+
query := `SELECT name, filename, platform, hash FROM games WHERE LOWER(filename) = LOWER(?) LIMIT 1`
48+
49+
var game models.Game
50+
err := db.QueryRow(query, filename).Scan(&game.Name, &game.Filename, &game.Platform, &game.Hash)
51+
if err != nil {
52+
if errors.Is(err, sql.ErrNoRows) {
53+
return nil, nil
54+
}
55+
return nil, fmt.Errorf("failed to query game by filename: %w", err)
56+
}
57+
58+
return &game, nil
59+
}

0 commit comments

Comments
 (0)