cms/app-client/mirage/serializers/sparse-document.js
author ymh <ymh.work@gmail.com>
Fri, 08 Sep 2017 15:03:29 +0200
changeset 543 aaaf9b0b09f6
parent 537 d2e6ee099125
permissions -rw-r--r--
upgrade ember
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
173
cf7b221238fd Work on test fixtures:
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
// mirage/serializers/blog-post.js
cf7b221238fd Work on test fixtures:
ymh <ymh.work@gmail.com>
parents:
diff changeset
     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
cf7b221238fd Work on test fixtures:
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
cf7b221238fd Work on test fixtures:
ymh <ymh.work@gmail.com>
parents:
diff changeset
     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
cf7b221238fd Work on test fixtures:
ymh <ymh.work@gmail.com>
parents:
diff changeset
    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