OSDN Git Service

Refactor API classes. So api classes like Gitlab::Issues become API::Issues
[wvm/gitlab.git] / lib / api / milestones.rb
1 module API
2   # Milestones API
3   class Milestones < Grape::API
4     before { authenticate! }
5
6     resource :projects do
7       # Get a list of project milestones
8       #
9       # Parameters:
10       #   id (required) - The ID of a project
11       # Example Request:
12       #   GET /projects/:id/milestones
13       get ":id/milestones" do
14         authorize! :read_milestone, user_project
15
16         present paginate(user_project.milestones), with: Entities::Milestone
17       end
18
19       # Get a single project milestone
20       #
21       # Parameters:
22       #   id (required) - The ID of a project
23       #   milestone_id (required) - The ID of a project milestone
24       # Example Request:
25       #   GET /projects/:id/milestones/:milestone_id
26       get ":id/milestones/:milestone_id" do
27         authorize! :read_milestone, user_project
28
29         @milestone = user_project.milestones.find(params[:milestone_id])
30         present @milestone, with: Entities::Milestone
31       end
32
33       # Create a new project milestone
34       #
35       # Parameters:
36       #   id (required) - The ID of the project
37       #   title (required) - The title of the milestone
38       #   description (optional) - The description of the milestone
39       #   due_date (optional) - The due date of the milestone
40       # Example Request:
41       #   POST /projects/:id/milestones
42       post ":id/milestones" do
43         authorize! :admin_milestone, user_project
44         required_attributes! [:title]
45
46         attrs = attributes_for_keys [:title, :description, :due_date]
47         @milestone = user_project.milestones.new attrs
48         if @milestone.save
49           present @milestone, with: Entities::Milestone
50         else
51           not_found!
52         end
53       end
54
55       # Update an existing project milestone
56       #
57       # Parameters:
58       #   id (required) - The ID of a project
59       #   milestone_id (required) - The ID of a project milestone
60       #   title (optional) - The title of a milestone
61       #   description (optional) - The description of a milestone
62       #   due_date (optional) - The due date of a milestone
63       #   state (optional) - The status of the milestone (close|activate)
64       # Example Request:
65       #   PUT /projects/:id/milestones/:milestone_id
66       put ":id/milestones/:milestone_id" do
67         authorize! :admin_milestone, user_project
68
69         @milestone = user_project.milestones.find(params[:milestone_id])
70         attrs = attributes_for_keys [:title, :description, :due_date, :state_event]
71         if @milestone.update_attributes attrs
72           present @milestone, with: Entities::Milestone
73         else
74           not_found!
75         end
76       end
77     end
78   end
79 end