Setup database and Data directory
This commit is contained in:
@@ -2,22 +2,48 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
_ "modernc.org/sqlite"
|
_ "modernc.org/sqlite"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Create new sqlite database
|
||||||
|
// If filepath parameter is empty
|
||||||
|
func NewDatabaseConnection(dataDir string, dbName string) (*sql.DB, error) {
|
||||||
|
var dbFilePath string
|
||||||
|
|
||||||
|
if dbName == "" {
|
||||||
|
dbFilePath = filepath.Join(dataDir, "app.db")
|
||||||
|
} else {
|
||||||
|
dbFilePath = filepath.Join(dataDir, filepath.Base(dbName))
|
||||||
|
}
|
||||||
|
|
||||||
|
db, err := sql.Open("sqlite", dbFilePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("database open error: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := db.Ping(); err != nil {
|
||||||
|
return nil, fmt.Errorf("database connection error: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return db, nil
|
||||||
|
}
|
||||||
|
|
||||||
// database
|
// database
|
||||||
//
|
//
|
||||||
// Manage database connection to ./app.db
|
// Manage database connection to ./app.db
|
||||||
// Handles CRUD
|
// Handles CRUD
|
||||||
func database() *sql.DB {
|
func database(db *sql.DB) *sql.DB {
|
||||||
db, err := sql.Open("sqlite", "./app.db")
|
if db == nil {
|
||||||
if err != nil {
|
slog.Error("No connection to the database!")
|
||||||
log.Fatal(err)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Seed default menu items if empty
|
// Seed default menu items if empty
|
||||||
row := db.QueryRow("SELECT COUNT(*) FROM menu_items")
|
row := db.QueryRow("SELECT COUNT(*) FROM menu_items")
|
||||||
var count int
|
var count int
|
||||||
@@ -65,7 +91,7 @@ func database() *sql.DB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create users table
|
// Create users table
|
||||||
_, err = db.Exec(`
|
_, err := db.Exec(`
|
||||||
CREATE TABLE IF NOT EXISTS users (
|
CREATE TABLE IF NOT EXISTS users (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
username TEXT NOT NULL UNIQUE,
|
username TEXT NOT NULL UNIQUE,
|
||||||
|
|||||||
@@ -36,7 +36,20 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
db := database()
|
// Setup data directory
|
||||||
|
dataDir, err := setupDataDir()
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("Cannot set data directory: %s; %w", os.Getenv("DATA_DIR"), err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup database connection
|
||||||
|
dbConnection, err := NewDatabaseConnection(dataDir, "app.db")
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("Databse error", "error", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
db := database(dbConnection)
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
// Create App
|
// Create App
|
||||||
|
|||||||
24
backend/setup_data_dir.go
Normal file
24
backend/setup_data_dir.go
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setupDataDir() (string, error) {
|
||||||
|
var dataDir string
|
||||||
|
if os.Getenv("DATA_DIR") == "" {
|
||||||
|
dataDir = filepath.Join(".", "data")
|
||||||
|
} else {
|
||||||
|
dataDir = filepath.Join(".", os.Getenv("DATA_DIR"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := os.Stat(dataDir); os.IsNotExist(err) {
|
||||||
|
err := os.Mkdir(dataDir, 0o755)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("cannot create '%s' directory: %w", dataDir, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dataDir, nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user