3 class Milestones < Grape::API
4 before { authenticate! }
7 # Get a list of project milestones
10 # id (required) - The ID of a project
12 # GET /projects/:id/milestones
13 get ":id/milestones" do
14 authorize! :read_milestone, user_project
16 present paginate(user_project.milestones), with: Entities::Milestone
19 # Get a single project milestone
22 # id (required) - The ID of a project
23 # milestone_id (required) - The ID of a project milestone
25 # GET /projects/:id/milestones/:milestone_id
26 get ":id/milestones/:milestone_id" do
27 authorize! :read_milestone, user_project
29 @milestone = user_project.milestones.find(params[:milestone_id])
30 present @milestone, with: Entities::Milestone
33 # Create a new project milestone
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
41 # POST /projects/:id/milestones
42 post ":id/milestones" do
43 authorize! :admin_milestone, user_project
44 required_attributes! [:title]
46 attrs = attributes_for_keys [:title, :description, :due_date]
47 @milestone = user_project.milestones.new attrs
49 present @milestone, with: Entities::Milestone
55 # Update an existing project milestone
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)
65 # PUT /projects/:id/milestones/:milestone_id
66 put ":id/milestones/:milestone_id" do
67 authorize! :admin_milestone, user_project
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