readme command line usage - to specify pipeline file name readme updated to include reasoning behind the project use native golang sqlite RunScriptCommand named in functionMap removed unused functions removed unused functions run script and pipeline example renamed functions to drop the word script and add pipeline verb
74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"log"
|
|
"log/slog"
|
|
"os"
|
|
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
func NewDatabase(dbPath string) (*sql.DB, error) {
|
|
|
|
// Check if the application is running in a test environment
|
|
if os.Getenv("TEST_ENV") == "true" {
|
|
dbPath = ":memory:" // Use in-memory database for tests
|
|
slog.Info("🧪 Running in test environment, using in-memory database")
|
|
log.Fatal("🧪 Running in test environment, using in-memory database ")
|
|
}
|
|
|
|
db, err := sql.Open("sqlite", dbPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
createTableSQL := `
|
|
CREATE TABLE IF NOT EXISTS project_name (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
project_name TEXT NOT NULL,
|
|
port INTEGER NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
|
|
);`
|
|
_, err = db.Exec(createTableSQL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return db, nil
|
|
}
|
|
|
|
func CheckProjectName(db *sql.DB, projectName string) (bool, error) {
|
|
var exists bool
|
|
query := `SELECT EXISTS(SELECT 1 FROM project_name WHERE project_name = ? LIMIT 1);`
|
|
err := db.QueryRow(query, projectName).Scan(&exists)
|
|
if err != nil && err != sql.ErrNoRows {
|
|
return false, err
|
|
}
|
|
return !exists, nil
|
|
}
|
|
|
|
func AddProjectName(db *sql.DB, projectName string, port int) error {
|
|
query := `INSERT INTO project_name (project_name, port) VALUES (?, ?);`
|
|
_, err := db.Exec(query, projectName, port)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func GetNextPortNumber(db *sql.DB) (int, error) {
|
|
var maxPortNumber sql.NullInt64
|
|
query := `SELECT MAX(port) FROM project_name;`
|
|
err := db.QueryRow(query).Scan(&maxPortNumber)
|
|
if err != nil && err != sql.ErrNoRows {
|
|
return 0, err
|
|
}
|
|
|
|
if !maxPortNumber.Valid {
|
|
// No rows in the table, return a default port number
|
|
return 10000, nil
|
|
}
|
|
return int(maxPortNumber.Int64 + 1), nil
|
|
}
|