author | ymh <ymh.work@gmail.com> |
Fri, 08 Sep 2017 15:03:29 +0200 | |
changeset 543 | aaaf9b0b09f6 |
parent 537 | d2e6ee099125 |
permissions | -rw-r--r-- |
173 | 1 |
// mirage/serializers/blog-post.js |
2 |
import BaseSerializer from './application'; |
|
229
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
3 |
import _ from 'lodash'; |
324
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
4 |
import utils from './utils'; |
173 | 5 |
|
6 |
export default BaseSerializer.extend({ |
|
348
a5e8d037304b
Solve language display problem in result playlist. problem was in the mirage serializer definition
ymh <ymh.work@gmail.com>
parents:
327
diff
changeset
|
7 |
attrs: ['id', 'title', 'languages', 'url', 'issued', 'modified', 'publishers', 'mediaArray', 'transcript'], |
229
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
8 |
|
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
9 |
serialize(response, request) { |
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
10 |
// This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend) |
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
11 |
let json = BaseSerializer.prototype.serialize.apply(this, arguments); |
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
12 |
|
537
d2e6ee099125
upgrade ember + laravel + make everything work
ymh <ymh.work@gmail.com>
parents:
414
diff
changeset
|
13 |
if(request.queryParams.id) { |
414
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
14 |
let docs = _(json['documents']).filter(function(m) { |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
15 |
return m.id === request.queryParams.id; |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
16 |
}).map(function(doc) { |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
17 |
let res = _.omit(doc, ['publishers', 'mediaArray', 'transcript']); |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
18 |
res['publisher'] = doc['publishers'].join(', '); |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
19 |
res['duration_ms'] = doc['mediaArray']?doc['mediaArray'][_(Object.keys(doc['mediaArray'])).first()]['extent_ms']:0; |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
20 |
res['transcript_url'] = (doc['transcript'] && doc['transcript']['url'])?doc['transcript']['url']:null; |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
21 |
return res; |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
22 |
}).value(); |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
23 |
let meta = { |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
24 |
total: 1, |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
25 |
per_page: 1, |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
26 |
current_page: 1, |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
27 |
last_page: 1, |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
28 |
from: 1, |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
29 |
to: 1, |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
30 |
prev_page_url: null, |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
31 |
next_page_url: null |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
32 |
}; |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
33 |
|
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
34 |
return {'documents': docs, 'meta': meta}; |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
35 |
} |
5c6c526a7fc1
Display for single notice, preparation for share link
ymh <ymh.work@gmail.com>
parents:
348
diff
changeset
|
36 |
|
324
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
37 |
let page = Math.max(parseInt(request.queryParams.page || 1) - 1, 0); |
327
13564bb13ccc
In the serialized document the lan files id 'languages' and not 'language'
ymh <ymh.work@gmail.com>
parents:
324
diff
changeset
|
38 |
let perPage = parseInt(request.queryParams.perpage || 100); |
324
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
39 |
|
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
40 |
json['documents'] = _.map(_.slice(json['documents'], page*perPage, (page+1)*perPage), function(doc) { |
275
a4d8618c2f1b
add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents:
229
diff
changeset
|
41 |
let res = _.omit(doc, ['publishers', 'mediaArray', 'transcript']); |
229
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
42 |
res['publisher'] = doc['publishers'].join(', '); |
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
43 |
res['duration_ms'] = doc['mediaArray']?doc['mediaArray'][_(Object.keys(doc['mediaArray'])).first()]['extent_ms']:0; |
275
a4d8618c2f1b
add transcript_url property on document list results
ymh <ymh.work@gmail.com>
parents:
229
diff
changeset
|
44 |
res['transcript_url'] = (doc['transcript'] && doc['transcript']['url'])?doc['transcript']['url']:null; |
229
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
45 |
return res; |
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
46 |
}); |
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
47 |
|
324
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
48 |
let meta = { |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
49 |
total: response.models.length, |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
50 |
per_page: perPage, |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
51 |
current_page: page+1, |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
52 |
last_page: Math.floor(response.models.length/perPage)+1, |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
53 |
from: page*perPage + 1, |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
54 |
to: Math.min((page+1)*perPage, response.models.length), |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
55 |
prev_page_url: null, |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
56 |
next_page_url: null |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
57 |
}; |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
58 |
|
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
59 |
let urlParts = utils.parseUri(request.url); |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
60 |
|
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
61 |
if(page>0) { |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
62 |
let prevUrlParts = _.clone(urlParts); |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
63 |
prevUrlParts.queryKey.page = page; |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
64 |
meta.prev_page_url = utils.mergeUri(prevUrlParts); |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
65 |
} |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
66 |
|
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
67 |
if(page<(meta.last_page-1)) { |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
68 |
let nextUrlParts = _.clone(urlParts); |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
69 |
nextUrlParts.queryKey.page = page+2; |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
70 |
meta.next_page_url = utils.mergeUri(nextUrlParts); |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
71 |
} |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
72 |
|
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
73 |
json['meta'] = meta; |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
74 |
|
229
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
75 |
return json; |
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
76 |
} |
744379451219
add publisher and duration_ms to model
ymh <ymh.work@gmail.com>
parents:
222
diff
changeset
|
77 |
|
173 | 78 |
}); |
324
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
79 |
|
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
80 |
// total 3373 |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
81 |
// per_page 15 |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
82 |
// current_page 1 |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
83 |
// last_page 225 |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
84 |
// next_page_url "http://localhost:8000/api/v1/documents?page=2" |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
85 |
// prev_page_url |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
86 |
// from 1 |
92fc9d077f95
add pagination info for document list, move it to meta sub object
ymh <ymh.work@gmail.com>
parents:
275
diff
changeset
|
87 |
// to 15 |