Refactor conversion of files JSON for download
Tries fixing CODEOCEAN-RQ
This commit is contained in:

committed by
Sebastian Serth

parent
365f32930d
commit
5f21f99f55
@ -7,26 +7,33 @@ module FileConversion
|
|||||||
# Return an empty list of files and directories if the files_json is nil
|
# Return an empty list of files and directories if the files_json is nil
|
||||||
return [[], []] if files_json.blank?
|
return [[], []] if files_json.blank?
|
||||||
|
|
||||||
all_file_types = FileType.all
|
|
||||||
directories = []
|
directories = []
|
||||||
files = files_json['files'].filter_map do |file|
|
files = files_json['files'].filter_map do |file|
|
||||||
# entryType: `-` describes a regular file, `d` a directory. See `info ls` for others
|
# entryType: `-` describes a regular file, `d` a directory. See `info ls` for others
|
||||||
directories.push(file['name']) if file['entryType'] == 'd'
|
directories.push(file['name']) if file['entryType'] == 'd'
|
||||||
next unless file['entryType'] == '-'
|
next unless file['entryType'] == '-'
|
||||||
|
|
||||||
extension = File.extname(file['name'])
|
file['extension'] = File.extname(file['name'])
|
||||||
name = File.basename(file['name'], extension)
|
file
|
||||||
path = File.dirname(file['name']).sub(%r{^(?>\./|\.)}, '').presence
|
end
|
||||||
file_type = all_file_types.detect {|ft| ft.file_extension == extension } || FileType.new(file_extension: extension)
|
|
||||||
|
# Optimize SQL queries: We are first fetching all required file types from the database.
|
||||||
|
# Then, we store them in a hash, so that we can access them by using their file extension.
|
||||||
|
file_types = {}
|
||||||
|
FileType.where(file_extension: files.pluck('extension')).each do |file_type|
|
||||||
|
file_types[file_type.file_extension] = file_type
|
||||||
|
end
|
||||||
|
|
||||||
|
files.map! do |file|
|
||||||
CodeOcean::File.new(
|
CodeOcean::File.new(
|
||||||
name:,
|
name: File.basename(file['name'], file['extension']),
|
||||||
path:,
|
path: File.dirname(file['name']).sub(%r{^(?>\./|\.)}, '').presence,
|
||||||
size: file['size'],
|
size: file['size'],
|
||||||
owner: file['owner'],
|
owner: file['owner'],
|
||||||
group: file['group'],
|
group: file['group'],
|
||||||
permissions: file['permissions'],
|
permissions: file['permissions'],
|
||||||
updated_at: file['modificationTime'],
|
updated_at: file['modificationTime'],
|
||||||
file_type:
|
file_type: file_types[file['extension']] || FileType.new(file_extension: file['extension'])
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
[augment_files_for_download(files), directories]
|
[augment_files_for_download(files), directories]
|
||||||
|
Reference in New Issue
Block a user