Skip to content
Snippets Groups Projects
issues.rb 3.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nihad Abbasov's avatar
    Nihad Abbasov committed
      # 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:
    
          #   id (required) - The ID 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:
    
          #   id (required) - The ID 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:
    
          #   id (required) - The ID 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
    
            required_attributes! [:title]
            attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id]
            attrs[:label_list] = params[:labels] if params[:labels].present?
            issue = ::Issues::CreateService.new(user_project, current_user, attrs).execute
    
            if issue.valid?
              present issue, with: Entities::Issue
            else
              not_found!
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            end
          end
    
          # Update an existing issue
          #
          # Parameters:
    
          #   id (required) - The ID 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
    
          #   state_event (optional) - The state event of an issue (close|reopen)
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          # Example Request:
          #   PUT /projects/:id/issues/:issue_id
          put ":id/issues/:issue_id" do
    
            set_current_user_for_thread do
              @issue = user_project.issues.find(params[:issue_id])
              authorize! :modify_issue, @issue
    
    randx's avatar
    randx committed
    
    
              attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id, :state_event]
              attrs[:label_list] = params[:labels] if params[:labels].present?
    
              if @issue.update_attributes attrs
                present @issue, with: Entities::Issue
              else
                not_found!
              end
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
            end
          end
    
    
          # Delete a project issue (deprecated)
    
    Nihad Abbasov's avatar
    Nihad Abbasov committed
          #
          # Parameters:
    
          #   id (required) - The ID 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