1 // mirage/serializers/blog-post.js |
1 // mirage/serializers/blog-post.js |
2 import BaseSerializer from './application'; |
2 import BaseSerializer from './application'; |
3 import _ from 'lodash'; |
3 import _ from 'lodash'; |
|
4 import utils from './utils'; |
4 |
5 |
5 export default BaseSerializer.extend({ |
6 export default BaseSerializer.extend({ |
6 attrs: ['id', 'title', 'language', 'url', 'issued', 'modified', 'publishers', 'mediaArray', 'transcript'], |
7 attrs: ['id', 'title', 'language', 'url', 'issued', 'modified', 'publishers', 'mediaArray', 'transcript'], |
7 |
8 |
8 serialize(response, request) { |
9 serialize(response, request) { |
9 |
10 |
10 console.log(request, response); |
|
11 // This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend) |
11 // This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend) |
12 let json = BaseSerializer.prototype.serialize.apply(this, arguments); |
12 let json = BaseSerializer.prototype.serialize.apply(this, arguments); |
13 |
13 |
14 json['documents'] = _.map(json['documents'], function(doc) { |
14 let page = Math.max(parseInt(request.queryParams.page || 1) - 1, 0); |
|
15 let perPage = parseInt(request.queryParams.perpage || 100); |
|
16 |
|
17 json['documents'] = _.map(_.slice(json['documents'], page*perPage, (page+1)*perPage), function(doc) { |
15 let res = _.omit(doc, ['publishers', 'mediaArray', 'transcript']); |
18 let res = _.omit(doc, ['publishers', 'mediaArray', 'transcript']); |
16 res['publisher'] = doc['publishers'].join(', '); |
19 res['publisher'] = doc['publishers'].join(', '); |
17 res['duration_ms'] = doc['mediaArray']?doc['mediaArray'][_(Object.keys(doc['mediaArray'])).first()]['extent_ms']:0; |
20 res['duration_ms'] = doc['mediaArray']?doc['mediaArray'][_(Object.keys(doc['mediaArray'])).first()]['extent_ms']:0; |
18 res['transcript_url'] = (doc['transcript'] && doc['transcript']['url'])?doc['transcript']['url']:null; |
21 res['transcript_url'] = (doc['transcript'] && doc['transcript']['url'])?doc['transcript']['url']:null; |
19 return res; |
22 return res; |
20 }); |
23 }); |
21 |
24 |
|
25 let meta = { |
|
26 total: response.models.length, |
|
27 per_page: perPage, |
|
28 current_page: page+1, |
|
29 last_page: Math.floor(response.models.length/perPage)+1, |
|
30 from: page*perPage + 1, |
|
31 to: Math.min((page+1)*perPage, response.models.length), |
|
32 prev_page_url: null, |
|
33 next_page_url: null |
|
34 }; |
|
35 |
|
36 let urlParts = utils.parseUri(request.url); |
|
37 |
|
38 if(page>0) { |
|
39 let prevUrlParts = _.clone(urlParts); |
|
40 prevUrlParts.queryKey.page = page; |
|
41 meta.prev_page_url = utils.mergeUri(prevUrlParts); |
|
42 } |
|
43 |
|
44 if(page<(meta.last_page-1)) { |
|
45 let nextUrlParts = _.clone(urlParts); |
|
46 nextUrlParts.queryKey.page = page+2; |
|
47 meta.next_page_url = utils.mergeUri(nextUrlParts); |
|
48 } |
|
49 |
|
50 json['meta'] = meta; |
|
51 |
22 return json; |
52 return json; |
23 } |
53 } |
24 |
54 |
25 }); |
55 }); |
|
56 |
|
57 // total 3373 |
|
58 // per_page 15 |
|
59 // current_page 1 |
|
60 // last_page 225 |
|
61 // next_page_url "http://localhost:8000/api/v1/documents?page=2" |
|
62 // prev_page_url |
|
63 // from 1 |
|
64 // to 15 |