summaryrefslogtreecommitdiffstats
path: root/controllers/shows.js
blob: ac84f88285a8503af68839e6b5a10b451e9ed8b2 (plain)
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
var Show = require('../models/Show');
var config = require('../config.js');

module.exports = {
	getShows: function(req, res) {
		// we get how many elements we have
    // then we return the page array
    Show.count({}, function (err, count) {
      var pages = Math.round(count / config.pageSize);
      var docs = [];
      
      for (var i = 1; i < pages + 1; i++)
        docs.push("shows/"+i);
               
      res.json(docs);
    });
	},
  getPage: function(req, res) {
    var page = req.params.page - 1;   
    var offset = page * config.pageSize;

    // support older version
    if (req.params.page == 'all') {

      Show.find({num_seasons: { $gt: 0 }}).sort({ title: -1 }).exec(function (err, docs) {
        res.json(docs);
      });  

    } else {

      var query = {num_seasons: { $gt: 0 }};
      var data = req.query;
      
      if (!data.order) 
      	data.order = -1;
      	
      var sort = {"rating.votes":  data.order, "rating.percentage":  data.order}
      // filter elements

      if (data.keywords) {
        var words = data.keywords.split(" ");
        var regex = data.keywords.toLowerCase();
        if(words.length > 1) {
          var regex = "^";
          for(var w in words) {
            regex += "(?=.*\\b"+RegExp.escape(words[w].toLowerCase())+"\\b)";
          }
          regex += ".+";
        }
        query = {title: new RegExp(regex,"gi"),num_seasons: { $gt: 0 }};
      }

      if (data.sort) {
        if(data.sort == "year") sort = {year: data.order};
        if(data.sort == "updated") sort = {"episodes.first_aired":  data.order};
        if(data.sort == "name") sort = {title:  (data.order * -1)};
      }

      if(data.genre && data.genre != "All") {
        query = {genres : data.genre,num_seasons: { $gt: 0 }}
      }

      // paging
      Show.find(query,{ _id: 1, imdb_id: 1, tvdb_id:1, title:1, year:1, images:1, slug:1, num_seasons:1, last_updated:1, ratings:1 }).sort(sort).skip(offset).limit(config.pageSize).exec(function (err, docs) {
        res.json(docs);
      });

    }
  },
  getShow: function(req, res) {
    Show.find({imdb_id: req.params.id}).limit(1).exec(function (err, docs) {
        if(Array.isArray(docs)) docs = docs[0];
        res.json(docs);
    });
  },
  search: function(req, res) {
    var keywords = new RegExp(RegExp.escape(req.params.search.toLowerCase()),"gi");
    Show.find({title: keywords,num_seasons: { $gt: 0 }}).sort({ title: -1 }).limit(config.pageSize).exec(function (err, docs) {
      res.json(docs);
    });
  },
  searchPage: function(req, res) {
    var page = req.params.page - 1;
    var offset = page * config.pageSize;    
    var keywords = new RegExp(RegExp.escape(req.params.search.toLowerCase()),"gi");

    Show.find({title: keywords,num_seasons: { $gt: 0 }}).sort({ title: -1 }).skip(offset).limit(config.pageSize).exec(function (err, docs) {
      res.json(docs);
    });
  },
  getSince: function(req, res) {
    var since = req.params.since;
    if(req.query.full) {
      Show.find({last_updated : {$gt: parseInt(since)},num_seasons: { $gt: 0 }}, function(err, docs) {
          res.json(docs);
      });
    } else {
      Show.count({last_updated : {$gt: parseInt(since)},num_seasons: { $gt: 0 }}, function (err, count) {
        // how many page?
        var pages = Math.round(count / config.pageSize);
        
        var docs = [];
        for (var i = 1; i < pages + 1; i++)
            docs.push("shows/update/" + since + "/" + i);
                 
        res.json(docs);
      });
    }
  },
  getSincePage: function(req, res) {
    var page = req.params.page - 1;   
    var offset = page * config.pageSize;      
    var since = req.params.since;

    Show.find({last_updated : {$gt: parseInt(since)},num_seasons: { $gt: 0 }}).sort({ title: -1 }).skip(offset).limit(config.pageSize).exec(function (err, docs) {
      res.json(docs);
    });
  },
  getLastUpdated: function(req, res) {
    Show.find({num_seasons: { $gt: 0 }}).sort({ last_updated: -1 }).limit(config.pageSize).exec(function (err, docs) {
      res.json(docs);
    });
  },
  getLastUpdatedPage: function(req, res) {
    var page = req.params.page - 1;   
    var offset = page * config.pageSize;
    Show.find({num_seasons: { $gt: 0 }}).sort({ last_updated: -1 }).skip(offset).limit(config.pageSize).exec(function (err, docs) {
      res.json(docs);
    });
  },
}