axiom/main.go
2025-06-30 16:23:12 -06:00

70 lines
1.3 KiB
Go

package main
import (
"log"
"net/http"
"os"
"os/signal"
"syscall"
"git.tavo.one/tavo/axiom/database"
"git.tavo.one/tavo/axiom/handlers"
"git.tavo.one/tavo/axiom/storage"
)
func init() {
needed := []string{
"PRODUCTION",
"PORT",
"APP_DATA_DIR",
"DB_CONNDVR",
"DB_CONNSTR",
}
for _, v := range needed {
if os.Getenv(v) == "" {
log.Fatalf("missing environment varialbe: %s", v)
}
}
}
func main() {
db, err := database.Init(os.Getenv("DB_CONNDVR"), os.Getenv("DB_CONNSTR"))
if err != nil {
log.Fatalf("failed to initialize database: %v", err)
}
defer db.Close()
s3, err := storage.New(os.Getenv("APP_DATA_DIR"), 4<<20)
if err != nil {
log.Fatalf("failed to initialize storage: %v", err)
}
handlerConfig := handlers.Config{
Production: os.Getenv("PRODUCTION") == "1",
Views: nil,
DB: db,
S3: s3,
}
handler := handlers.New(handlerConfig)
router := http.NewServeMux()
router.HandleFunc("GET /", handler.SampleIndex)
stop := make(chan os.Signal, 1)
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
port := os.Getenv("PORT")
go func() {
log.Printf("starting on :%s...", port)
if err := http.ListenAndServe(":"+port, router); err != nil {
log.Fatalf("fatal: failed to start on port %s: %v", port, err)
}
}()
<-stop
log.Printf("shutting down...")
}