From a61816c5c2ab4686cd3b8645f35b7a7a3d913b3c Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Thu, 12 Sep 2019 06:23:03 +0200 Subject: [PATCH] move routes to separated file; stop running crawler in main loop --- index.js | 187 +++---------------------------------------------------- 1 file changed, 7 insertions(+), 180 deletions(-) diff --git a/index.js b/index.js index b08652d..c1a7b7d 100644 --- a/index.js +++ b/index.js @@ -1,45 +1,16 @@ require("dotenv").config(); -const { APP_PORT } = require("./app/config/appConfig"); -const welcome = require("./app/controllers/welcome").getWelcome; -const { - getRealEstateTypes, - postRealEstateTypes -} = require("./app/controllers/realEstateTypes"); -const { getSize, postSize } = require("./app/controllers/sizes"); -const { - getGardenSize, - postGardenSize -} = require("./app/controllers/gardenSizes"); -const { getPrice, postPrice } = require("./app/controllers/prices"); -const { - getQueryReview, - postQueryReview -} = require("./app/controllers/queryReview"); -const { - getQuerySubmit, - postQuerySubmit -} = require("./app/controllers/querySubmit"); -const { getGoAgain } = require("./app/controllers/goAgain"); -const { getLocation, postLocation } = require("./app/controllers/location"); -const { getUnsubscribe } = require("./app/controllers/unsubscribe"); -const { getRealEstates } = require("./app/controllers/realEstates"); -const { redirect } = require("./app/controllers/redirect"); -const schedule = require("node-schedule"); -const crawlAll = require("./app/services/crawlerService"); -const processNotifications = require("./app/services/notificationService"); - -let express = require("express"); +const express = require("express"); const path = require("path"); const bodyParser = require("body-parser"); -const MarketAlert = require("./app/models/marketalert"); -const sendNotification = require("./app/lib/sendNotification"); -const scrapTheItems = require("./app/lib/scrapTheItems"); -const sequelize = require("./app/models/index").sequelize; -const Twocheckout = require("2checkout-node"); const layout = require("express-layout"); +const compression = require("compression"); + +const { APP_PORT } = require("./app/config/appConfig"); +const routes = require("./app/routes"); const app = express(); + app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); @@ -47,155 +18,11 @@ app.set("views", path.join(__dirname, "/app/views")); app.set("view engine", "ejs"); app.use(layout()); -const compression = require("compression"); app.use(compression()); - -app.get("/api/sendnotifications", async (req, res) => { - let marketAlerts = await MarketAlert.findAll(); - - let lastDateUpdate = await Promise.all( - marketAlerts - .map(marketAlert => { - const { id, email, olx_url, last_date } = marketAlert.dataValues; - return { id, email, olx_url, last_date }; - }) - .map(sendNotification) - ); - lastDateUpdate = lastDateUpdate.filter(Boolean(dateUpdate)); - lastDateUpdate.length && - lastDateUpdate.forEach(dateUpdate => - MarketAlert.update( - { last_date: dateUpdate.date }, - { where: { id: dateUpdate.id } } - ) - ); -}); - -app.get("/api/items/:url", async (req, res) => { - let url = - "https://www.olx.ba/pretraga?" + - req.params.url + - "&sort_order=desc&sort_po=datum"; - let appts = await scrapTheItems(url); - res.json({ - last_date: appts[0] && appts[0].date, - items: appts - }); -}); - -app.post("/api/marketalerts", (req, res) => { - const { email, last_date, olx_url } = req.body; - console.log(email, last_date, olx_url); - sequelize.sync().then(() => { - MarketAlert.create({ - olx_url, - last_date, - email - }) - .then(() => { - res.json({ message: "Market Alert Created!" }); - }) - .catch(e => console.error(e)); - }); -}); - -app.post("/api/payforalert", (req, res) => { - let tco = new Twocheckout({ - sellerId: "901402692", - privateKey: "A28DCE5F-9292-405C-8161-F84D8BB83AFC", - sandbox: true - }); - - let params = { - merchantOrderId: "123", - token: req.body.token, - currency: "USD", - total: "2.00", - billingAddr: { - name: "Testing Tester", - addrLine1: "123 Test St", - city: "Sarajevo", - state: "BiH", - zipCode: "71000", - country: "BiH", - email: req.body.email, - phoneNumber: "5555555555" - } - }; - - tco.checkout.authorize(params, function(error, data) { - if (error) { - res.send(error.message); - } else { - res.send(data.response.responseMsg); - } - }); -}); - -app.get("/", welcome); -app.get("/vrstanekretnine/:request_id", getRealEstateTypes); -app.get("/vrstanekretnine", getRealEstateTypes); - -app.post("/vrstanekretnine/:request_id", postRealEstateTypes); -app.post("/vrstanekretnine", postRealEstateTypes); - -app.get("/lokacija/:request_id", getLocation); -app.post("/lokacija/:request_id", postLocation); - -app.get("/povrsina/:request_id", getSize); -app.post("/povrsina/:request_id", postSize); - -app.get("/okucnica/:request_id", getGardenSize); -app.post("/okucnica/:request_id", postGardenSize); - -app.get("/cijena/:request_id", getPrice); -app.post("/cijena/:request_id", postPrice); - -app.get("/pregled/:request_id", getQueryReview); -app.post("/pregled/:request_id", postQueryReview); - -app.get("/posalji/:request_id", getQuerySubmit); -app.post("/posalji/:request_id", postQuerySubmit); - -app.get("/odjava/:request_id", getUnsubscribe); - -app.get("/ponovo", getGoAgain); - -app.get("/nekretnine/:request_id", getRealEstates); - -app.get("/redirect/:id", redirect); +app.use("/", routes); app.use("/assets", express.static("./app/public")); app.listen(APP_PORT, () => console.log(`Example app listening on port ${APP_PORT}!`) ); - -//TODO: based on node-schedule package author, setInterval is better suited for this kind of the job -const rule = new schedule.RecurrenceRule(); -rule.second = 1; -schedule.scheduleJob(rule, async function() { - console.log(new Date(), "Crawler service started"); - await crawlAll(); - console.log( - new Date(), - "Crawler service finished, starting Notification service" - ); - await processNotifications(); - console.log(new Date(), "Notification service finished"); -}); - -/** - * Add flat method to Array - */ -Object.defineProperty(Array.prototype, "flat", { - value: function(depth = 1) { - return this.reduce(function(flat, toFlatten) { - return flat.concat( - Array.isArray(toFlatten) && depth > 1 - ? toFlatten.flat(depth - 1) - : toFlatten - ); - }, []); - } -});