mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-11 17:51:39 -05:00
59 lines
1.4 KiB
Ruby
59 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ImportsController < ApplicationController
|
|
before_action :authenticate_user!
|
|
before_action :set_import, only: %i[show destroy]
|
|
|
|
def index
|
|
@imports = current_user.imports
|
|
end
|
|
|
|
def show; end
|
|
|
|
def new
|
|
@import = Import.new
|
|
end
|
|
|
|
def create
|
|
files = import_params[:files].reject(&:blank?)
|
|
|
|
import_ids = files.map do |file|
|
|
import = current_user.imports.create(
|
|
name: file.original_filename,
|
|
source: params[:import][:source]
|
|
)
|
|
|
|
file = File.read(file)
|
|
|
|
raw_data = params[:import][:source] == 'gpx' ? Hash.from_xml(file) : JSON.parse(file)
|
|
|
|
import.update(raw_data:)
|
|
import.id
|
|
end
|
|
|
|
import_ids.each { ImportJob.perform_later(current_user.id, _1) }
|
|
|
|
redirect_to imports_url, notice: "#{files.size} files are queued to be imported in background", status: :see_other
|
|
rescue StandardError => e
|
|
Import.where(user: current_user, name: files.map(&:original_filename)).destroy_all
|
|
|
|
flash.now[:error] = e.message
|
|
|
|
redirect_to new_import_path, notice: e.message, status: :unprocessable_entity
|
|
end
|
|
|
|
def destroy
|
|
@import.destroy!
|
|
redirect_to imports_url, notice: 'Import was successfully destroyed.', status: :see_other
|
|
end
|
|
|
|
private
|
|
|
|
def set_import
|
|
@import = Import.find(params[:id])
|
|
end
|
|
|
|
def import_params
|
|
params.require(:import).permit(:source, files: [])
|
|
end
|
|
end
|