feat: v1
This commit is contained in:
64
backend/internal/handlers/router.go
Normal file
64
backend/internal/handlers/router.go
Normal file
@ -0,0 +1,64 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
"github.com/go-chi/cors"
|
||||
)
|
||||
|
||||
// Router construit le routeur HTTP complet de l'API.
|
||||
// corsOrigin est l'origine autorisée pour les requêtes cross-origin.
|
||||
func (a *API) Router(corsOrigin string) http.Handler {
|
||||
r := chi.NewRouter()
|
||||
|
||||
r.Use(middleware.RealIP)
|
||||
r.Use(middleware.Logger)
|
||||
r.Use(middleware.Recoverer)
|
||||
|
||||
// Configuration CORS pour l'origine du frontend.
|
||||
allowedOrigins := []string{"*"}
|
||||
if corsOrigin != "" {
|
||||
allowedOrigins = []string{corsOrigin}
|
||||
}
|
||||
r.Use(cors.Handler(cors.Options{
|
||||
AllowedOrigins: allowedOrigins,
|
||||
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
|
||||
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type"},
|
||||
ExposedHeaders: []string{"Content-Disposition"},
|
||||
AllowCredentials: true,
|
||||
MaxAge: 300,
|
||||
}))
|
||||
|
||||
r.Route("/api", func(r chi.Router) {
|
||||
r.Get("/health", a.Health)
|
||||
|
||||
// Authentification (routes publiques).
|
||||
r.Post("/auth/register", a.Register)
|
||||
r.Post("/auth/login", a.Login)
|
||||
r.Post("/auth/refresh", a.Refresh)
|
||||
|
||||
// Routes protégées.
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Use(a.RequireAuth)
|
||||
|
||||
r.Post("/auth/logout", a.Logout)
|
||||
r.Get("/me", a.Me)
|
||||
|
||||
r.Get("/documents", a.ListDocuments)
|
||||
r.Post("/documents", a.CreateDocument)
|
||||
r.Get("/documents/{id}", a.GetDocument)
|
||||
r.Get("/documents/{id}/file", a.GetDocumentFile)
|
||||
r.Put("/documents/{id}", a.UpdateDocument)
|
||||
r.Delete("/documents/{id}", a.DeleteDocument)
|
||||
})
|
||||
})
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
// Health répond au healthcheck.
|
||||
func (a *API) Health(w http.ResponseWriter, r *http.Request) {
|
||||
writeJSON(w, http.StatusOK, map[string]string{"status": "ok"})
|
||||
}
|
||||
Reference in New Issue
Block a user