@@ -6,6 +6,7 @@ def format_discussion(discussion)
66 {
77 id : discussion . id ,
88 title : discussion . title ,
9+ slug : discussion . slug ,
910 content : discussion . content ,
1011 total_comments : discussion . total_comments ,
1112 created_at : discussion . created_at . to_fs ( :ymd_hms ) ,
@@ -71,10 +72,10 @@ def format_comment(comment)
7172
7273 desc 'Get a discussion'
7374 params do
74- requires :id , type : Integer , desc : 'Discussion id '
75+ requires :id , type : String , desc : 'Discussion :id/:slug '
7576 end
7677 get ':id' do
77- discussion = Discussion . find ( params [ :id ] )
78+ discussion = Discussion . friendly . find ( params [ :id ] )
7879 if discussion
7980 status 200
8081 {
@@ -93,10 +94,11 @@ def format_comment(comment)
9394 security : [ access_token : { } ]
9495 params do
9596 requires :content , type : String , desc : 'Discussion content' , allow_blank : false
97+ requires :title , type : String , desc : 'Discussion title' , allow_blank : false
9698 end
9799 post do
98100 authenticate_user!
99- discussion = current_user . discussions . new ( content : params [ :content ] , status : 'approved' )
101+ discussion = current_user . discussions . new ( content : params [ :content ] , status : 'approved' , title : params [ :title ] )
100102 if discussion . save
101103 status 200
102104 {
@@ -115,12 +117,12 @@ def format_comment(comment)
115117 desc 'Update a discussion' ,
116118 security : [ access_token : { } ]
117119 params do
118- requires :id , type : Integer , desc : 'Discussion id '
120+ requires :id , type : String , desc : 'Discussion :id/:slug '
119121 requires :content , type : String , desc : 'Discussion content' , allow_blank : false
120122 end
121123 put ':id' do
122124 authenticate_user!
123- discussion = current_user . discussions . find_by ( id : params [ :id ] )
125+ discussion = current_user . discussions . friendly . find ( params [ :id ] )
124126 if discussion . update ( content : params [ :content ] )
125127 status 200
126128 {
@@ -139,11 +141,15 @@ def format_comment(comment)
139141 desc 'Reject a discussion' ,
140142 security : [ access_token : { } ]
141143 params do
142- requires :id , type : Integer , desc : 'Discussion id '
144+ requires :id , type : String , desc : 'Discussion :id/:slug '
143145 end
144146 put ':id/reject' do
145147 authenticate_user!
146- discussion = current_user . discussions . approved . find_by ( id : params [ :id ] )
148+ if current_user . admin?
149+ discussion = Discussion . friendly . find ( params [ :id ] )
150+ else
151+ discussion = current_user . discussions . friendly . find ( params [ :id ] )
152+ end
147153 if discussion . update ( status : 'rejected' )
148154 status 200
149155 {
@@ -162,12 +168,17 @@ def format_comment(comment)
162168 desc 'Delete a discussion' ,
163169 security : [ access_token : { } ]
164170 params do
165- requires :id , type : Integer , desc : 'Discussion id '
171+ requires :id , type : String , desc : 'Discussion :id/:slug '
166172 end
167173 delete ':id' do
168174 authenticate_user!
169- discussion = current_user . discussions . find_by ( id : params [ :id ] )
170- if discussion . destroy
175+ if current_user . admin?
176+ discussion = Discussion . friendly . find_by ( id : params [ :id ] ) || Discussion . friendly . find_by ( slug : params [ :id ] )
177+ else
178+ discussion = current_user . discussions . friendly . find_by ( id : params [ :id ] ) || current_user . discussions . friendly . find_by ( slug : params [ :id ] )
179+ end
180+ if discussion
181+ discussion . destroy
171182 status 200
172183 {
173184 success : true ,
@@ -177,17 +188,17 @@ def format_comment(comment)
177188 status 400
178189 {
179190 success : false ,
180- errors : discussion . errors . full_messages
191+ error : 'Discussion not found'
181192 }
182193 end
183194 end
184195
185196 desc 'Get all comments of a discussion'
186197 params do
187- requires :id , type : Integer , desc : 'Discussion id '
198+ requires :id , type : String , desc : 'Discussion :id/:slug '
188199 end
189200 get ':id/comments' do
190- discussion = Discussion . approved . find_by ( id : params [ :id ] )
201+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
191202 if discussion
192203 status 200
193204 {
@@ -206,12 +217,12 @@ def format_comment(comment)
206217 desc 'Create a comment of a discussion' ,
207218 security : [ access_token : { } ]
208219 params do
209- requires :id , type : Integer , desc : 'Discussion id '
220+ requires :id , type : String , desc : 'Discussion :id/:slug '
210221 requires :content , type : String , desc : 'Comment content' , allow_blank : false
211222 end
212223 post ':id/comments' do
213224 authenticate_user!
214- discussion = Discussion . approved . find_by ( id : params [ :id ] )
225+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
215226 if discussion
216227 comment = discussion . comments . new ( user : current_user , content : params [ :content ] , status : 'approved' )
217228 if comment . save
@@ -239,13 +250,13 @@ def format_comment(comment)
239250 desc 'Update a comment of a discussion' ,
240251 security : [ access_token : { } ]
241252 params do
242- requires :id , type : Integer , desc : 'Discussion id '
253+ requires :id , type : String , desc : 'Discussion :id/:slug '
243254 requires :comment_id , type : Integer , desc : 'Comment id'
244255 requires :content , type : String , desc : 'Comment content' , allow_blank : false
245256 end
246257 put ':id/comments/:comment_id' do
247258 authenticate_user!
248- discussion = Discussion . approved . find_by ( id : params [ :id ] )
259+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
249260 if discussion
250261 comment = discussion . comments . find_by ( id : params [ :comment_id ] )
251262 if comment . update ( content : params [ :content ] )
@@ -273,12 +284,12 @@ def format_comment(comment)
273284 desc 'Reject a comment of a discussion' ,
274285 security : [ access_token : { } ]
275286 params do
276- requires :id , type : Integer , desc : 'Discussion id '
287+ requires :id , type : String , desc : 'Discussion :id/:slug '
277288 requires :comment_id , type : Integer , desc : 'Comment id'
278289 end
279290 put ':id/comments/:comment_id/reject' do
280291 authenticate_user!
281- discussion = Discussion . approved . find_by ( id : params [ :id ] )
292+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
282293 if discussion
283294 comment = discussion . comments . approved . find_by ( id : params [ :comment_id ] ) . update ( status : 'rejected' )
284295 if comment
@@ -306,12 +317,12 @@ def format_comment(comment)
306317 desc 'Delete a comment of a discussion' ,
307318 security : [ access_token : { } ]
308319 params do
309- requires :id , type : Integer , desc : 'Discussion id '
320+ requires :id , type : String , desc : 'Discussion :id/:slug '
310321 requires :comment_id , type : Integer , desc : 'Comment id'
311322 end
312323 delete ':id/comments/:comment_id' do
313324 authenticate_user!
314- discussion = Discussion . approved . find_by ( id : params [ :id ] )
325+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
315326 if discussion
316327 comment = discussion . comments . find_by ( id : params [ :comment_id ] )
317328 if comment . destroy
0 commit comments