feat(handler): add upload, file, and folder handlers with routes

Add UploadHandler (5 endpoints), FileHandler (4 endpoints), FolderHandler (4 endpoints) with Gin route registration in server.go.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
dailz
2026-04-15 09:23:17 +08:00
parent f0847d3978
commit 2298e92516
7 changed files with 1376 additions and 1 deletions

View File

@@ -34,8 +34,30 @@ type ApplicationHandler interface {
SubmitApplication(c *gin.Context)
}
type UploadHandler interface {
InitUpload(c *gin.Context)
GetUploadStatus(c *gin.Context)
UploadChunk(c *gin.Context)
CompleteUpload(c *gin.Context)
CancelUpload(c *gin.Context)
}
type FileHandler interface {
ListFiles(c *gin.Context)
GetFile(c *gin.Context)
DownloadFile(c *gin.Context)
DeleteFile(c *gin.Context)
}
type FolderHandler interface {
CreateFolder(c *gin.Context)
GetFolder(c *gin.Context)
ListFolders(c *gin.Context)
DeleteFolder(c *gin.Context)
}
// NewRouter creates a Gin engine with all API v1 routes registered with real handlers.
func NewRouter(jobH JobHandler, clusterH ClusterHandler, appH ApplicationHandler, logger *zap.Logger) *gin.Engine {
func NewRouter(jobH JobHandler, clusterH ClusterHandler, appH ApplicationHandler, uploadH UploadHandler, fileH FileHandler, folderH FolderHandler, logger *zap.Logger) *gin.Engine {
gin.SetMode(gin.ReleaseMode)
r := gin.New()
r.Use(gin.Recovery())
@@ -68,6 +90,32 @@ func NewRouter(jobH JobHandler, clusterH ClusterHandler, appH ApplicationHandler
apps.DELETE("/:id", appH.DeleteApplication)
apps.POST("/:id/submit", appH.SubmitApplication)
files := v1.Group("/files")
if uploadH != nil {
uploads := files.Group("/uploads")
uploads.POST("", uploadH.InitUpload)
uploads.GET("/:id", uploadH.GetUploadStatus)
uploads.PUT("/:id/chunks/:index", uploadH.UploadChunk)
uploads.POST("/:id/complete", uploadH.CompleteUpload)
uploads.DELETE("/:id", uploadH.CancelUpload)
}
if fileH != nil {
files.GET("", fileH.ListFiles)
files.GET("/:id", fileH.GetFile)
files.GET("/:id/download", fileH.DownloadFile)
files.DELETE("/:id", fileH.DeleteFile)
}
if folderH != nil {
folders := files.Group("/folders")
folders.POST("", folderH.CreateFolder)
folders.GET("", folderH.ListFolders)
folders.GET("/:id", folderH.GetFolder)
folders.DELETE("/:id", folderH.DeleteFolder)
}
return r
}
@@ -104,6 +152,26 @@ func registerPlaceholderRoutes(v1 *gin.RouterGroup) {
apps.PUT("/:id", notImplemented)
apps.DELETE("/:id", notImplemented)
apps.POST("/:id/submit", notImplemented)
files := v1.Group("/files")
uploads := files.Group("/uploads")
uploads.POST("", notImplemented)
uploads.GET("/:id", notImplemented)
uploads.PUT("/:id/chunks/:index", notImplemented)
uploads.POST("/:id/complete", notImplemented)
uploads.DELETE("/:id", notImplemented)
files.GET("", notImplemented)
files.GET("/:id", notImplemented)
files.GET("/:id/download", notImplemented)
files.DELETE("/:id", notImplemented)
folders := files.Group("/folders")
folders.POST("", notImplemented)
folders.GET("", notImplemented)
folders.GET("/:id", notImplemented)
folders.DELETE("/:id", notImplemented)
}
func notImplemented(c *gin.Context) {