Setup database and Data directory

This commit is contained in:
2025-10-16 23:48:53 +02:00
parent d13ea9fc27
commit fd24695764
3 changed files with 70 additions and 7 deletions

View File

@@ -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,

View File

@@ -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
View 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
}