-
Notifications
You must be signed in to change notification settings - Fork 426
Expand file tree
/
Copy pathcourse_map_api.rb
More file actions
107 lines (98 loc) · 3.36 KB
/
course_map_api.rb
File metadata and controls
107 lines (98 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
require 'grape'
module Courseflow
class CourseMapApi < Grape::API
format :json
helpers AuthenticationHelpers
helpers AuthorisationHelpers
before do
authenticated?
end
desc "Get course map via user ID"
params do
requires :userId, type: Integer, desc: "User ID"
end
get '/coursemap/userId/:userId' do
course_map = CourseMap.find_by(userId: params[:userId]) || CourseMap.find_by(userId: nil)
if course_map
present course_map, with: Entities::CourseMapEntity
else
error!({ error: "Course map for user #{params[:userId]} not found" }, 404)
end
end
desc "Get course map via course ID"
params do
requires :courseId, type: Integer, desc: "Course ID"
end
get '/coursemap/courseId/:courseId' do
course_map = CourseMap.where(courseId: params[:courseId])
if course_map
present course_map, with: Entities::CourseMapEntity
else
error!({ error: "Course map #{params[:courseId]} not found" }, 404)
end
end
desc "Add a new course map"
params do
requires :userId, type: Integer
requires :courseId, type: Integer
end
post '/coursemap' do
unless authorise? current_user, User, :handle_courseflow
error!({ error: 'Not authorised to add a new course map' }, 403)
end
course_map = CourseMap.new(params)
if course_map.save
present course_map, with: Entities::CourseMapEntity
else
error!({ error: "Failed to create course map", details: coursemap.errors.full_messages }, 400)
end
end
desc "Update an existing course map via its ID"
params do
requires :courseMapId, type: Integer, desc: "Course map ID"
requires :userId, type: Integer
requires :courseId, type: Integer
end
put '/coursemap/courseMapId/:courseMapId' do
unless authorise? current_user, User, :handle_courseflow
error!({ error: 'Not authorised to update course maps' }, 403)
end
course_map = CourseMap.find(params[:courseMapId])
if course_map.update(params.except(:courseMapId))
present course_map, with: Entities::CourseMapEntity
else
error!({ error: "Failed to update course map", details: course_map.errors.full_messages }, 400)
end
end
desc "Delete all course maps via its associated course map ID"
params do
requires :courseMapId, type: Integer, desc: "Course map ID"
end
delete '/coursemap/courseMapId/:courseMapId' do
unless authorise? current_user, User, :handle_courseflow
error!({ error: 'Not authorised to delete course maps' }, 403)
end
course_map = CourseMap.find(params[:courseMapId])
if course_map
course_map.destroy
else
error!({ error: "Course map #{params[:courseMapId]} not found" }, 404)
end
end
desc "Delete all course maps via its associated user ID"
params do
requires :userId, type: Integer, desc: "User ID"
end
delete '/coursemap/userId/:userId' do
unless authorise? current_user, User, :handle_courseflow
error!({ error: 'Not authorised to delete course maps' }, 403)
end
course_map = CourseMap.find(params[:userId])
if course_map
course_map.destroy
else
error!({ error: "Course map #{params[:userId]} not found" }, 404)
end
end
end
end