class <%= model.pluralize.camelcase %>Controller

include Swagger::Blocks
<%- model_name = "#{model}".split("::").last || model -%>

swagger_path "/<%= model_name.pluralize.underscore %>" do
  operation :get do
    key :summary, "Index <%= model_name.pluralize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    response 200 do
      key :description, "List of all <%= model_name.pluralize.underscore %>"
      schema do
        key :"$ref", :<%= model_name.singularize.underscore %>_index_response
      end
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 404 do
      key :description, "Not Found"
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

swagger_path "/<%= model_name.pluralize.underscore %>/{id}" do
  operation :get do
    key :summary, "Show <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    response 200 do
      key :description, "Show <%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :<%= model_name.singularize.underscore %>_show_response
      end
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 404 do
      key :description, "Not Found"
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

swagger_path "/<%= model_name.pluralize.underscore %>" do
  operation :post do
    key :summary, "Create <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :<%= model_name.singularize.underscore %>_params
      key :in, :body
      key :required, true
      schema do
        key :"$ref", :create_<%= model_name.singularize.underscore %>
      end
    end
    response 201 do
      key :description, "<%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :<%= model_name.singularize.underscore %>_create_response
      end
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 403 do
      key :description, "Forbidden"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

swagger_path "/<%= model_name.pluralize.underscore %>/{id}" do
  operation :put do
    key :summary, "Update <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    parameter do
      key :name, :<%= model_name.singularize.underscore %>_params
      key :in, :body
      key :required, true
      schema do
        key :"$ref", :update_<%= model_name.singularize.underscore %>
      end
    end
    response 200 do
      key :description, "<%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :<%= model_name.singularize.underscore %>_create_response
      end
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 202 do
      key :description, "Accepted"
    end
    response 204 do
      key :description, "No Content"
    end
    response 403 do
      key :description, "Forbidden"
    end
    response 404 do
      key :description, "Not Found"
    end
    response 409 do
      key :description, "Conflict"
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

swagger_path "/<%= model_name.pluralize.underscore %>/{id}" do
  operation :patch do
    key :summary, "Update <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    parameter do
      key :name, :<%= model_name.singularize.underscore %>_params
      key :in, :body
      key :required, true
      schema do
        key :"$ref", :update_<%= model_name.singularize.underscore %>
      end
    end
    response 200 do
      key :description, "<%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :<%= model_name.singularize.underscore %>_create_response
      end
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 202 do
      key :description, "Accepted"
    end
    response 204 do
      key :description, "No Content"
    end
    response 403 do
      key :description, "Forbidden"
    end
    response 404 do
      key :description, "Not Found"
    end
    response 409 do
      key :description, "Conflict"
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

swagger_path "/<%= model_name.pluralize.underscore %>/{id}" do
  operation :delete do
    key :summary, "Delete <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    response 200 do
      key :description, "Ok"
    end
    response 202 do
      key :description, "Accepted"
    end
    response 204 do
      key :description, "No Content"
    end
    response 404 do
      key :description, "Not Found"
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

<%- relationships = “#{namespace}::#{model_name.camelcase}Resource”.constantize._relationships -%> <%- if relationships -%> <%- relationships.keys.each do |relationship| -%>

swagger_path "/<%= model_name.pluralize.underscore %>/{id}/<%= relationship %>" do
  operation :get do
    key :summary, "Show <%= relationship %> from <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    response 200 do
      key :description, "Show <%= relationship %> from <%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :show_<%= relationship %>_from_<%= model_name.singularize.underscore %>_response
      end
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 403 do
      key :description, "Forbidden"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
    response 404 do
      key :description, "Not Found"
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

swagger_path "/<%= model_name.pluralize.underscore %>/{id}/relationships/<%= relationship %>" do
  operation :get do
    key :summary, "Show <%= relationship %> from <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    response 200 do
      key :description, "Show <%= relationship %> from <%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :show_<%= relationship %>_from_<%= model_name.singularize.underscore %>_relation_response
      end
    end
    response 401 do
      key :description, "Unauthorized"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
    response 403 do
      key :description, "Forbidden"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

swagger_path "/<%= model_name.pluralize.underscore %>/{id}/relationships/<%= relationship %>" do
  operation :put do
    key :summary, "Update <%= relationship %> from <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    response 200 do
      key :description, "Update <%= relationship %> from <%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :update_<%= relationship %>_from_<%= model_name.singularize.underscore %>_relation_response
      end
    end
    response 202 do
      key :description, "Accepted"
    end
    response 204 do
      key :description, "No Content"
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 403 do
      key :description, "Forbidden"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

swagger_path "/<%= model_name.pluralize.underscore %>/{id}/relationships/<%= relationship %>" do
  operation :post do
    key :summary, "Update <%= relationship %> from <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    response 200 do
      key :description, "Update <%= relationship %> from <%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :update_<%= relationship %>_from_<%= model_name.singularize.underscore %>_relation_response
      end
    end
    response 202 do
      key :description, "Accepted"
    end
    response 204 do
      key :description, "No Content"
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 403 do
      key :description, "Forbidden"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

 swagger_path "/<%= model_name.pluralize.underscore %>/{id}/relationships/<%= relationship %>" do
  operation :delete do
    key :summary, "Delete <%= relationship %> from <%= model_name.singularize.underscore %>"
    key :produces, [
      "application/vnd.api+json"
    ]
    key :tags, [
      "<%= model_name.singularize.underscore %>"
    ]
    parameter do
      key :name, :id
      key :in, :path
      key :description, "id of <%= model_name.singularize.underscore %>"
      key :required, true
      key :type, :integer
    end
    response 200 do
      key :description, "Delete <%= relationship %> from <%= model_name.singularize.underscore %>"
      schema do
        key :"$ref", :delete_<%= relationship %>_from_<%= model_name.singularize.underscore %>_relation_response
      end
    end
    response 202 do
      key :description, "Accepted"
    end
    response 204 do
      key :description, "No Content"
    end
    response 401 do
      key :description, "Unauthorized"
    end
    response 404 do
      key :description, "Not Found"
    end
    response 403 do
      key :description, "Forbidden"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
    response :default do
      key :description, "Unexpected error"
      schema do 
        property :errors do
          property :status do
            key :type, :integer
          end
          property :source do
            key :type, :string
          end
          property :detail do
            key :type, :string
          end
        end
      end
    end
  end
end

<%- end -%> <%- end -%> end