@@ -6,6 +6,7 @@ def format_discussion(discussion)
6
6
{
7
7
id : discussion . id ,
8
8
title : discussion . title ,
9
+ slug : discussion . slug ,
9
10
content : discussion . content ,
10
11
total_comments : discussion . total_comments ,
11
12
created_at : discussion . created_at . to_fs ( :ymd_hms ) ,
@@ -71,10 +72,10 @@ def format_comment(comment)
71
72
72
73
desc 'Get a discussion'
73
74
params do
74
- requires :id , type : Integer , desc : 'Discussion id '
75
+ requires :id , type : String , desc : 'Discussion :id/:slug '
75
76
end
76
77
get ':id' do
77
- discussion = Discussion . find ( params [ :id ] )
78
+ discussion = Discussion . friendly . find ( params [ :id ] )
78
79
if discussion
79
80
status 200
80
81
{
@@ -93,10 +94,11 @@ def format_comment(comment)
93
94
security : [ access_token : { } ]
94
95
params do
95
96
requires :content , type : String , desc : 'Discussion content' , allow_blank : false
97
+ requires :title , type : String , desc : 'Discussion title' , allow_blank : false
96
98
end
97
99
post do
98
100
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 ] )
100
102
if discussion . save
101
103
status 200
102
104
{
@@ -115,12 +117,12 @@ def format_comment(comment)
115
117
desc 'Update a discussion' ,
116
118
security : [ access_token : { } ]
117
119
params do
118
- requires :id , type : Integer , desc : 'Discussion id '
120
+ requires :id , type : String , desc : 'Discussion :id/:slug '
119
121
requires :content , type : String , desc : 'Discussion content' , allow_blank : false
120
122
end
121
123
put ':id' do
122
124
authenticate_user!
123
- discussion = current_user . discussions . find_by ( id : params [ :id ] )
125
+ discussion = current_user . discussions . friendly . find ( params [ :id ] )
124
126
if discussion . update ( content : params [ :content ] )
125
127
status 200
126
128
{
@@ -139,11 +141,15 @@ def format_comment(comment)
139
141
desc 'Reject a discussion' ,
140
142
security : [ access_token : { } ]
141
143
params do
142
- requires :id , type : Integer , desc : 'Discussion id '
144
+ requires :id , type : String , desc : 'Discussion :id/:slug '
143
145
end
144
146
put ':id/reject' do
145
147
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
147
153
if discussion . update ( status : 'rejected' )
148
154
status 200
149
155
{
@@ -162,12 +168,17 @@ def format_comment(comment)
162
168
desc 'Delete a discussion' ,
163
169
security : [ access_token : { } ]
164
170
params do
165
- requires :id , type : Integer , desc : 'Discussion id '
171
+ requires :id , type : String , desc : 'Discussion :id/:slug '
166
172
end
167
173
delete ':id' do
168
174
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
171
182
status 200
172
183
{
173
184
success : true ,
@@ -177,17 +188,17 @@ def format_comment(comment)
177
188
status 400
178
189
{
179
190
success : false ,
180
- errors : discussion . errors . full_messages
191
+ error : 'Discussion not found'
181
192
}
182
193
end
183
194
end
184
195
185
196
desc 'Get all comments of a discussion'
186
197
params do
187
- requires :id , type : Integer , desc : 'Discussion id '
198
+ requires :id , type : String , desc : 'Discussion :id/:slug '
188
199
end
189
200
get ':id/comments' do
190
- discussion = Discussion . approved . find_by ( id : params [ :id ] )
201
+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
191
202
if discussion
192
203
status 200
193
204
{
@@ -206,12 +217,12 @@ def format_comment(comment)
206
217
desc 'Create a comment of a discussion' ,
207
218
security : [ access_token : { } ]
208
219
params do
209
- requires :id , type : Integer , desc : 'Discussion id '
220
+ requires :id , type : String , desc : 'Discussion :id/:slug '
210
221
requires :content , type : String , desc : 'Comment content' , allow_blank : false
211
222
end
212
223
post ':id/comments' do
213
224
authenticate_user!
214
- discussion = Discussion . approved . find_by ( id : params [ :id ] )
225
+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
215
226
if discussion
216
227
comment = discussion . comments . new ( user : current_user , content : params [ :content ] , status : 'approved' )
217
228
if comment . save
@@ -239,13 +250,13 @@ def format_comment(comment)
239
250
desc 'Update a comment of a discussion' ,
240
251
security : [ access_token : { } ]
241
252
params do
242
- requires :id , type : Integer , desc : 'Discussion id '
253
+ requires :id , type : String , desc : 'Discussion :id/:slug '
243
254
requires :comment_id , type : Integer , desc : 'Comment id'
244
255
requires :content , type : String , desc : 'Comment content' , allow_blank : false
245
256
end
246
257
put ':id/comments/:comment_id' do
247
258
authenticate_user!
248
- discussion = Discussion . approved . find_by ( id : params [ :id ] )
259
+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
249
260
if discussion
250
261
comment = discussion . comments . find_by ( id : params [ :comment_id ] )
251
262
if comment . update ( content : params [ :content ] )
@@ -273,12 +284,12 @@ def format_comment(comment)
273
284
desc 'Reject a comment of a discussion' ,
274
285
security : [ access_token : { } ]
275
286
params do
276
- requires :id , type : Integer , desc : 'Discussion id '
287
+ requires :id , type : String , desc : 'Discussion :id/:slug '
277
288
requires :comment_id , type : Integer , desc : 'Comment id'
278
289
end
279
290
put ':id/comments/:comment_id/reject' do
280
291
authenticate_user!
281
- discussion = Discussion . approved . find_by ( id : params [ :id ] )
292
+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
282
293
if discussion
283
294
comment = discussion . comments . approved . find_by ( id : params [ :comment_id ] ) . update ( status : 'rejected' )
284
295
if comment
@@ -306,12 +317,12 @@ def format_comment(comment)
306
317
desc 'Delete a comment of a discussion' ,
307
318
security : [ access_token : { } ]
308
319
params do
309
- requires :id , type : Integer , desc : 'Discussion id '
320
+ requires :id , type : String , desc : 'Discussion :id/:slug '
310
321
requires :comment_id , type : Integer , desc : 'Comment id'
311
322
end
312
323
delete ':id/comments/:comment_id' do
313
324
authenticate_user!
314
- discussion = Discussion . approved . find_by ( id : params [ :id ] )
325
+ discussion = Discussion . approved . friendly . find ( params [ :id ] )
315
326
if discussion
316
327
comment = discussion . comments . find_by ( id : params [ :comment_id ] )
317
328
if comment . destroy
0 commit comments