69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package initializers
|
|
|
|
import (
|
|
"api/src/rt/admin"
|
|
"api/src/rt/auth"
|
|
"api/src/rt/prf"
|
|
"api/src/rt/srch"
|
|
"log/slog"
|
|
"os"
|
|
"time"
|
|
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
"github.com/go-chi/httprate"
|
|
)
|
|
|
|
var Done = make(chan bool)
|
|
|
|
func InitChiRouting() {
|
|
slog.Info("Init routing")
|
|
r := chi.NewRouter()
|
|
|
|
// middlewares
|
|
r.Use(middleware.Logger)
|
|
r.Use(middleware.Timeout(60 * time.Second))
|
|
r.Use(middleware.RequestID)
|
|
r.Use(middleware.CleanPath)
|
|
r.Use(middleware.Heartbeat("/ping"))
|
|
r.Use(middleware.NoCache)
|
|
r.Use(middleware.Recoverer)
|
|
r.NotFound(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(404)
|
|
w.Write([]byte("route does not exist"))
|
|
})
|
|
r.MethodNotAllowed(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(405)
|
|
w.Write([]byte("method is not valid"))
|
|
})
|
|
|
|
// public Routes
|
|
r.Group(func(r chi.Router) {
|
|
r.Post("/signup", auth.Register) // register
|
|
r.With(httprate.Limit(5, 1*time.Minute)).Post("/signin", auth.Login) // signin with rate limiter
|
|
r.Get("/search", srch.Search)
|
|
})
|
|
|
|
// Private Routes
|
|
// Require Authentication
|
|
r.Group(func(r chi.Router) {
|
|
r.Use(auth.AuthMiddleware)
|
|
r.Get("/profile", prf.Profile)
|
|
r.Route("/admin", func(r chi.Router) {
|
|
r.Use(auth.AuthAdminMiddleware)
|
|
r.Get("/allUsersAdm", admin.GetAllUser) // all users get
|
|
})
|
|
})
|
|
|
|
// up server on os.Getenv("SERVER_PORT") port on gorutin
|
|
go func() {
|
|
defer close(Done)
|
|
err := http.ListenAndServe(":"+os.Getenv("SERVER_PORT"), r)
|
|
if err != nil {
|
|
slog.Error("Can't start server: ", "error", err)
|
|
}
|
|
}()
|
|
}
|