package main import ( "context" "librapi/server" "librapi/services" "os" "os/signal" "github.com/rs/zerolog" "github.com/rs/zerolog/log" "librapi/handlers/home" "librapi/handlers/login" "librapi/handlers/upload" ) 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() auth := services.NewAuthentication(ctx) bs := services.NewBookStore(services.GetEnv().GetDir()) srv := server.NewServer( ctx, services.GetEnv().GetPort(), server.NewHandler(home.URL, home.Handler()), server.NewHandler(upload.URL, upload.Handler(auth, bs)), server.NewHandler(login.URL, login.Handler(auth)), ) srv.Serve() <-srv.Done() <-auth.Done() <-bs.Done() }