package api import ( "github.com/gin-gonic/gin" "veza-backend-api/internal/handlers" "veza-backend-api/internal/services" ) // setupCloudRoutes configure les routes Cloud Storage (v0.501 C1, v0.802 versioning/sharing) func (r *APIRouter) setupCloudRoutes(router *gin.RouterGroup) { if r.config == nil || r.config.AuthMiddleware == nil { return } cloudService := services.NewCloudService(r.db.GormDB, r.logger, r.config.S3StorageService) cloudHandler := handlers.NewCloudHandler(cloudService, r.logger) // Public route: shared file access (no auth) router.GET("/cloud/shared/:token", cloudHandler.GetSharedFile) cloud := router.Group("/cloud") cloud.Use(r.config.AuthMiddleware.RequireAuth()) r.applyCSRFProtection(cloud) { cloud.GET("/folders", cloudHandler.ListFolders) cloud.POST("/folders", cloudHandler.CreateFolder) cloud.PUT("/folders/:id", cloudHandler.RenameFolder) cloud.DELETE("/folders/:id", cloudHandler.DeleteFolder) cloud.GET("/files", cloudHandler.ListFiles) cloud.POST("/files", cloudHandler.UploadFile) cloud.GET("/files/:id", cloudHandler.GetFile) cloud.DELETE("/files/:id", cloudHandler.DeleteFile) cloud.GET("/files/:id/stream", cloudHandler.StreamFile) cloud.POST("/files/:id/publish", cloudHandler.PublishAsTrack) cloud.GET("/files/:id/versions", cloudHandler.ListVersions) cloud.POST("/files/:id/versions", cloudHandler.CreateVersion) cloud.POST("/files/:id/restore/:version", cloudHandler.RestoreVersion) cloud.POST("/files/:id/share", cloudHandler.ShareFile) cloud.GET("/quota", cloudHandler.GetQuota) } }