50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/kazier/backend/pkg/api"
|
|
)
|
|
|
|
// RegisterRoutes wires the full /api/v1 surface (public + protected).
|
|
// Public: /health, /devices, /auth/login, /shares/links/:token (résolution de
|
|
// lien anonyme). Everything else requires a user bearer token (subject =
|
|
// user_id, claim = device_id, cf. docs/api-v1.md §2).
|
|
func RegisterRoutes(r *gin.Engine) {
|
|
public := r.Group("/api/v1")
|
|
{
|
|
public.GET("/health", Health)
|
|
public.POST("/devices", DevicesRegister)
|
|
public.POST("/auth/login", AuthLogin)
|
|
public.GET("/shares/links/:token", ShareLinkGet)
|
|
}
|
|
|
|
protected := r.Group("/api/v1")
|
|
protected.Use(RequireAuth)
|
|
{
|
|
protected.GET("/files", FilesList)
|
|
protected.GET("/files/search", FilesSearch)
|
|
protected.GET("/files/:id", FilesGet)
|
|
protected.GET("/files/:id/ocr", FilesGetOcr)
|
|
protected.DELETE("/files/:id", FilesDelete)
|
|
protected.GET("/files/folders", FoldersList)
|
|
protected.POST("/files/upload", FilesUpload)
|
|
|
|
protected.GET("/users/resolve", ResolveUser)
|
|
protected.PATCH("/users/me/password", ChangePassword)
|
|
|
|
protected.POST("/ocr/jobs", OcrJobsCreate)
|
|
protected.GET("/ocr/jobs/:id", OcrJobsGet)
|
|
|
|
protected.POST("/sync/ops", SyncOpsPush)
|
|
protected.GET("/sync/permissions", SyncPermissionsGet)
|
|
}
|
|
|
|
// Route inconnue → enveloppe d'erreur du contrat (jamais de HTML).
|
|
r.NoRoute(func(c *gin.Context) {
|
|
api.Error(c, http.StatusNotFound, "NOT_FOUND", "route not found")
|
|
})
|
|
}
|