Guest User

Untitled

a guest
Jul 17th, 2017
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.54 KB | None | 0 0
  1. // BASE SETUP
  2. // =============================================================================
  3.  
  4. // call the packages we need
  5. var express = require('express'); // call express
  6. var app = express(); // define our app using express
  7. var bodyParser = require('body-parser');
  8. var Sequelize = require('sequelize');
  9. var bodyParser = require('body-parser');
  10. var bcrypt = require('bcrypt');
  11.  
  12. var defineModelSerial = require('./app/models/serial');
  13. var defineModelEpisode = require('./app/models/episode');
  14. var defineModelUser = require('./app/models/user');
  15. var defineModelUserEpisode = require('./app/models/userEpisode');
  16. var defineModelUserSerial = require('./app/models/userSerial');
  17. var defineModelComment = require('./app/models/comment');
  18. var defineModelSeries = require('./app/models/series')
  19.  
  20. var UserSerial;
  21. var UserEpisode;
  22. var User;
  23. var Serial;
  24. var Episode;
  25. var Comment;
  26. var Series;
  27. var sequelize;
  28.  
  29. const ROUNDS = 12;
  30.  
  31. // configure app to use bodyParser()
  32. // this will let us get the data from a POST
  33. app.use(bodyParser.json({limit: "50mb"}));
  34. app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:500000}));
  35.  
  36. var port = process.env.PORT || 8080; // set our port
  37.  
  38. // ROUTES FOR OUR API
  39. // =============================================================================
  40. var router = express.Router(); // get an instance of the express Router
  41.  
  42. // middleware to use for all requests
  43. router.use(function(req, res, next) {
  44. // do logging
  45. console.log('Something is happening.');
  46. next(); // make sure we go to the next routes and don't stop here
  47. });
  48.  
  49. // test route to make sure everything is working (accessed at GET http://localhost:8080/api)
  50. router.get('/', function(req, res) {
  51. res.json({ message: 'hooray! welcome to our api!' });
  52. //res.sendfile('public/index.html');
  53. });
  54.  
  55. router.route('/register')
  56. //REGISTER
  57. .post(function(req,res) {
  58. var pass = '';
  59. bcrypt.genSalt(ROUNDS, function(err, salt) {
  60. bcrypt.hash(req.body.password, salt, function(err, hash) {
  61. pass = hash;
  62. })
  63. })
  64. User.create({
  65. email: req.body.email,
  66. password: pass,
  67. age: req.body.age,
  68. language: req.body.language,
  69. }).then(()=>{
  70. res.json({ message: 'Done'});
  71. },(err)=> {
  72. res.json({ message: err});
  73. });
  74. })
  75.  
  76. router.route('/user')
  77. //LOGIN
  78. .post(function(req,res) {
  79. User.findOne({
  80. where: {
  81. email: req.body.email
  82. }
  83. }).then(user()=>{
  84. bcrypt.compare(req.body.password, user.password, function(err, res) {
  85. if (res) {
  86. user.update({
  87. logged: true,
  88. });
  89. res.json({ message: 'Done'})
  90. }, (err)=>{
  91. res.json({message: err})
  92. });
  93.  
  94. }
  95. })
  96. }),(err)=> {
  97. res.json({ message: err});
  98. });
  99. })
  100.  
  101. router.route('/user/:user_id')
  102. //UPDATE USER
  103. .post(function(req,res) {
  104. User.findById(req.params.user_id).then(user =>{
  105. var pass = '';
  106. bcrypt.genSalt(ROUNDS, function(err, salt) {
  107. bcrypt.hash(req.body.password, salt, function(err, hash) {
  108. pass = hash;
  109. })
  110. })
  111. user.update({
  112. email: req.body.email,
  113. password: pass,
  114. });
  115. res.json({ message: 'Done'})
  116. }, (err)=>{
  117. res.json({message: err})
  118. });
  119. })
  120. //GET ACTUAL USER
  121. .get(function(req,res) {
  122. User.findById(req.params.user_id).then(user =>{
  123. res.json({user});
  124. }),(err)=>{
  125. res.json({message: err})
  126. });
  127. })
  128.  
  129. router.route('/user/:user_id/logout')
  130. //LOGOUT
  131. .post(function(req,res) {
  132. User.findById(req.params.user_id).then(user =>{
  133. user.update({
  134. logged: false
  135. })
  136. })
  137. })
  138.  
  139. router.route('/serials')
  140. //GET ALL SERIALS
  141. .get(function(req,res) {
  142. sequelize.query("SELECT `serial`.`id`, `serial`.`name`, `serial`.`style`,`serial`.`score`, `userSerial`.`watched`, `userSerial`.`favourite` FROM `serial` LEFT OUTER JOIN `userSerial` on `serial`.`id` = `userSerial`.`serial_id` AND `userSerial`.`user_id` = "+ req.body.user_id +" GROUP BY `serial`.`id` ORDER BY `serial`.`score` DESC")
  143. .spread((serials,metadata) => {
  144. res.json(serials);
  145. });
  146. })
  147.  
  148.  
  149. router.route('/serials/:serial_id')
  150. //ADD SERIAL TO FAVOURITE LIST
  151. .post(function(req,res) {
  152. UserSerial.findOne({{serial_id : req.params.serial_id, user_id: req.body.user_id}})
  153. .then(userSerial => {
  154. if(userSerial) {
  155. userSerial.update({
  156. favourite: true
  157. });
  158. }
  159. else {
  160. UserSerial.create({
  161. favourite: true,
  162. watched: false,
  163. serial_id: req.params.serial_id,
  164. user_id: req.body.user_id,
  165. })
  166. }
  167. }),(err)=>{
  168. res.json({message: err})
  169. });
  170. })
  171. //REMOVE SERIAL FROM FAVOURITE LIST
  172. .remove(function(req,res) {
  173. UserSerial.findOne({{serial_id : req.params.serial_id, user_id: req.body.user_id}})
  174. .then(userSerial => {
  175. if(userSerial) {
  176. userSerial.update({
  177. favourite: false
  178. });
  179. }
  180. }),(err)=>{
  181. res.json({message: err})
  182. });
  183. })
  184.  
  185. router.route('/serials/:serial_id/watched')
  186. //ALL EPISODES IN SERIAL WATCHED
  187. .post(function(req,res) {
  188. UserSerial.findOne({ where: {serial_id : req.params.serial_id, user_id: req.body.user_id}})
  189. .then(userSerial => {
  190. if(userSerial) {
  191. userSerial.update({
  192. watched: true
  193. });
  194. }
  195. else {
  196. UserSerial.create({
  197. favourite: false,
  198. watched: true,
  199. serial_id: req.params.serial_id,
  200. user_id: req.body.user_id,
  201. })
  202. }
  203. }),(err)=>{
  204. res.json({message: err})
  205. });
  206. })
  207.  
  208. router.route('/serials/:serial_id/series')
  209. .post(function(req,res) {
  210. Series.findAll({where: {series_id: req.params.series_id}},order: ['name', DESC]).then(series => {
  211. res.json({series});
  212. }),(err)=>{
  213. res.json({message: err})
  214. });
  215. })
  216.  
  217. router.route('/serials/:serial_id/series/:series_id/episodes')
  218. //GET ALL EPISODES OF SERIAL
  219. .get(function(req,res) {
  220. sequelize.query("SELECT `episode`.`id`, `episode`.`number`, `episode`.`name`,`episode`.`link`,`episode`.`language`, `userEpisode`.`watched`, `userEpisode`.`favourite` FROM `episode` LEFT OUTER JOIN `userEpisode` on `episode`.`id` = `userEpisode`.`episode_id` AND `userEpisode`.`user_id` = "+ req.body.user_id +" GROUP BY `episode`.`id` ORDER BY `episode`.`number` DESC")
  221. .spread((episodes,metadata) => {
  222. res.json(episodes);
  223. });
  224. })
  225.  
  226. router.route('/serials/:serial_id/series/:series_id/episodes/:episode_id')
  227. //ADD EPISODE TO FAVOURITE LIST
  228. .post(function(req,res) {
  229. UserEpisode.findOne({where: {episode_id : req.params.episode, user_id: req.body.user_id}})
  230. .then(userEpisode => {
  231. if(userEpisode) {
  232. userEpisode.update({
  233. favourite: true
  234. });
  235. }
  236. else {
  237. UserEpisode.create({
  238. favourite: true,
  239. watched: false,
  240. serial_id: req.params.serial_id,
  241. user_id: req.body.user_id,
  242. })
  243. }
  244. }),(err)=>{
  245. res.json({message: err})
  246. });
  247. })
  248. //REMOVE EPISODE FROM FAVOURITE LIST
  249. .remove(function(req,res) {
  250. UserEpisode.findOne({{episode_id : req.params.episode, user_id: req.body.user_id}})
  251. .then(userEpisode => {
  252. if(userEpisode) {
  253. userEpisode.update({
  254. favourite: false
  255. });
  256. }
  257. }),(err)=>{
  258. res.json({message: err})
  259. });
  260. })
  261.  
  262. router.route('/serials/:serial_id/series/:series_id/episodes/:episode_id/watched')
  263. //EPISODE WATCHED, SAVE TIME
  264. .post(function(req,res) {
  265. UserEpisode.findOne({ where: {episode_id : req.params.episode_id, user_id: req.body.user_id}})
  266. .then(userEpisode => {
  267. if(userEpisode) {
  268. userEpisode.update({
  269. watched: true
  270. });
  271. }
  272. else {
  273. UserEpisode.create({
  274. favourite: false,
  275. watched: true,
  276. episode_id: req.params.episode_id,
  277. user_id: req.body.user_id,
  278. })
  279. }
  280. }),(err)=>{
  281. res.json({message: err})
  282. });
  283. })
  284.  
  285. router.route('/serials/:serial_id/series/:series_id/episodes/:episode_id/comments')
  286. //ADD COMMENT TO EPISODE
  287. .post(function(req,res) {
  288. Comment.create({
  289. message: req.body.message,
  290. episode_id: req.params.episode_id,
  291. user_id: req.body.user_id,
  292. })
  293. })
  294. //GET COMMENTS OF EPISODE
  295. .get(function(req,res) {
  296. Comment.findAll({where: {episode_id: req.params.episode_id}},order: ['date', DESC]).then(comments => {
  297. res.json({comments});
  298. }),(err)=>{
  299. res.json({message: err})
  300. });
  301. })
  302.  
  303.  
  304.  
  305.  
  306. // REGISTER OUR ROUTES -------------------------------
  307. // all of our routes will be prefixed with /api
  308. app.use('/api', router);
  309.  
  310.  
  311. // START THE SERVER
  312. // =============================================================================
  313. app.listen(port);
  314. console.log('Magic happens on port ' + port);
  315.  
  316. getReadDb();
  317.  
  318. function getReadDb(){
  319. sequelize = new Sequelize('database', 'username', 'password', {
  320. host: 'localhost',
  321. dialect: 'sqlite',
  322. pool: {
  323. max: 5,
  324. min: 0,
  325. idle: 10000
  326. },
  327. // SQLite only
  328. storage: './app/models/watchit.db'
  329. });
  330.  
  331. Comment = defineModelComment(sequelize);
  332. Episode = defineModelEpisode(sequelize);
  333. Series = defineModelSeries(sequelize);
  334. Serial = defineModelSerial(sequelize);
  335. UserEpisode = defineModelUserEpisode(sequelize);
  336. UserSerial = defineModelUserSerial(sequelize);
  337. User = defineModelUser(sequelize);
  338.  
  339. Series.hasMany(Episode, {foreignKey: 'series_id'});
  340. Episode.belongsTo(Series, {foreignKey: 'series_id'});
  341.  
  342. Serial.hasMany(Series, {foreignKey: 'serial_id'})};
  343. Series.belongsTo(Serial, {foreignKey: 'serial_id'})
  344.  
  345. Episode.hasMany(UserEpisode, {foreignKey: 'episode_id'});
  346. UserEpisode.belongsTo(Episode, {foreignKey: 'episode_id'});
  347.  
  348. User.hasMany(UserEpisode, {foreignKey: 'user_id'});
  349. UserEpisode.belongsTo(User, {foreignKey: 'user_id'});
  350.  
  351. Serial.hasMany(UserSerial, {foreignKey: 'serial_id'});
  352. UserSerial.belongsTo(Serial, {foreignKey: 'serial_id'});
  353.  
  354. User.hasMany(UserSerial, {foreignKey: 'user_id'});
  355. UserSerial.belongsTo(User, {foreignKey: 'user_id'});
  356.  
  357. User.hasMany(Comment, {foreignKey: 'user_id'});
  358. Comment.belongsTo(User, {foreignKey: 'user_id'});
  359.  
  360. Episode.hasMany(Comment, {foreignKey: 'episode_id'});
  361. Comment.belongsTo(Episode, {foreignKey: 'episode_id'});
  362.  
  363. Serial.sync({force: true})
  364. Episode.sync({force: true})
  365. UserSerial.sync({force: true})
  366. UserEpisode.sync({force: true})
  367. User.sync({force: true})
  368. Comment.sync({foce: true})
  369. Series.sync({foce: true})
  370. }
Add Comment
Please, Sign In to add comment