cms/app-client/mirage/serializers/sparse-document.js
changeset 339 766af1228b05
parent 327 13564bb13ccc
child 348 a5e8d037304b
equal deleted inserted replaced
338:4a3899b6a7ed 339:766af1228b05
     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