milestones.rb 2.71 KB
Newer Older
Robert Speicher's avatar
Robert Speicher committed
1 2 3 4 5 6 7 8 9 10 11 12 13
module Gitlab
  # Milestones API
  class Milestones < Grape::API
    before { authenticate! }

    resource :projects do
      # Get a list of project milestones
      #
      # Parameters:
      #   id (required) - The ID or code name of a project
      # Example Request:
      #   GET /projects/:id/milestones
      get ":id/milestones" do
Nihad Abbasov's avatar
Nihad Abbasov committed
14
        present paginate(user_project.milestones), with: Entities::Milestone
Robert Speicher's avatar
Robert Speicher committed
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
      end

      # Get a single project milestone
      #
      # Parameters:
      #   id (required) - The ID or code name of a project
      #   milestone_id (required) - The ID of a project milestone
      # Example Request:
      #   GET /projects/:id/milestones/:milestone_id
      get ":id/milestones/:milestone_id" do
        @milestone = user_project.milestones.find(params[:milestone_id])
        present @milestone, with: Entities::Milestone
      end

      # Create a new project milestone
      #
      # Parameters:
      #   id (required) - The ID or code name of the project
      #   title (required) - The title of the milestone
      #   description (optional) - The description of the milestone
      #   due_date (optional) - The due date of the milestone
      # Example Request:
      #   POST /projects/:id/milestones
      post ":id/milestones" do
        @milestone = user_project.milestones.new(
          title: params[:title],
          description: params[:description],
42
          due_date: params[:due_date]
Robert Speicher's avatar
Robert Speicher committed
43 44 45 46 47 48 49 50 51 52 53 54 55
        )

        if @milestone.save
          present @milestone, with: Entities::Milestone
        else
          error!({'message' => '404 Not found'}, 404)
        end
      end

      # Update an existing project milestone
      #
      # Parameters:
      #   id (required) - The ID or code name of a project
56
      #   milestone_id (required) - The ID of a project milestone
Robert Speicher's avatar
Robert Speicher committed
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
      #   title (optional) - The title of a milestone
      #   description (optional) - The description of a milestone
      #   due_date (optional) - The due date of a milestone
      #   closed (optional) - The status of the milestone
      # Example Request:
      #   PUT /projects/:id/milestones/:milestone_id
      put ":id/milestones/:milestone_id" do
        @milestone = user_project.milestones.find(params[:milestone_id])
        parameters = {
          title: (params[:title] || @milestone.title),
          description: (params[:description] || @milestone.description),
          due_date: (params[:due_date] || @milestone.due_date),
          closed: (params[:closed] || @milestone.closed)
        }

        if @milestone.update_attributes(parameters)
          present @milestone, with: Entities::Milestone
        else
          error!({'message' => '404 Not found'}, 404)
        end
      end
    end
  end
end