Skip to content
Snippets Groups Projects
issues.rb 3.29 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
    
    Alex Denisov's avatar
    Alex Denisov committed
            attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id]
    
    Alex Denisov's avatar
    Alex Denisov committed
            attrs[:label_list] = params[:labels] if params[:labels].present?
            @issue = user_project.issues.new attrs
    
    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
    
              not_found!
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            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
    
    
    Alex Denisov's avatar
    Alex Denisov committed
            attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id, :closed]
    
    Alex Denisov's avatar
    Alex Denisov committed
            attrs[:label_list] = params[:labels] if params[:labels].present?
            if @issue.update_attributes attrs
    
              present @issue, with: Entities::Issue
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            else
    
              not_found!
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            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
    
            not_allowed!
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          end
        end
      end
    end