From 132dc658b00a33b934cc99e307838faca759aa38 Mon Sep 17 00:00:00 2001 From: Eugene Burmakin Date: Mon, 28 Jul 2025 23:09:33 +0200 Subject: [PATCH] Fix importing process --- app/controllers/settings/users_controller.rb | 23 ++++++++++++++++++-- app/views/devise/registrations/edit.html.erb | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/controllers/settings/users_controller.rb b/app/controllers/settings/users_controller.rb index 3dbe94bc..b38690aa 100644 --- a/app/controllers/settings/users_controller.rb +++ b/app/controllers/settings/users_controller.rb @@ -54,7 +54,7 @@ class Settings::UsersController < ApplicationController end def import - files_params = params.dig(:user_import, :files) + files_params = params.dig(:import, :files) raw_files = Array(files_params).reject(&:blank?) if raw_files.empty? @@ -102,8 +102,12 @@ class Settings::UsersController < ApplicationController 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( - name: blob.filename.to_s, + name: unique_name, source: :user_data_archive ) @@ -114,6 +118,21 @@ class Settings::UsersController < ApplicationController import 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) unless blob.content_type == 'application/zip' || blob.content_type == 'application/x-zip-compressed' || diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb index 4e0cec52..dbd18ed5 100644 --- a/app/views/devise/registrations/edit.html.erb +++ b/app/views/devise/registrations/edit.html.erb @@ -83,10 +83,10 @@ turbo: false } do |f| %>
- <%= f.label "user_import[files]", class: 'label' do %> + <%= f.label "import[files]", class: 'label' do %> Select ZIP archive <% end %> - <%= f.file_field "user_import[files][]", + <%= f.file_field "import[files][]", multiple: false, direct_upload: true, accept: '.zip',