Add file management API with local storage backend

- Implement FileHandler with CRUD operations for files/directories
- Add FileService with business logic and SHA-256 hashing
- Create LocalStorage backend for filesystem persistence
- Add database repository with pagination and name uniqueness
  constraints
- Configure max upload size in storage settings
- Include comprehensive tests for all layers
This commit is contained in:
2026-06-24 14:08:57 +08:00
parent eaa31efd64
commit e2af482cc9
17 changed files with 1815 additions and 15 deletions
+11
View File
@@ -11,6 +11,7 @@ import (
func setupProtectedRoutes(rg *gin.RouterGroup, webApp *app.WebApp) {
jwtSecret := []byte(webApp.Config.JWT.Secret)
accountHandler := handler.NewAccountHandler(webApp.AuthService)
fileHandler := handler.NewFileHandler(webApp.FileService)
rg.Use(middleware.AuthRequired(jwtSecret))
@@ -25,4 +26,14 @@ func setupProtectedRoutes(rg *gin.RouterGroup, webApp *app.WebApp) {
passkeys.DELETE("/:id", accountHandler.RevokePasskey)
}
}
files := rg.Group("/files")
{
files.GET("", fileHandler.List)
files.POST("", fileHandler.Upload)
files.GET("/:id", fileHandler.Get)
files.GET("/:id/content", fileHandler.Download)
files.PUT("/:id", fileHandler.Update)
files.DELETE("/:id", fileHandler.Delete)
}
}
+1 -1
View File
@@ -21,7 +21,7 @@ func TestVersionRoute(t *testing.T) {
},
}
authService := service.NewAuthService(nil, nil, nil, nil, 15*time.Minute, 7*24*time.Hour)
webApp := app.NewWebApp(cfg, nil, nil, nil, nil, nil, authService)
webApp := app.NewWebApp(cfg, nil, nil, nil, nil, nil, authService, nil, nil)
router := NewRouter(webApp)
req := httptest.NewRequest(http.MethodGet, "/api/v1/version", nil)