file-system/internal/api/validators/file_validators.go
向宁 b5df6445e5 refactor: commit all pending file_system changes
- Restructure handlers into file_commands/file_queries/file_handlers
- Add gRPC auth client, JWT middleware, rate limiting, request ID
- Add common utilities: logger, sanitizer, s3_errors
- Add unit tests for config, mediator, auth, request_id, sanitize
- Add proto definitions and generated code
- Remove old web UI pages
- Add .dockerignore and .env.example
2026-05-17 22:20:02 +08:00

98 lines
3.2 KiB
Go

package validators
import (
"rag/file-system/internal/api/requests"
"rag/file-system/internal/common"
)
type FileValidator struct{}
func NewFileValidator() *FileValidator {
return &FileValidator{}
}
func (v *FileValidator) ValidateListFiles(req *requests.ListFilesRequest) error {
if req.BucketName == "" {
return common.NewBusinessException("Bucket name is required")
}
if err := common.SanitizeBucketName(req.BucketName); err != nil {
return err
}
if req.MaxKeys <= 0 {
req.MaxKeys = 20
}
if req.MaxKeys > 1000 {
req.MaxKeys = 1000
}
return nil
}
func (v *FileValidator) ValidatePreview(req *requests.GetFilePreviewRequest) error {
if req.BucketName == "" || req.ObjectKey == "" {
return common.NewBusinessException("Bucket name and Object key are required")
}
return common.SanitizeObjectKey(req.ObjectKey)
}
func (v *FileValidator) ValidateGetContent(req *requests.GetFileContentRequest) error {
if req.BucketName == "" || req.ObjectKey == "" {
return common.NewBusinessException("Bucket name and Object key are required")
}
return common.SanitizeObjectKey(req.ObjectKey)
}
func (v *FileValidator) ValidateInitMultipart(req *requests.InitMultipartRequest) error {
if req.BucketName == "" || req.ObjectKey == "" {
return common.NewBusinessException("Bucket name and Object key are required")
}
return common.SanitizeObjectKey(req.ObjectKey)
}
func (v *FileValidator) ValidateUploadPart(req *requests.UploadPartRequest) error {
if req.BucketName == "" || req.ObjectKey == "" || req.UploadId == "" || req.PartNumber <= 0 || req.File == nil {
return common.NewBusinessException("Missing required fields for upload part")
}
return common.SanitizeObjectKey(req.ObjectKey)
}
func (v *FileValidator) ValidateCompleteMultipart(req *requests.CompleteMultipartRequest) error {
if req.BucketName == "" || req.ObjectKey == "" || req.UploadId == "" || len(req.Parts) == 0 {
return common.NewBusinessException("Missing required fields for completion")
}
return common.SanitizeObjectKey(req.ObjectKey)
}
func (v *FileValidator) ValidateDeleteFile(req *requests.DeleteFileRequest) error {
if req.BucketName == "" || req.ObjectKey == "" {
return common.NewBusinessException("Bucket name and Object key are required")
}
return common.SanitizeObjectKey(req.ObjectKey)
}
func (v *FileValidator) ValidateAbortMultipart(req *requests.AbortMultipartRequest) error {
if req.BucketName == "" || req.ObjectKey == "" || req.UploadId == "" {
return common.NewBusinessException("Bucket name, Object key, and Upload ID are required")
}
return common.SanitizeObjectKey(req.ObjectKey)
}
func (v *FileValidator) ValidateDownload(req *requests.DownloadFileRequest) error {
if req.BucketName == "" {
return common.NewBusinessException("Bucket name cannot be empty")
}
if req.ObjectKey == "" {
return common.NewBusinessException("Object key cannot be empty")
}
return common.SanitizeObjectKey(req.ObjectKey)
}
func (v *FileValidator) ValidateUpload(req *requests.UploadFileRequest) error {
if req.BucketName == "" {
return common.NewBusinessException("Bucket name cannot be empty")
}
if req.File == nil {
return common.NewBusinessException("File is required")
}
return common.SanitizeObjectKey(req.File.Filename)
}