func main()

in src/middleware/main.go [40:95]


func main() {
	conn := os.Getenv("db_conn")
	user := os.Getenv("db_user")
	host := os.Getenv("db_host")
	name := os.Getenv("db_name")
	pass := os.Getenv("db_pass")
	redisHost := os.Getenv("redis_host")
	redisPort := os.Getenv("redis_port")
	port := os.Getenv("PORT")

	if err := storage.Init(user, pass, host, name, conn, redisHost, redisPort, true); err != nil {
		log.Fatalf("cannot initialize storage systems: %s", err)
	}
	defer storage.sqlstorage.Close()

	signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)

	headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
	originsOk := handlers.AllowedOrigins([]string{"*"})
	methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS", "DELETE"})

	router := mux.NewRouter().StrictSlash(true)
	router.HandleFunc("/healthz", healthHandler).Methods(http.MethodGet)
	router.HandleFunc("/api/v1/todo", listHandler).Methods(http.MethodGet, http.MethodOptions)
	router.HandleFunc("/api/v1/todo", createHandler).Methods(http.MethodPost)
	router.HandleFunc("/api/v1/todo/{id}", readHandler).Methods(http.MethodGet)
	router.HandleFunc("/api/v1/todo/{id}", deleteHandler).Methods(http.MethodDelete)
	router.HandleFunc("/api/v1/todo/{id}", updateHandler).Methods(http.MethodPost, http.MethodPut)

	srv := &http.Server{
		Addr:    ":" + port,
		Handler: httpLog(handlers.CORS(originsOk, headersOk, methodsOk)(router)),
	}

	go func() {
		log.Printf("listening on port %s", port)
		if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			log.Fatal(err)
		}
	}()

	sig := <-signalChan
	log.Printf("%s signal caught", sig)

	// Timeout if waiting for connections to return idle.
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	storage.sqlstorage.Close()

	// Gracefully shutdown the server by waiting on existing requests (except websockets).
	if err := srv.Shutdown(ctx); err != nil {
		log.Printf("server shutdown failed: %+v", err)
	}
	log.Print("server exited")
}