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) }