51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"git.unsupervised.ca/walkies/internal/db"
|
|
"git.unsupervised.ca/walkies/internal/server"
|
|
)
|
|
|
|
func main() {
|
|
// Build MySQL DSN from environment variables
|
|
dbHost := getenv("DB_HOST", "localhost")
|
|
dbPort := getenv("DB_PORT", "3306")
|
|
dbUser := getenv("DB_USER", "root")
|
|
dbPassword := getenv("DB_PASSWORD", "")
|
|
dbName := getenv("DB_NAME", "walkies")
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true", dbUser, dbPassword, dbHost, dbPort, dbName)
|
|
|
|
jwtSecret := getenv("JWT_SECRET", "change-me-in-production")
|
|
staticDir := getenv("STATIC_DIR", "./web/dist")
|
|
port := getenv("PORT", "8080")
|
|
|
|
database, err := db.Open(dsn)
|
|
if err != nil {
|
|
log.Fatalf("open database: %v", err)
|
|
}
|
|
defer database.Close()
|
|
|
|
if err := db.Migrate(database); err != nil {
|
|
log.Fatalf("migrate database: %v", err)
|
|
}
|
|
|
|
handler := server.New(database, jwtSecret, staticDir)
|
|
|
|
addr := fmt.Sprintf(":%s", port)
|
|
log.Printf("server listening on %s", addr)
|
|
if err := http.ListenAndServe(addr, handler); err != nil {
|
|
log.Fatalf("server error: %v", err)
|
|
}
|
|
}
|
|
|
|
func getenv(key, fallback string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return fallback
|
|
}
|