Skip to content
Snippets Groups Projects
issues.rb 3.68 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nihad Abbasov's avatar
    Nihad Abbasov committed
    module Gitlab
      # Issues API
      class Issues < Grape::API
        before { authenticate! }
    
        resource :issues do
          # Get currently authenticated user's issues
          #
          # Example Request:
          #   GET /issues
          get do
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            present paginate(current_user.issues), with: Entities::Issue
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          end
        end
    
        resource :projects do
          # Get a list of project issues
          #
          # Parameters:
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   id (required) - The ID or code name of a project
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          # Example Request:
          #   GET /projects/:id/issues
          get ":id/issues" do
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            present paginate(user_project.issues), with: Entities::Issue
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          end
    
          # Get a single project issue
          #
          # Parameters:
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   id (required) - The ID or code name of a project
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   issue_id (required) - The ID of a project issue
          # Example Request:
          #   GET /projects/:id/issues/:issue_id
          get ":id/issues/:issue_id" do
            @issue = user_project.issues.find(params[:issue_id])
    
            present @issue, with: Entities::Issue
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          end
    
          # Create a new project issue
          #
          # Parameters:
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   id (required) - The ID or code name of a project
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   title (required) - The title of an issue
          #   description (optional) - The description of an issue
          #   assignee_id (optional) - The ID of a user to assign issue
          #   milestone_id (optional) - The ID of a milestone to assign issue
          #   labels (optional) - The labels of an issue
          # Example Request:
          #   POST /projects/:id/issues
          post ":id/issues" do
            @issue = user_project.issues.new(
    
              title: params[:title],
              description: params[:description],
              assignee_id: params[:assignee_id],
              milestone_id: params[:milestone_id],
              label_list: params[:labels]
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            )
            @issue.author = current_user
    
            if @issue.save
    
              present @issue, with: Entities::Issue
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            else
              error!({'message' => '404 Not found'}, 404)
            end
          end
    
          # Update an existing issue
          #
          # Parameters:
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   id (required) - The ID or code name of a project
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   issue_id (required) - The ID of a project issue
          #   title (optional) - The title of an issue
          #   description (optional) - The description of an issue
          #   assignee_id (optional) - The ID of a user to assign issue
          #   milestone_id (optional) - The ID of a milestone to assign issue
          #   labels (optional) - The labels of an issue
          #   closed (optional) - The state of an issue (0 = false, 1 = true)
          # Example Request:
          #   PUT /projects/:id/issues/:issue_id
          put ":id/issues/:issue_id" do
            @issue = user_project.issues.find(params[:issue_id])
    
    randx's avatar
    randx committed
            authorize! :modify_issue, @issue
    
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            parameters = {
    
              title: (params[:title] || @issue.title),
              description: (params[:description] || @issue.description),
              assignee_id: (params[:assignee_id] || @issue.assignee_id),
              milestone_id: (params[:milestone_id] || @issue.milestone_id),
              label_list: (params[:labels] || @issue.label_list),
              closed: (params[:closed] || @issue.closed)
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            }
    
            if @issue.update_attributes(parameters)
    
              present @issue, with: Entities::Issue
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            else
              error!({'message' => '404 Not found'}, 404)
            end
          end
    
    
          # Delete a project issue (deprecated)
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #
          # Parameters:
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   id (required) - The ID or code name of a project
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #   issue_id (required) - The ID of a project issue
          # Example Request:
          #   DELETE /projects/:id/issues/:issue_id
          delete ":id/issues/:issue_id" do
    
            error!({'message' => 'method not allowed'}, 405)
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          end
        end
      end
    end