Files
walkies/cmd/server/main.go
James Griffin 87caf478df Conform Go code to project conventions
- Propagate context.Context through all exported store/service methods
  that perform I/O; use QueryContext/ExecContext/QueryRowContext throughout
- Add package-level sentinel errors (ErrNotFound, ErrAlreadyCheckedIn,
  ErrNotCheckedIn) and replace nil,nil returns with explicit errors
- Update handlers to use errors.Is() instead of nil checks, with correct
  HTTP status codes per error type
- Fix SQLite datetime('now') → MySQL NOW() in volunteer, schedule,
  timeoff, and checkin stores
- Refactor db.Migrate to execute schema statements individually (MySQL
  driver does not support multi-statement Exec)
- Fix import grouping in handler files (stdlib, external, internal)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 16:20:23 -04:00

52 lines
1.2 KiB
Go

package main
import (
"context"
"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(context.Background(), 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
}