You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.3 KiB

package main
import (
"log"
"net/http"
"time"
"git.vdhsn.com/adam/bodytrack/internal/handlers"
"git.vdhsn.com/adam/bodytrack/internal/services"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/kelseyhightower/envconfig"
)
type APIConfig struct {
Host string
JWT_Secret string
PG_Host string
PG_Username string
PG_Password string
}
func main() {
var cfg APIConfig
envconfig.MustProcess("bodytrack_api", &cfg)
services.InitJWT(cfg.JWT_Secret)
r := chi.NewRouter()
r.Use(middleware.Logger)
r.Use(middleware.Recoverer)
db, err := services.Connect(cfg.PG_Host, cfg.PG_Username, cfg.PG_Password)
if err != nil {
log.Fatal(err)
}
handlers := []handlers.ApiHandler{
handlers.UserHandler{Conn: db},
handlers.Stats{Conn: db},
}
r.Use(middleware.RequestID)
r.Use(middleware.RealIP)
r.Use(middleware.Timeout(60 * time.Second))
r.Use(func(h http.Handler) http.Handler {
return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
r.Header.Set("Content-Type", "application/json; utf-8")
h.ServeHTTP(rw, r)
})
})
r.Route("/v1/api/", func(inner chi.Router) {
for _, h := range handlers {
if err := h.Subscribe(inner); err != nil {
log.Fatal(err)
}
}
})
log.Fatal(http.ListenAndServe(":3000", r))
}