75 lines
1.8 KiB
Go
75 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
|
||
|
|
}
|