Your IP : 216.73.216.91


Current Path : /var/node/inatote/Inatote-Backend/
Upload File :
Current File : /var/node/inatote/Inatote-Backend/index.js

import http from "http";
import { Server } from 'socket.io'
import express from 'express'
import bodyParser from 'body-parser'
import handleUsersRequest from './users/index.js'
import handleVendorsRequest from './vendors/index.js'
import productRoutes from './products/index.js'
import addressRoutes from "./address/index.js";
import ratingRoutes from "./rating/index.js";
import vendorRoutes from "./vendors/index.js";
import favouriteRoutes from "./favourite/index.js";
import orderRoutes from "./orders/index.js"
import handleCategoriesRequest from './categories/index.js'
import adaptRequest from './helpers/adapt-request.js'
import multer from 'multer'
import makeWebSocket from './helpers/web-socket.js'
import makeDb from "./db/index.js";
import ejs from 'ejs';
import handleAdminPages from './adminpanel/index.js'
import handleVendorPages from './vendor_panel/index.js'
import expressLayouts from 'express-ejs-layouts'
import config from './config.js'
import verify from './helpers/verify-middleware.js'
import adminVerify from './helpers/admin-verify-middleware.js'
import vendorVerify from './helpers/vendor-verify-middlerware.js'
import cookieParser from 'cookie-parser'
import handleConfigurationsRequest from './configurations/index.js'
import categoryRoutes from './categories/index.js'
import searchendpointHandler from "./search/index.js";
import voucherRoutes from "./vouchers/index.js";
import chatRoutes from "./chat/index.js";
import {listCustomers , createCustomer} from "./services/square.js"
import path, {dirname} from "path";
import connnection from "./io.js"
import cors from "cors";
import sendSms from "./helpers/twilio-helper.js"
import logger from "./services/logService.js";
import sendEmail from './helpers/twilio-send_grid.js';

import cron from "node-cron";
import uploadImage from "./services/imageUpload.js";

const upload = multer();
const app = express()
let db = makeDb()
// parse application/x-www-form-urlencoded
app.use(bodyParser.json())
app.use(express.json())
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(cors())
app.use(cookieParser())
app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.text());
// app.use('/static', express.static(process.cwd() + '/static'));

var form = multer().any()
// app.use(form)
app.use('/static', express.static('static'))

// Set Templating Engine
app.use(expressLayouts)
app.set('layout', './layouts/default')
app.set('view engine', 'ejs');

// Search Item
app.use("/search", searchController)
app.use("/vouchers", voucherRoutes)

// Order 



// USERS MODULE
app.all('/users', verify, uploadImage.single("imageURL"), usersController)
app.post('/users/login', upload.none(), usersController)
app.post('/users/register', uploadImage.single("imageURL"), usersController)
app.post('/users/card', verify ,  usersController);
app.post('/users/SendCode',uploadImage.none(),  usersController);
app.post('/users/verifyUser', uploadImage.none(), usersController)
app.post('/users/changePassword', uploadImage.none(), usersController)
app.post('/users/forgotPassword', uploadImage.none(), usersController)
app.post('/users/updatePassword', uploadImage.none(), usersController)
app.post('/users/registerAdmin', upload.none(), usersController)
app.post('/users/verifyRiderLicense', uploadImage.array("imageURL", 3), usersController)
app.post('/users/updateProfilePicture', verify, uploadImage.single("imageURL"), usersController)
app.get('/users/:id', verify, upload.none(), usersController)
app.delete('/users/:id', verify, upload.none(), usersController)
app.put('/users/:id', verify, uploadImage.single("imageURL"), usersController)
app.post('/users/createCardHolder'  , usersController)
app.post('/users/activateCard' , verify  , usersController)
app.post('/users/berkleyCards' , verify ,uploadImage.none() , usersController)
app.post('/users/updateCard' , verify ,uploadImage.none() , usersController)
app.post('/users/updateKYCStatus' , verify ,uploadImage.none() , usersController)

app.post('/users/validateOTP' , usersController)




// upload Image
app.post('/uploadImage',  uploadImage.array("imageURL" , 10), (req , res)=>{
  let path = req.files.map(f=> f.path);
  res.status(200).json({
    status : true ,
    data : path
  })
})


// VENDORS MODULE
app.use('/vendors', vendorRoutes)


// favourite MODULE
app.use("/favourite", favouriteRoutes)

// app.all('/vendors', verify, vendorsController)
// app.get('/vendors/:id', verify, vendorsController)
// app.delete('/vendors/:id', verify, vendorsController)
// app.put('/vendors/:id', verify, vendorsController)

// Address MODULE
app.use("/address", addressRoutes)

// Rating Routes

app.use("/ratings", ratingRoutes)


// PRODUCTS MODULE
app.use('/products', productRoutes)

app.use("/chat" , chatRoutes)

app.use("/orders", orderRoutes)

app.use("/categories", categoryRoutes)

// app.get('/products/:id', verify, productsController)
// app.put('/products/:categoryId/:id', verify, productsController)
// app.delete('/products/:id', verify, productsController)

// ORDER MODULES
// app.all('/orders', verify, ordersController)
// app.get('/orders/:id', verify, ordersController)
// app.delete('/orders/:id', verify, ordersController)

// Category MODULES
// app.all('/categories', verify, categoriesController)
// app.get('/categories/:id', verify, categoriesController)
// app.delete('/categories/:id', verify, categoriesController)

// Configuration Module

app.all('/configurations', verify, configurationsController)
app.get('/configurations/:id', verify, configurationsController)
app.delete('/configurations/:id', verify, configurationsController)
app.put('/configurations/:id', verify, configurationsController)

app.get('/web/admin/login', function (req, res) {
  res.render('adminlogin')
});


app.get('/web/vendor/login', function (req, res) {
  res.render('vendorlogin')
});


// index page
app.get('/web/admin', adminVerify, veiwsAdminController);
app.get('/web/admin/adduser', adminVerify, veiwsAdminController);
app.get('/web/admin/listuser', adminVerify, veiwsAdminController);
app.get('/web/admin/viewuser', adminVerify, veiwsAdminController);
app.get('/web/admin/viewrider', adminVerify, veiwsAdminController);

app.get('/web/admin/listvendor', adminVerify, veiwsAdminController);
app.get('/web/admin/addvendor', adminVerify, veiwsAdminController);
app.get('/web/admin/viewVendor', adminVerify, veiwsAdminController);
app.get('/web/admin/updatevendor', adminVerify, veiwsAdminController);
app.get('/web/admin/products', adminVerify, veiwsAdminController);

app.get('/web/admin/configurations', adminVerify, veiwsAdminController);

app.get('/web/admin/updateproduct', adminVerify, veiwsAdminController);
app.get('/web/admin/listproduct', adminVerify, veiwsAdminController);

app.get('/web/admin/vieworder', adminVerify, veiwsAdminController);
app.get('/web/admin/listorder', adminVerify, veiwsAdminController);


app.get('/web/admin/orders', adminVerify, veiwsAdminController);
app.get('/web/admin/KYCStatus', adminVerify, veiwsAdminController);
app.get('/web/admin/cardDetails', adminVerify, veiwsAdminController);




// about page
app.get('/web/vendor', vendorVerify, veiwsVendorController);
app.get('/web/vendor/adduser', vendorVerify, veiwsVendorController);
app.get('/web/vendor/listuser', vendorVerify, veiwsVendorController);
app.get('/web/vendor/edituser', vendorVerify, veiwsVendorController);
app.get('/web/vendor/changepassword', vendorVerify, veiwsVendorController);
app.get('/web/vendor/addproduct', vendorVerify, veiwsVendorController);
app.get('/web/vendor/updateproduct', vendorVerify, veiwsVendorController);
app.get('/web/vendor/listproduct', vendorVerify, veiwsVendorController);
app.get('/web/vendor/addcategory', vendorVerify, veiwsVendorController);
app.get('/web/vendor/updatecategory', vendorVerify, veiwsVendorController);
app.get('/web/vendor/listcategory', vendorVerify, veiwsVendorController);
app.get('/web/vendor/listorder', vendorVerify, veiwsVendorController);
app.get('/web/vendor/vieworder', vendorVerify, veiwsVendorController);
app.get('/web/vendor/viewuser', vendorVerify, veiwsVendorController);
app.get('/web/vendor/viewvendor', vendorVerify, veiwsVendorController);
app.get('/web/vendor/validateotp' , veiwsVendorController);


app.get("/sms" , async(req , res)=>{
    // let number = req.query.number;
    console.log('sms')
    // await sendSms({toNumber:number , message :"Your mobile has been hacked"})
    await  sendEmail({ senderMail: "muhamadhasan043@gmail.com", templateId: "d-9c7e1c79349b4e51b54d65bcf9f62e4b" });
    res.status(200).json("send")
})

function veiwsAdminController(req, res) {
  const httpRequest = adaptRequest(req)
  handleAdminPages(httpRequest)
    .then(({ page, data }) => {
      //console.log("page", page, data);
      if (page == "adminLogin") {
        res.redirect("admin/login");
      } else {
        console.log("page", page);
        res.render(page, { data: data, layout: './layouts/admin-layout' })
      }
    })
    .catch(e => { console.log("e", e); res.render("404.ejs") })
}

function veiwsVendorController(req, res) {
  //console.log("request", req.query);
  const httpRequest = adaptRequest(req)
  handleVendorPages(httpRequest)
    .then(({ page, data }) => {
      console.log("page", page);

      if (page == "vendorLogin") {
        res.redirect("vendor/login")
      } else {
        //console.log("final data", data);
        res.render(page, { data: data, layout: './layouts/vendor-layout.ejs' })
      }
    })
    .catch(e => res.render("404.ejs"))
}

function configurationsController(req, res) {
  const httpRequest = adaptRequest(req)
  handleConfigurationsRequest(httpRequest)
    .then(({ headers, statusCode, data }) =>
      res
        .set(headers)
        .status(statusCode)
        .send(data)
    )
    .catch(e => res.status(500).send({
      "errorMessage": "Internal server error",
      "statusCode": 500
    }))
}


async function usersController(req, res) {
  const httpRequest = adaptRequest(req)
  handleUsersRequest(httpRequest)
    .then(({ headers, statusCode, data }) => {
      logger.infologger.info(JSON.stringify({statusCode , headers , data}))
      res
        .set(headers)
        .status(statusCode)
        .send(data)
    })
    .catch(e => {
      console.log("err", e);
      res.status(500).send({
        "errorMessage": "Internal server error",
        "statusCode": 500
      })
    })
}

function vendorsController(req, res) {
  const httpRequest = adaptRequest(req)
  handleVendorsRequest(httpRequest)
    .then(({ headers, statusCode, data }) =>
      res
        .set(headers)
        .status(statusCode)
        .send(data)
    )
    .catch(e => res.status(500).send({
      "errorMessage": "Internal server error",
      "statusCode": 500
    }))
}

function productsController(req, res) {
  const httpRequest = adaptRequest(req)
  handleProductsRequest(httpRequest)
    .then(({ headers, statusCode, data }) =>
      res
        .set(headers)
        .status(statusCode)
        .send(data)
    )
    .catch(e => res.status(500).send({
      "errorMessage": "Internal server error",
      "statusCode": 500
    }))
}


function searchController(req, res) {
  const httpRequest = adaptRequest(req)
  searchendpointHandler(httpRequest)
    .then(({ headers, statusCode, data }) =>
      res
        .set(headers)
        .status(statusCode)
        .send(data)
    )
    .catch(e => res.status(500).send({
      "errorMessage": "Internal server error",
      "statusCode": 500
    }))
}


// function ordersController(req, res) {
//   const httpRequest = adaptRequest(req)
//   handleOrdersRequest(httpRequest)
//     .then(({ headers, statusCode, data }) =>
//       res
//         .set(headers)
//         .status(statusCode)
//         .send(data)
//     )
//     .catch(e => res.status(500).send({
//       "errorMessage": "Internal server error",
//       "statusCode": 500
//     }))
// }

// function categoriesController(req, res) {
//   const httpRequest = adaptRequest(req)
//   handleCategoriesRequest(httpRequest)
//     .then(({ headers, statusCode, data }) =>
//       res
//         .set(headers)
//         .status(statusCode)
//         .send(data)
//     )
//     .catch(e => res.status(500).send({
//       "errorMessage": "Internal server error",
//       "statusCode": 500
//     }))
// }


cron.schedule('*/3 * * * *', async () => {
  try {
    console.log('sheduler started');

    let databse = await makeDb();
    let date = new Date();
    let hours = date.getHours() <= 9 ? `0${date.getHours()}` : `${date.getHours()}`;
    let mins = date.getMinutes() <= 9 ? `0${date.getMinutes()}` : `${date.getMinutes()}`;

    let current_time = parseInt(hours + mins)
    console.log("current_time",current_time);

    let makeAllVendorClose = await databse.collection("vendors").updateMany({ isOpened: true }, {
      $set: { isOpened: false }
    });
//  openTime < CT and closeTime > CT
//  900
    let vendors = await databse.collection("vendors").updateMany({ "timings.openingTime": { $lte: current_time }, "timings.closingTime": { $gte: current_time }, isOpened: false }, {
      $set: { isOpened: true }
    });
    console.log("vendors" , makeAllVendorClose.result)
    
    console.log("vendors" , vendors.result)
    
  } catch (err) {
    console.log("err", err);
  }
});
const __dirname = path.resolve(path.dirname(''));

app.get('/socket', function(req, res) {
  // return res.status(500).json({message: 'Invalid path'});
 res.sendFile(path.join(__dirname ,'index.html' ));
});


// app.listen(9090, () => //console.log(`Listening on port 9090`))
/** Create HTTP server. */
const server = http.createServer(app);
const io = new Server(server , {
  cors: {
    origin: '*',
  }
});

// io.origins('*:*')

// io.on('connection', client => {
//   client.on('event', data => { //console.log("data" , data) });
//   client.on('disconnect', () => { //console.log("") });
// });
// const socketio = new Server()
/** Create socket connection */
// global.io = socketio.listen(server)
// var webSockets = makeWebSocket({ db })
io.on('connection',(client)=>connnection(client))
/** Listen on provided port, on all network interfaces. */
// console.log(config)
server.listen(config.app.port, config.app.hostname);
// logger.infologger.info(`Listening on port:: http://${config.app.hostname}:${config.app.port}`)
// server.listen(9090, "dev.inatote.com");
/** Event listener for HTTP server "listening" event. */
server.on("listening", (err , data) => {
  console.log("ERR" ,err , data);
  console.log(`Listening on port:: http://${config.app.hostname}:${config.app.port}`)
})
// .catch(err =>{
//   console.log('err' , err);
// });