Overly complicated inheritance for the Uploader classes.
Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.
Uploaders
Currently we have determine the location of uploads in the Uploaders using inheritance & overriding methods:
-
GitlabUploader->systemfolder -
AttachmentUploader > GitlabUploader-> model class/mounted_as folder -
AvatarUploader > GitlabUploader-> model class/mounted_as folder -
FileUploader > GitlabUploader-> namespace folder -
PersonalFileUploader > FileUploader, ->systemfolder
Furthermore in EE:
ObjectStoreUploader > CarrierWave::Uploader::BaseArtifactUploader > ObjectStoreUploaderLfsObjectUploader > ObjectStoreUploader
Who are using a confusing implementation of .file_storage? & #file_storage?
Maybe it would be better to build these classes using a for each of the upload types UploadToSystemDir, UploadToNamespaceDir, UploadToSharedDir & UploadToObjectStorage?
Controllers
(maybe handle in separate issue - check if possible)
The uploads are handled by 2 controllers (Projects::UploadsController, UploadsController and one more - Groups::UploadsController will probably be introduced by https://gitlab.com/gitlab-org/gitlab-ee/issues/3938 ). All these controllers include UploadsActions concern while Projects and Group are very similar.