package main import ( "context" "librapi/server" "librapi/services" "os" "os/signal" "strconv" "sync" "github.com/rs/zerolog" "github.com/rs/zerolog/log" "librapi/handlers/login" "librapi/handlers/upload" ) const DefaultPort = 8585 var APIPort = sync.OnceValue[int](func() int { port, err := strconv.Atoi(os.Getenv("API_PORT")) if err != nil { log.Debug().Err(err).Msg("unable to load API_PORT") return DefaultPort } return port }) func initLogger() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnix log.Logger = log.With().Caller().Logger().Output(zerolog.ConsoleWriter{Out: os.Stderr}) } func main() { initLogger() ctx, fnCancel := signal.NotifyContext(context.Background(), os.Kill, os.Interrupt) defer fnCancel() sessionStore := services.NewSessionStore(ctx) srv := server.NewServer( ctx, APIPort(), server.NewHandler("/upload", upload.Handler(sessionStore)), server.NewHandler("/login", login.Handler(sessionStore)), ) srv.Serve() <-srv.Done() <-sessionStore.Done() }