Sha256: 882b4955cd189086f3da622a593489b3f9c609d989653c8475662ad6aed68016

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

module Mihari
  module Endpoints
    class Tags < Grape::API
      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 :name, type: String
        end
        delete "/:name" do
          extend Dry::Monads[:result, :try]

          name = params[:name].to_s

          result = Try do
            Mihari::Models::Tag.where(name: name).destroy_all
          end.to_result

          if result.success?
            status 204
            return present({ message: "" }, with: Entities::Message)
          end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mihari-5.6.2 lib/mihari/web/endpoints/tags.rb