Fix importing process

This commit is contained in:
Eugene Burmakin 2025-07-28 23:09:33 +02:00
parent 0f7e66e136
commit 132dc658b0
2 changed files with 23 additions and 4 deletions

View file

@ -54,7 +54,7 @@ class Settings::UsersController < ApplicationController
end end
def import def import
files_params = params.dig(:user_import, :files) files_params = params.dig(:import, :files)
raw_files = Array(files_params).reject(&:blank?) raw_files = Array(files_params).reject(&:blank?)
if raw_files.empty? if raw_files.empty?
@ -102,8 +102,12 @@ class Settings::UsersController < ApplicationController
validate_archive_blob(blob) validate_archive_blob(blob)
# Generate unique name if duplicate exists
base_name = blob.filename.to_s
unique_name = generate_unique_import_name(base_name)
import = current_user.imports.build( import = current_user.imports.build(
name: blob.filename.to_s, name: unique_name,
source: :user_data_archive source: :user_data_archive
) )
@ -114,6 +118,21 @@ class Settings::UsersController < ApplicationController
import import
end end
def generate_unique_import_name(base_name)
return base_name unless current_user.imports.exists?(name: base_name)
# Extract extension
name_without_ext = File.basename(base_name, File.extname(base_name))
extension = File.extname(base_name)
counter = 1
loop do
candidate_name = "#{name_without_ext}_#{counter}#{extension}"
break candidate_name unless current_user.imports.exists?(name: candidate_name)
counter += 1
end
end
def validate_archive_blob(blob) def validate_archive_blob(blob)
unless blob.content_type == 'application/zip' || unless blob.content_type == 'application/zip' ||
blob.content_type == 'application/x-zip-compressed' || blob.content_type == 'application/x-zip-compressed' ||

View file

@ -83,10 +83,10 @@
turbo: false turbo: false
} do |f| %> } do |f| %>
<div class="form-control"> <div class="form-control">
<%= f.label "user_import[files]", class: 'label' do %> <%= f.label "import[files]", class: 'label' do %>
<span class="label-text">Select ZIP archive</span> <span class="label-text">Select ZIP archive</span>
<% end %> <% end %>
<%= f.file_field "user_import[files][]", <%= f.file_field "import[files][]",
multiple: false, multiple: false,
direct_upload: true, direct_upload: true,
accept: '.zip', accept: '.zip',