diff --git a/Gemfile b/Gemfile index f48284828..5dd03e203 100644 --- a/Gemfile +++ b/Gemfile @@ -89,6 +89,7 @@ gem 'underscore-rails' gem 'wicked_pdf' gem 'wkhtmltopdf-heroku', '2.12.5' +gem 'aws-sdk-lambda' gem 'aws-sdk-rails' gem 'aws-sdk-s3' gem 'delayed_job_active_record' diff --git a/Gemfile.lock b/Gemfile.lock index fd29d714a..b2a998df6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -137,6 +137,9 @@ GEM aws-sdk-kms (1.41.0) aws-sdk-core (~> 3, >= 3.109.0) aws-sigv4 (~> 1.1) + aws-sdk-lambda (1.57.0) + aws-sdk-core (~> 3, >= 3.109.0) + aws-sigv4 (~> 1.1) aws-sdk-rails (3.6.0) aws-record (~> 2) aws-sdk-ses (~> 1) @@ -634,6 +637,7 @@ DEPENDENCIES auto_strip_attributes (~> 2.1) autosize-rails awesome_print + aws-sdk-lambda aws-sdk-rails aws-sdk-s3 base62 diff --git a/app/controllers/label_templates_controller.rb b/app/controllers/label_templates_controller.rb index ed31f3b88..fa660ddef 100644 --- a/app/controllers/label_templates_controller.rb +++ b/app/controllers/label_templates_controller.rb @@ -4,10 +4,10 @@ class LabelTemplatesController < ApplicationController include InputSanitizeHelper before_action :check_feature_enabled - before_action :check_view_permissions, only: %i(index datatable) + before_action :check_view_permissions, except: %i(create duplicate set_default delete update) before_action :check_manage_permissions, only: %i(create duplicate set_default delete update) before_action :load_label_templates, only: %i(index datatable) - before_action :load_label_template, only: %i(show set_default update) + before_action :load_label_template, only: %i(show set_default update zpl_preview) layout 'fluid' @@ -89,6 +89,17 @@ class LabelTemplatesController < ApplicationController render json: LabelTemplates::TagService.new(current_team).tags end + def zpl_preview + service = LabelTemplatesPreviewService.new(@label_template.content, current_user, {}) + payload = service.generate_zpl_preview! + + if service.error.blank? + render json: { base64_preview: payload.string } + else + render json: { error: I18n.t('errors.general') }, status: :unprocessable_entity + end + end + private def check_feature_enabled diff --git a/app/services/label_templates_preview_service.rb b/app/services/label_templates_preview_service.rb new file mode 100644 index 000000000..81a4c4610 --- /dev/null +++ b/app/services/label_templates_preview_service.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class LabelTemplatesPreviewService + extend Service + + attr_reader :error, :preview + + def initialize(zpl, user, params) + @zpl = zpl + @user = user + @params = params + end + + def generate_zpl_preview! + client = Aws::Lambda::Client.new(region: ENV['AWS_REGION']) + resp = client.invoke( + function_name: 'BinaryKitsZplViewer', + invocation_type: 'RequestResponse', + log_type: 'Tail', + payload: "{ \"content\": #{@zpl.to_json} }" + ) + + if resp.function_error.nil? + @preview = resp.payload + else + @error = resp.function_error + end + end +end