Sha256: 58433d868a7f06db1e1f6e0e94ccdb8b8ebeb55fb3cb19103cb61b3d6db4e116

Contents?: true

Size: 1.43 KB

Versions: 2

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

module Mihari
  module Web
    module Endpoints
      #
      # Tag API endpoint
      #
      class Tags < Grape::API
        class TagDestroyer < Service
          #
          # @param [Integer] id
          #
          def call(id)
            Mihari::Models::Tag.find(id).destroy
          end
        end

        namespace :tags do
          desc "Get tags", {
            is_array: true,
            success: Entities::Tags,
            summary: "Get tags"
          }
          get "/" do
            tags = Mihari::Models::Tag.distinct.pluck(:name)
            present({ tags: tags }, with: Entities::Tags)
          end

          desc "Delete a tag", {
            success: Entities::Message,
            failure: [{ code: 404, message: "Not found", model: Entities::Message }],
            summary: "Delete a tag"
          }
          params do
            requires :id, type: Integer
          end
          delete "/:id" do
            id = params[:id].to_i
            result = TagDestroyer.result(id)
            if result.success?
              status 204
              return present({ message: "" }, with: Entities::Message)
            end

            failure = result.failure
            case failure
            when ActiveRecord::RecordNotFound
              error!({ message: "ID:#{id} is not found" }, 404)
            end
            raise failure
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mihari-5.7.2 lib/mihari/web/endpoints/tags.rb
mihari-5.7.1 lib/mihari/web/endpoints/tags.rb