diff --git a/app/controllers/label_templates_controller.rb b/app/controllers/label_templates_controller.rb index 547059d13..ed31f3b88 100644 --- a/app/controllers/label_templates_controller.rb +++ b/app/controllers/label_templates_controller.rb @@ -85,6 +85,10 @@ class LabelTemplatesController < ApplicationController render json: { error: I18n.t('errors.general') }, status: :unprocessable_entity end + def template_tags + render json: LabelTemplates::TagService.new(current_team).tags + end + private def check_feature_enabled diff --git a/app/services/label_templates/tag_service.rb b/app/services/label_templates/tag_service.rb new file mode 100644 index 000000000..69e587621 --- /dev/null +++ b/app/services/label_templates/tag_service.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +module LabelTemplates + class TagService + DEFAULT_COLUMNS = [ + { key: :item_id, tag: '{{ITEM_ID}}' }, + { key: :added_by, tag: '{{ADDED_BY}}' }, + { key: :added_on, tag: '{{ADDED_ON}}' }, + { key: :name, tag: '{{NAME}}' } + ].freeze + + def initialize(team) + @team = team + end + + def tags + { + default: DEFAULT_COLUMNS, + common: repository_tags.pluck(:tags).reduce(:&), + repository: repository_tags + } + end + + private + + def repository_tags + @repository_tags ||= + Repository.includes(:repository_columns).active.where(team: @team).map do |repository| + { + repository_id: repository.id, + repository_name: repository.name, + tags: repository.repository_columns.pluck(:name).map do |name| + { + key: name, + tag: "{{COLUMN_[#{name}]}}" + } + end + } + end + end + end +end diff --git a/config/routes.rb b/config/routes.rb index e0466f694..6574984b9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -53,6 +53,7 @@ Rails.application.routes.draw do post :duplicate post :delete get :datatable + get :template_tags end end