use antigravity to rewrite all your code to migrate from flat files to relational database. YOLO
All checks were successful
pedestrian-simulator / build (push) Successful in 58s
All checks were successful
pedestrian-simulator / build (push) Successful in 58s
This commit is contained in:
107
server/db.go
Normal file
107
server/db.go
Normal file
@@ -0,0 +1,107 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
var db *sql.DB
|
||||
|
||||
func InitDB() {
|
||||
host := os.Getenv("DB_HOST")
|
||||
port := os.Getenv("DB_PORT")
|
||||
name := os.Getenv("DB_DATABASENAME")
|
||||
user := os.Getenv("DB_USERNAME")
|
||||
pass := os.Getenv("DB_PASSWORD")
|
||||
|
||||
if host == "" {
|
||||
log.Println("DB_HOST not set, skipping database initialization")
|
||||
return
|
||||
}
|
||||
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true", user, pass, host, port, name)
|
||||
var err error
|
||||
db, err = sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
log.Fatalf("Error opening database: %v", err)
|
||||
}
|
||||
|
||||
if err := db.Ping(); err != nil {
|
||||
log.Fatalf("Error connecting to database: %v", err)
|
||||
}
|
||||
|
||||
log.Println("Connected to MariaDB successfully")
|
||||
createTables()
|
||||
}
|
||||
|
||||
func createTables() {
|
||||
queries := []string{
|
||||
`CREATE TABLE IF NOT EXISTS users (
|
||||
fitbit_user_id VARCHAR(255) PRIMARY KEY,
|
||||
display_name VARCHAR(255),
|
||||
avatar_url TEXT,
|
||||
created_at DATETIME
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS sessions (
|
||||
token VARCHAR(255) PRIMARY KEY,
|
||||
fitbit_user_id VARCHAR(255),
|
||||
created_at DATETIME,
|
||||
expires_at DATETIME,
|
||||
FOREIGN KEY (fitbit_user_id) REFERENCES users(fitbit_user_id) ON DELETE CASCADE
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS fitbit_tokens (
|
||||
user_id VARCHAR(255) PRIMARY KEY,
|
||||
access_token TEXT,
|
||||
refresh_token TEXT,
|
||||
expires_at DATETIME,
|
||||
FOREIGN KEY (user_id) REFERENCES users(fitbit_user_id) ON DELETE CASCADE
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS kml_metadata (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
filename VARCHAR(255),
|
||||
user_id VARCHAR(255),
|
||||
distance DOUBLE,
|
||||
is_public BOOLEAN DEFAULT FALSE,
|
||||
uploaded_at DATETIME,
|
||||
UNIQUE KEY (user_id, filename),
|
||||
FOREIGN KEY (user_id) REFERENCES users(fitbit_user_id) ON DELETE CASCADE
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS kml_votes (
|
||||
kml_id INT,
|
||||
user_id VARCHAR(255),
|
||||
vote_value INT,
|
||||
PRIMARY KEY (kml_id, user_id),
|
||||
FOREIGN KEY (kml_id) REFERENCES kml_metadata(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (user_id) REFERENCES users(fitbit_user_id) ON DELETE CASCADE
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS trips (
|
||||
user_id VARCHAR(255) PRIMARY KEY,
|
||||
start_date VARCHAR(10),
|
||||
start_time DATETIME,
|
||||
start_day_initial_steps INT,
|
||||
previous_total_steps INT,
|
||||
target_total_steps INT,
|
||||
last_sync_time DATETIME,
|
||||
next_sync_time DATETIME,
|
||||
FOREIGN KEY (user_id) REFERENCES users(fitbit_user_id) ON DELETE CASCADE
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS daily_steps (
|
||||
user_id VARCHAR(255),
|
||||
date VARCHAR(10),
|
||||
steps INT,
|
||||
PRIMARY KEY (user_id, date),
|
||||
FOREIGN KEY (user_id) REFERENCES users(fitbit_user_id) ON DELETE CASCADE
|
||||
)`,
|
||||
}
|
||||
|
||||
for _, query := range queries {
|
||||
if _, err := db.Exec(query); err != nil {
|
||||
log.Fatalf("Error creating table: %v\nQuery: %s", err, query)
|
||||
}
|
||||
}
|
||||
log.Println("Database tables initialized")
|
||||
}
|
||||
Reference in New Issue
Block a user