[Live][POC] Defining interface for files uploader #404
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is an attempt to define interface(s) that would allow fully working file upload system and allow high level of customization. The idea comes from discussion in #395 and is by no means finished. We need to start somewhere :)
I was trying to achieve interface with parameters that can be easily defined with attributes and then utilized by library, so that developers won't need to use uploaders directly in most common cases. The problem with
File
serialization might be one of the more difficult topics to explore.Regarding initial requirements from the discussion by @tgalopin
Definitely doable by implementing service (temporary and final storage can differ).
As easy as possible - by defining set of validator constraints (that can easily come from attributes) and utilizing Validator exception
This one needs some discussion as I have no clear vision here. We could go with another interface or focus on a single library (Glide or directly Intervention maybe?).
I think temporary files names should be unique, but implementation may choose whatever solution suits them.
TODOs / problems
File
class and custom storage. For example - with Flysystem extendedFile
object needs reference to theFilesystemOperator
, which makes it not serializable. We might need intermediate object and method to (de-)hydrate it.