Scaffold full-stack volunteer scheduling application
Go backend with domain-based packages (volunteer, schedule, timeoff, checkin, notification), SQLite storage, JWT auth, and chi router. React TypeScript frontend with routing, auth context, and pages for all core features. Multi-stage Dockerfile and docker-compose included. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
43
cmd/server/main.go
Normal file
43
cmd/server/main.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"git.unsupervised.ca/walkies/internal/db"
|
||||
"git.unsupervised.ca/walkies/internal/server"
|
||||
)
|
||||
|
||||
func main() {
|
||||
dsn := getenv("DATABASE_DSN", "walkies.db")
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user