Git Repository Public Repository

YouAndWeb_TwoToc

URLs

Copy to Clipboard
 
f7c47c562dfb62380f9cc00adf29a7ffe5910275
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/**
 * Using Rails-like standard naming convention for endpoints.
 * GET     /api/shows              ->  index
 * POST    /api/shows              ->  create
 * GET     /api/shows/:id          ->  show
 * PUT     /api/shows/:id          ->  update
 * DELETE  /api/shows/:id          ->  destroy
 */

'use strict';

var _ = require('lodash');
var Show = require('./show.model');
var User = require('../user/user.model');
// var Promise_ = require('promise');

function handleError(res, statusCode) {
  statusCode = statusCode || 500;
  return function(err) {
    res.status(statusCode).send(err);
  };
}

function responseWithResult(res, dig, statusCode) {
  statusCode = statusCode || 200;
  var promise = [];
  return function(entity) {
    if (entity) {
      if (dig) {
        entity.forEach(function(obj, index) {
          promise.push(new Promise(function(resolve, reject) {
            User.findById(obj.userId, function(err, userObj) {
              obj.user = userObj;
              resolve(obj);
            });
          }));
        });
        Promise.all(promise).then(function(data) {
          // console.log(data);
          res.status(statusCode).json(data);
        });
      } else {
        User.findById(entity.userId, function(err, userObj) {
          entity.user = userObj;
          res.status(statusCode).json(entity);
        });
      }
    }
  };
}

function handleEntityNotFound(res) {
  return function(entity) {
    if (!entity) {
      res.status(404).end();
      return null;
    }
    return entity;
  };
}

function saveUpdates(updates) {
  return function(entity) {
    var updated = _.merge(entity, updates);
    return updated.saveAsync()
      .spread(function(updated) {
        return updated;
      });
  };
}

function removeEntity(res) {
  return function(entity) {
    if (entity) {
      return entity.removeAsync()
        .then(function() {
          res.status(204).end();
        });
    }
  };
}

// Gets a list of Shows
exports.index = function(req, res) {
  var limit = req.query.limit;
  var sq = {};
  var date = req.query.date;
  var category = req.query.category;
  var fulltext = req.query.fulltext;
  var lat = req.query.lat;
  var lng = req.query.lng;
  var maxDistance = 20; 
  if (date) {
    sq.date = {
      $gte: date
    }
  }
  if (category) {
    sq.categoryId = category
  }
  if (lat && lng) {
    sq.location = {
      $near: [lng, lat],
      $maxDistance: maxDistance
    };
  }
  if (fulltext) {
    var words = fulltext.replace(/[.,-\/#!$%\^&\*;:{}=\-_`~()]/g,"").split(/\s+/);
    var pattern = '';
    for (let word of words) {
      pattern += "(?=.*\\b" + word + "\\b)";
    }
    sq.title = new RegExp("^" + pattern + ".*$", 'i');
  }
  Show.find(sq).lean().limit(limit)
    .then(responseWithResult(res, true), handleError(res));
    /*.catch(handleError(res));*/
};


// Gets a single Show from the DB
exports.show = function(req, res) {
  Show.findById(req.params.id).lean()
    .then(handleEntityNotFound(res))
    .then(responseWithResult(res), handleError(res));
    /*.catch(handleError(res));*/
};

// Creates a new Show in the DB
exports.create = function(req, res) {
  Show.createAsync(req.body)
    .then(responseWithResult(res, 201), handleError(res));
    /*.catch(handleError(res));*/
};

// Updates an existing Show in the DB
exports.update = function(req, res) {
  if (req.body._id) {
    delete req.body._id;
  }
  Show.findByIdAsync(req.params.id)
    .then(handleEntityNotFound(res))
    .then(saveUpdates(req.body))
    .then(responseWithResult(res))
    .catch(handleError(res));
};

// Deletes a Show from the DB
exports.destroy = function(req, res) {
  Show.findByIdAsync(req.params.id)
    .then(handleEntityNotFound(res))
    .then(removeEntity(res))
    .catch(handleError(res));
};

Commits for YouAndWeb_TwoTocserver/api/show/show.controller.js

Diff revisions: vs.
Revision Author Commited Message
f7c47c ... Diff Diff FSinnona picture FSinnona Mon 30 Nov, 2015 16:24:39 +0000

Pre Yoeman

a2ecfb ... PTKDev Fri 20 Nov, 2015 11:22:35 +0000

TwoToc code