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
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))
|
|
}
|