├── .DS_Store ├── .gitignore ├── README.md ├── app.js ├── bin └── www ├── config └── default.json ├── controllers ├── booking_controller.js ├── cars_controller.js ├── document_controller.js ├── login_controller.js ├── sockect_controller.js ├── support_controller.js └── zone_controller.js ├── crash_log └── .DS_Store ├── helpers ├── db_helpers.js └── helpers.js ├── package-lock.json ├── package.json ├── public ├── .DS_Store └── stylesheets │ └── style.css ├── routes ├── index.js └── users.js ├── taxi_app.sql └── views ├── error.ejs └── index.ejs /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforany/taxi_driver_node/5d5d86f8808646a33079889daa1737d97e7208ad/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | 132 | public/img/ 133 | public/img/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Node.js Express Js Api Base Setup With MySQL & Socket.io 2 | 3 | # codeforany @codeforany 4 | 5 | - [Youtube Full Playlist: Node.js Express Js With REST Api & Socket.io Api ](https://www.youtube.com/playlist?list=PLzcRC7PA0xWRlYXalCqTqoC6csqUIJWCa) 6 | - [Youtube Channel: @codeforany](https://www.youtube.com/channel/UCdQTp9wRK5vAOlEQZf9PHSg) 7 | - [Youtube Channel Subscribe: @codeforany](https://www.youtube.com/channel/UCdQTp9wRK5vAOlEQZf9PHSg?sub_confirmation=1) 8 | 9 | 10 | - [Youtube Video - 1: Node Express Api Base Setup With MySQL Connection POST Method Api ](https://youtu.be/kmcd231SVIo) 11 | - [Youtube Video - 2: Socket Connection & Socket Emit & Event On Listen Api With Flutter Mobile App ](https://youtu.be/FWKYqs-eaAE) 12 | - [Youtube Video - 3: Node Express Create Multipart/Form-Data Api With Multiple Image Upload Api ](https://youtu.be/ec2_v1zXbiQ) 13 | 14 | 15 | A new node express project. 16 | ## Getting Started 17 | 18 | [Node.js Download](https://nodejs.org/en) & [Node.js installing](https://nodejs.org/en/docs/guides/getting-started-guide) 19 | 20 | [Express Installing & generator](https://expressjs.com/en/starter/generator.html): 21 | sudo npm install -g express-generator 22 | 23 | # Node App Create: 24 | 25 | 1) express --view=ejs (app_name) 26 | 2) sudo npm audit fix --force 27 | 28 | ## Install dependencies: 29 | 1) npm i -s config 30 | 2) npm i -s cors 31 | 3) npm i -s moment-timezone 32 | 4) npm i -s multiparty 33 | 5) npm i -s socket.io 34 | 6) npm i -s uuid 35 | 36 | ## Node app run: 37 | node app.js -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var createError = require('http-errors'); 2 | var express = require('express'); 3 | var path = require('path'); 4 | var cookieParser = require('cookie-parser'); 5 | var logger = require('morgan'); 6 | 7 | const cors = require('cors'); 8 | var fs = require('fs'); 9 | 10 | var indexRouter = require('./routes/index'); 11 | var usersRouter = require('./routes/users'); 12 | 13 | var app = express(); 14 | var server = require('http').createServer(app); 15 | var io = require('socket.io')(server, { 16 | cors: { 17 | origin: "http://localhost:4200", 18 | methods: ["GET", "POST"] 19 | } 20 | }) 21 | var serverPort = 3001; 22 | 23 | var user_socket_connect_list = []; 24 | 25 | // view engine setup 26 | app.set('views', path.join(__dirname, 'views')); 27 | app.set('view engine', 'ejs'); 28 | 29 | app.use(logger('dev')); 30 | app.use(express.json({ limit: '100mb' })); 31 | app.use(express.urlencoded({ extended: true, limit: '100mb' })); 32 | app.use(cookieParser()); 33 | app.use(express.static(path.join(__dirname, 'public'))); 34 | 35 | app.use('/', indexRouter); 36 | app.use('/users', usersRouter); 37 | 38 | const corsOptions = { 39 | origin: "http://localhost:4200", 40 | } 41 | 42 | app.use(cors(corsOptions)); 43 | 44 | // import express inside dynamic added. 45 | fs.readdirSync('./controllers').forEach((file) => { 46 | if (file.substr(-3) == ".js") { 47 | route = require('./controllers/' + file); 48 | route.controller(app, io, user_socket_connect_list); 49 | } 50 | }) 51 | 52 | // catch 404 and forward to error handler 53 | app.use(function (req, res, next) { 54 | next(createError(404)); 55 | }); 56 | 57 | // error handler 58 | app.use(function (err, req, res, next) { 59 | // set locals, only providing error in development 60 | res.locals.message = err.message; 61 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 62 | 63 | // render the error page 64 | res.status(err.status || 500); 65 | res.render('error'); 66 | }); 67 | 68 | module.exports = app; 69 | 70 | server.listen(serverPort); 71 | 72 | console.log("Server Start : " + serverPort ); 73 | 74 | Array.prototype.swap = (x, y) => { 75 | var b = this[x]; 76 | this[x] = this[y]; 77 | this[y] = b; 78 | return this; 79 | } 80 | 81 | Array.prototype.insert = (index, item) => { 82 | this.splice(index, 0, item); 83 | } 84 | 85 | Array.prototype.replace_null = (replace = '""') => { 86 | return JSON.parse(JSON.stringify(this).replace(/mull/g, replace)); 87 | } 88 | 89 | String.prototype.replaceAll = (search, replacement) => { 90 | var target = this; 91 | return target.replace(new RegExp(search, 'g'), replacement); 92 | } 93 | -------------------------------------------------------------------------------- /bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('food-delivery:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Get port from environment and store in Express. 13 | */ 14 | 15 | var port = normalizePort(process.env.PORT || '3000'); 16 | app.set('port', port); 17 | 18 | /** 19 | * Create HTTP server. 20 | */ 21 | 22 | var server = http.createServer(app); 23 | 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | 28 | server.listen(port); 29 | server.on('error', onError); 30 | server.on('listening', onListening); 31 | 32 | /** 33 | * Normalize a port into a number, string, or false. 34 | */ 35 | 36 | function normalizePort(val) { 37 | var port = parseInt(val, 10); 38 | 39 | if (isNaN(port)) { 40 | // named pipe 41 | return val; 42 | } 43 | 44 | if (port >= 0) { 45 | // port number 46 | return port; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * Event listener for HTTP server "error" event. 54 | */ 55 | 56 | function onError(error) { 57 | if (error.syscall !== 'listen') { 58 | throw error; 59 | } 60 | 61 | var bind = typeof port === 'string' 62 | ? 'Pipe ' + port 63 | : 'Port ' + port; 64 | 65 | // handle specific listen errors with friendly messages 66 | switch (error.code) { 67 | case 'EACCES': 68 | console.error(bind + ' requires elevated privileges'); 69 | process.exit(1); 70 | break; 71 | case 'EADDRINUSE': 72 | console.error(bind + ' is already in use'); 73 | process.exit(1); 74 | break; 75 | default: 76 | throw error; 77 | } 78 | } 79 | 80 | /** 81 | * Event listener for HTTP server "listening" event. 82 | */ 83 | 84 | function onListening() { 85 | var addr = server.address(); 86 | var bind = typeof addr === 'string' 87 | ? 'pipe ' + addr 88 | : 'port ' + addr.port; 89 | debug('Listening on ' + bind); 90 | } 91 | -------------------------------------------------------------------------------- /config/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "dbConfig": { 3 | "user":"root", 4 | "password":"", 5 | "database":"taxi_app", 6 | "multipleStatements": true, 7 | "timezone":"utc+5:30", 8 | "charset":"utf8mb4" 9 | } 10 | } -------------------------------------------------------------------------------- /controllers/cars_controller.js: -------------------------------------------------------------------------------- 1 | var db = require('./../helpers/db_helpers') 2 | var helper = require('./../helpers/helpers') 3 | var multiparty = require('multiparty') 4 | var fs = require('fs'); 5 | var imageSavePath = "./public/img/" 6 | 7 | //User Type: 8 | const ut_admin = 4 9 | const ut_driver = 2 10 | const ut_user = 1 11 | 12 | module.exports.controller = (app, io, socket_list) => { 13 | 14 | const msg_success = "successfully"; 15 | const msg_fail = "fail"; 16 | const msg_invalidUser = "invalid username"; 17 | 18 | app.post('/api/add_car', (req, res) => { 19 | 20 | var form = new multiparty.Form(); 21 | form.parse(req, (err, reqObj, files) => { 22 | if (err) { 23 | helper.ThrowHtmlError(err, res); 24 | return; 25 | } 26 | 27 | checkAccessToken(req.headers, res, (uObj) => { 28 | helper.CheckParameterValid(res, reqObj, ["brand", "model", "series", "seat", "other_status", "car_number"], () => { 29 | 30 | helper.CheckParameterValid(res, files, ["image"], () => { 31 | 32 | var responseObj = { "status": "0", "message": "Car add fail" }; 33 | 34 | switch (reqObj.other_status.toString()) { 35 | case "0": 36 | user_car_add(uObj.user_id, reqObj.series[0], reqObj.car_number[0], files.image[0], (resObj) => { 37 | res.json(resObj); 38 | }) 39 | break; 40 | case "1": 41 | // new brand, new model, new series add 42 | car_brand_add(reqObj.brand[0], (brand_id) => { 43 | car_model_add(brand_id, reqObj.model[0], reqObj.seat[0], (model_id) => { 44 | car_series_add(brand_id, model_id, reqObj.series[0], (series_id) => { 45 | user_car_add(uObj.user_id, series_id, reqObj.car_number[0], files.image[0], (resObj) => { 46 | res.json(resObj); 47 | }) 48 | }) 49 | }) 50 | }) 51 | break; 52 | case "2": 53 | // exits brand, new model, new series add 54 | 55 | car_model_add(reqObj.brand[0], reqObj.model[0], reqObj.seat[0], (model_id) => { 56 | car_series_add(reqObj.brand, model_id, reqObj.series[0], (series_id) => { 57 | user_car_add(uObj.user_id, series_id, reqObj.car_number[0], files.image[0], (resObj) => { 58 | res.json(resObj); 59 | }) 60 | }) 61 | }) 62 | 63 | break; 64 | 65 | case "3": 66 | // exits brand, exits model, new series add 67 | car_series_add(reqObj.brand[0], reqObj.model[0], reqObj.series[0], (series_id) => { 68 | user_car_add(uObj.user_id, series_id, reqObj.car_number[0], files.image[0], (resObj) => { 69 | res.json(resObj); 70 | }) 71 | }) 72 | break; 73 | 74 | default: 75 | break; 76 | } 77 | 78 | }) 79 | }) 80 | 81 | }, "2") 82 | 83 | }) 84 | 85 | }) 86 | 87 | app.post('/api/car_list', (req, res) => { 88 | checkAccessToken(req.headers, res, (uObj) => { 89 | 90 | db.query('SELECT `uc`.`user_car_id`, `cs`.`series_name`, `cm`.`model_name`, `cb`.`brand_name`, `uc`.`car_number`, (CASE WHEN `uc`.`car_image` != "" THEN CONCAT( "' + helper.ImagePath() + '" , `uc`.`car_image` ) ELSE "" END) AS `car_image`, `uc`.`status`, `sd`.`service_name`, `sd`.`service_id`, `ud`.`select_service_id`, IFNULL(`zwcs`.`status`, 0) AS `service_status`, (CASE WHEN `uc`.`user_car_id` = `ud`.`car_id` THEN 1 ELSE 0 END) AS `is_set_running` FROM `user_cars` AS `uc` ' + 91 | 'INNER JOIN `car_series` AS `cs` ON `uc`.`series_id` = `cs`.`series_id` ' + 92 | 'INNER JOIN `car_model` AS `cm` ON `cm`.`model_id` = `cm`.`model_id` ' + 93 | 'INNER JOIN `car_brand` AS `cb` ON `cb`.`brand_id` = `cm`.`brand_id` ' + 94 | 'INNER JOIN `user_detail` AS `ud` ON `ud`.`user_id` = `uc`.`user_id` ' + 95 | 'INNER JOIN `zone_document` AS `zwd` ON `zwd`.`zone_id` = `ud`.`zone_id` AND `zwd`.`status` = 1 ' + 96 | 'INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `zwd`.`service_id` ' + 97 | 'LEFT JOIN `zone_wise_cars_service` AS `zwcs` ON `zwcs`.`user_car_id` = `uc`.`user_car_id` AND `zwd`.`zone_doc_id` = `zwcs`.`zone_doc_id` ' 98 | + ' WHERE `uc`.`user_id` = ? AND `uc`.`status` != ? GROUP BY `uc`.`user_car_id`, `sd`.`service_id` ORDER BY `uc`.`user_car_id` ', [uObj.user_id, 2], (err, result) => { 99 | if (err) { 100 | helper.ThrowHtmlError(err, res); 101 | return 102 | } 103 | 104 | 105 | if (result.length > 0) { 106 | 107 | var car_list = []; 108 | var car_index = 0; 109 | 110 | result.forEach((carDetail, index) => { 111 | 112 | helper.Dlog(carDetail); 113 | 114 | if (carDetail.series_name == "") { 115 | result[index].series_name = "-" 116 | } 117 | 118 | if (index == 0) { 119 | car_list.push(carDetail); 120 | car_list[car_index].active_status = 1; 121 | car_list[car_index].service_missing_name = ""; 122 | } else if (carDetail.user_car_id != car_list[car_index].user_car_id) { 123 | car_list[car_index].service_missing_name = car_list[car_index].service_missing_name.replace(/,\s*$/, "") 124 | car_list.push(carDetail); 125 | car_index++; 126 | car_list[car_index].active_status = 1; 127 | car_list[car_index].service_missing_name = ""; 128 | } 129 | 130 | if (carDetail.select_service_id != "") { 131 | carDetail.select_service_id.split(",").forEach((series_id) => { 132 | if (carDetail.service_status == 0 && series_id == carDetail.series_id) { 133 | car_list[car_index].service_missing_name += carDetail.series_name + "," 134 | car_list[car_index].active_status = 0 135 | } 136 | }) 137 | } 138 | delete car_list[car_index]["service_name"] 139 | delete car_list[car_index]["service_status"] 140 | 141 | }); 142 | car_list[car_index].service_missing_name = car_list[car_index].service_missing_name.replace(/,\s*$/, "") 143 | 144 | res.json({ "status": "1", "payload": car_list }) 145 | 146 | } else { 147 | res.json({ "status": "0", "message": "no car" }) 148 | } 149 | }) 150 | 151 | 152 | }, "2") 153 | 154 | }) 155 | 156 | app.post('/api/car_delete', (req, res) => { 157 | helper.Dlog(req.body); 158 | var reqObj = req.body; 159 | checkAccessToken(req.headers, res, (uObj) => { 160 | helper.CheckParameterValid(res, reqObj, ["user_car_id"], () => { 161 | db.query('UPDATE `user_cars` SET `status` = ? WHERE `user_car_id` = ? AND `user_id` = ? ', [2, reqObj.user_car_id, uObj.user_id], (err, result) => { 162 | if (err) { 163 | helper.ThrowHtmlError(err, res); 164 | return 165 | } 166 | 167 | if (result.affectedRows > 0) { 168 | res.json({ "status": "1", "message": "car deleted succfully" }) 169 | 170 | } else { 171 | res.json({ "status": "0", "message": msg_fail }) 172 | } 173 | }) 174 | }) 175 | }, "2") 176 | }) 177 | 178 | app.post('/api/set_running_car', (req, res) => { 179 | helper.Dlog(req.body); 180 | var reqObj = req.body; 181 | checkAccessToken(req.headers, res, (uObj) => { 182 | helper.CheckParameterValid(res, reqObj, ["user_car_id"], () => { 183 | db.query('UPDATE `user_cars` AS `ucd` ' + 184 | "INNER JOIN `user_detail` AS `ud` ON `ucd`.`user_id` = `ud`.`user_id` " + 185 | "INNER JOIN `car_series` AS `cs` ON `cs`.`series_id` = `ucd`.`series_id` " + 186 | "INNER JOIN `car_model` AS `cm` ON `cs`.`model_id` = `cm`.`model_id` " + 187 | "INNER JOIN `car_brand` AS `cb` ON `cb`.`brand_id` = `cs`.`brand_id` " + 188 | "SET `ud`.`car_id` = `ucd`.`user_car_id`, `ud`.`seat` = `cm`.`seat` " + 189 | "WHERE `ucd`.`user_car_id` = ? AND `ucd`.`user_id` = ? AND `ucd`.`status` = ?", [reqObj.user_car_id, uObj.user_id, 1], (err, result) => { 190 | if (err) { 191 | helper.ThrowHtmlError(err, res); 192 | return 193 | } 194 | 195 | 196 | if (result.affectedRows > 0) { 197 | 198 | db.query('SELECT `uc`.`user_car_id`, `cs`.`series_name`, `cm`.`model_name`, `cb`.`brand_name`, `uc`.`car_number`, (CASE WHEN `uc`.`car_image` != "" THEN CONCAT( "' + helper.ImagePath() + '" , `uc`.`car_image` ) ELSE "" END) AS `car_image`, `uc`.`status`,(CASE WHEN `uc`.`user_car_id` = `ud`.`car_id` THEN 1 ELSE 0 END) AS `is_set_running` FROM `user_cars` AS `uc` ' + 199 | 'INNER JOIN `car_series` AS `cs` ON `uc`.`series_id` = `cs`.`series_id` ' + 200 | 'INNER JOIN `car_model` AS `cm` ON `cm`.`model_id` = `cm`.`model_id` ' + 201 | 'INNER JOIN `car_brand` AS `cb` ON `cb`.`brand_id` = `cm`.`brand_id` ' + 202 | 'INNER JOIN `user_detail` AS `ud` ON `ud`.`user_id` = `uc`.`user_id` ' + 203 | "WHERE `uc`.`user_car_id` = ? AND `uc`.`status` = ? ", [reqObj.user_car_id, 1], (err, result) => { 204 | 205 | if (err) { 206 | helper.ThrowHtmlError(err, res); 207 | return 208 | } 209 | 210 | if (result.length > 0) { 211 | result.forEach((serObj, index) => { 212 | if (serObj.series_name == "") { 213 | result[index].series_name = "-" 214 | } 215 | }); 216 | res.json({ "status": "1", "payload": result, "message": "car set running succfully" }) 217 | } else { 218 | res.json({ "status": "0", "message": msg_fail }) 219 | } 220 | }) 221 | 222 | 223 | 224 | } else { 225 | res.json({ "status": "0", "message": msg_fail }) 226 | } 227 | }) 228 | }) 229 | }, "2") 230 | }) 231 | 232 | app.post('/api/brand_list', (req, res) => { 233 | checkAccessToken(req.headers, res, (uObj) => { 234 | db.query('SELECT `brand_id`, `brand_name` FROM `car_brand` WHERE `status` != ?', [2], (err, result) => { 235 | if (err) { 236 | helper.ThrowHtmlError(err, res); 237 | return 238 | } 239 | 240 | var other_dict = { 'brand_id': 0, 'brand_name': "Other" }; 241 | 242 | if (result.length > 0) { 243 | result.push(other_dict) 244 | res.json({ "status": "1", "payload": result }) 245 | 246 | } else { 247 | res.json({ "status": "1", "payload": [other_dict] }) 248 | } 249 | }) 250 | }) 251 | 252 | }) 253 | 254 | app.post('/api/model_list', (req, res) => { 255 | helper.Dlog(req.body) 256 | var reqObj = req.body; 257 | checkAccessToken(req.headers, res, (uObj) => { 258 | helper.CheckParameterValid(res, reqObj, ["brand_id"], () => { 259 | db.query('SELECT `cm`.`model_id`, `cm`.`model_name`, `cm`.`seat` FROM `car_model` AS `cm` ' + 260 | 'INNER JOIN `car_brand` AS `cb` ON `cb`.`brand_id` = `cm`.`brand_id` AND `cm`.`brand_id` = ? ' 261 | + ' WHERE `cm`.`status` != ?', [reqObj.brand_id, 2], (err, result) => { 262 | if (err) { 263 | helper.ThrowHtmlError(err, res); 264 | return 265 | } 266 | 267 | var other_dict = { 'model_id': 0, 'model_name': "Other", "seat": "0" }; 268 | if (result.length > 0) { 269 | result.push(other_dict) 270 | res.json({ "status": "1", "payload": result }) 271 | 272 | } else { 273 | res.json({ "status": "1", "payload": [other_dict] }) 274 | } 275 | }) 276 | }) 277 | 278 | }) 279 | 280 | }) 281 | 282 | app.post('/api/series_list', (req, res) => { 283 | helper.Dlog(req.body) 284 | var reqObj = req.body; 285 | checkAccessToken(req.headers, res, (uObj) => { 286 | 287 | helper.CheckParameterValid(res, reqObj, ["model_id"], () => { 288 | db.query('SELECT `cs`.`series_id`, `cs`.`series_name` FROM `car_series` AS `cs` ' + 289 | 'INNER JOIN `car_model` AS `cm` ON `cm`.`model_id` = `cs`.`model_id` AND `cs`.`model_id` = ? ' + 290 | 291 | ' WHERE `cs`.`status` != ?', [reqObj.model_id, 2], (err, result) => { 292 | if (err) { 293 | helper.ThrowHtmlError(err, res); 294 | return 295 | } 296 | var other_dict = { 'series_id': 0, 'series_name': "Other" }; 297 | if (result.length > 0) { 298 | 299 | result.forEach((serObj, index) => { 300 | if (serObj.series_name == "") { 301 | result[index].series_name = "-" 302 | } 303 | }); 304 | result.push(other_dict) 305 | res.json({ "status": "1", "payload": result }) 306 | 307 | } else { 308 | res.json({ "status": "1", "payload": [other_dict] }) 309 | } 310 | }) 311 | }) 312 | }) 313 | 314 | }) 315 | 316 | app.post('/api/subscription_plan_list', (req, res) => { 317 | helper.Dlog(req.body) 318 | checkAccessToken(req.headers, res, (uObj) => { 319 | db.query(" SELECT `sp`.`plan_id`, `sp`.`plan_name`,`sp`.`detail`, `sp`.`days`, `sp`.`amount`,`sp`.`max_discount`,`sp`.`max_ride`, `sp`.`zone_id`, `sp`.`service_id`, `sp`.`min_amount`, `sp`.`discount_per`, `sp`.`image`, `sb`.`user_typ`, `sp`.`start_date`, `sp`.`end_date`, `sp`.`created_date`, `zl`.`zone_name`, GROUP_CONCAT(`sp`.`service_name`) AS `service_name` FROM `subscription_plan` AS `sp` " + 320 | "INNER JOIN `zone_list` AS `zl` ON `zl`.`zone_id` = `sp`.`zone_id` " + 321 | "INNER JOIN `service_detail` AS `sd` ON FIND_IN_SET(`sd`.`service_id`, `sp`.`service_id` ) != 0 AND `sd`.`status` = 1 " + 322 | "WHERE `sp`.`status` = 1 AND `sp`.`start_date` >= NOW() AND `sp`.`end_date` <= NOW() GROUP BY `sp`.`plan_id` ", [], (err, result) => { 323 | if(err) { 324 | helper.ThrowHtmlError(err, res); 325 | return 326 | } 327 | 328 | res.json( 329 | { 330 | "status": "1", 331 | "payload": result 332 | } 333 | ) 334 | } ) 335 | } ) 336 | } ) 337 | 338 | app.post('/api/admin/add_car', (req, res) => { 339 | helper.Dlog(req.body) 340 | var reqObj = req.body; 341 | 342 | checkAccessToken(req.headers, res, (uObj) => { 343 | helper.CheckParameterValid(res, reqObj, ["brand", "model", "series", "seat", "other_status"], () => { 344 | 345 | var responseObj = { "status": "0", "message": "Car add fail" }; 346 | 347 | switch (reqObj.other_status.toString()) { 348 | case "0": 349 | res.json({ "status": "1", "message": msg_success }) 350 | break; 351 | case "1": 352 | // new brand, new model, new series add 353 | car_brand_add(reqObj.brand, (brand_id) => { 354 | car_model_add(brand_id, reqObj.model, reqObj.seat, (model_id) => { 355 | car_series_add(brand_id, model_id, reqObj.series, (series_id) => { 356 | res.json({ "status": "1", "message": msg_success }) 357 | }) 358 | }) 359 | }) 360 | break; 361 | case "2": 362 | // exits brand, new model, new series add 363 | 364 | car_model_add(reqObj.brand, reqObj.model, reqObj.seat, (model_id) => { 365 | car_series_add(reqObj.brand, model_id, reqObj.series, (series_id) => { 366 | res.json({ "status": "1", "message": msg_success }) 367 | }) 368 | }) 369 | 370 | break; 371 | 372 | case "2": 373 | // exits brand, exits model, new series add 374 | car_series_add(reqObj.brand, reqObj.model, reqObj.series, (series_id) => { 375 | res.json({ "status": "1", "message": msg_success }) 376 | }) 377 | break; 378 | 379 | default: 380 | break; 381 | } 382 | 383 | }) 384 | 385 | }, "4") 386 | 387 | }) 388 | 389 | app.post('/api/admin/brand_list', (req, res) => { 390 | checkAccessToken(req.headers, res, (uObj) => { 391 | db.query('SELECT `brand_id`, `brand_name`, `status`, `created_date`, `modify_date` FROM `car_brand` WHERE `status` != ?', [2], (err, result) => { 392 | if (err) { 393 | helper.ThrowHtmlError(err); 394 | return 395 | } 396 | 397 | if (result.length > 0) { 398 | res.json({ "status": "1", "payload": result }) 399 | 400 | } else { 401 | res.json({ "status": "0", "message": "no brand added" }) 402 | } 403 | }) 404 | }, "4") 405 | 406 | }) 407 | 408 | app.post('/api/admin/model_list', (req, res) => { 409 | checkAccessToken(req.headers, res, (uObj) => { 410 | db.query('SELECT `cm`.`model_id`, `cb`.`brand_name`, `cm`.`brand_id`, `cm`.`model_name`, `cm`.`seat`, `cm`.`status`, `cm`.`created_date`, `cm`.`modify_date` FROM `car_model` AS `cm` ' + 411 | 'INNER JOIN `car_brand` AS `cb` ON `cb`.`brand_id` = `cm`.`brand_id` ' 412 | + ' WHERE `cm`.`status` != ?', [2], (err, result) => { 413 | if (err) { 414 | helper.ThrowHtmlError(err); 415 | return 416 | } 417 | if (result.length > 0) { 418 | res.json({ "status": "1", "payload": result }) 419 | 420 | } else { 421 | res.json({ "status": "0", "message": "no brand added" }) 422 | } 423 | }) 424 | }, "4") 425 | 426 | }) 427 | 428 | app.post('/api/admin/series_list', (req, res) => { 429 | checkAccessToken(req.headers, res, (uObj) => { 430 | db.query('SELECT `cm`.`model_id`, `cm`.`model_name`, `cb`.`brand_name`, `cm`.`brand_id`, `cs`.`series_id`, `cs`.`series_name`, `cs`.`status`, `cs`.`created_date`, `cs`.`modify_date` FROM `car_series` AS `cs` ' + 431 | 'INNER JOIN `car_model` AS `cm` ON `cm`.`model_id` = `cs`.`model_id` ' + 432 | 'INNER JOIN `car_brand` AS `cb` ON `cb`.`brand_id` = `cs`.`brand_id` ' + 433 | ' WHERE `cs`.`status` != ?', [2], (err, result) => { 434 | if (err) { 435 | helper.ThrowHtmlError(err); 436 | return 437 | } 438 | if (result.length > 0) { 439 | result.forEach((serObj, index) => { 440 | if (serObj.series_name == "") { 441 | result[index].series_name = "-" 442 | } 443 | }); 444 | res.json({ "status": "1", "payload": result }) 445 | 446 | } else { 447 | res.json({ "status": "0", "message": "no brand added" }) 448 | } 449 | }) 450 | }, "4") 451 | 452 | }) 453 | 454 | app.post('/api/admin/brand_approved', (req, res) => { 455 | helper.Dlog(req.body) 456 | var reqObj = req.body; 457 | checkAccessToken(req.headers, res, (uObj) => { 458 | helper.CheckParameterValid(res, reqObj, ["brand_id"], () => { 459 | 460 | db.query('UPDATE `car_brand` AS `cb` ' + 461 | 462 | 'SET `cb`.`modify_date` = NOW(), `cb`.`status` = (CASE WHEN `cb`.`status` = 0 THEN 1 ELSE 0 END) ' + 463 | 464 | ' WHERE `cb`.`brand_id` = ? AND `cb`.`status` != ? ', [reqObj.brand_id, 2], (err, result) => { 465 | if (err) { 466 | helper.ThrowHtmlError(err, res); 467 | } 468 | if (result.affectedRows > 0) { 469 | res.json({ "status": "1", "message": msg_success }) 470 | } else { 471 | res.json({ "status": "0", "message": msg_fail }) 472 | } 473 | }) 474 | }) 475 | }, "4") 476 | 477 | }) 478 | 479 | app.post('/api/admin/model_approved', (req, res) => { 480 | helper.Dlog(req.body) 481 | var reqObj = req.body; 482 | 483 | checkAccessToken(req.headers, res, (uObj) => { 484 | helper.CheckParameterValid(res, reqObj, ["model_id"], () => { 485 | 486 | db.query('UPDATE `car_model` AS `cm` ' + 487 | 'INNER JOIN `car_brand` AS `cb` ON `cm`.`brand_id` = `cb`.`brand_id` ' + 488 | 'SET `cb`.`modify_date` = NOW(), `cb`.`status` = (CASE WHEN `cb`.`status` = 0 THEN 1 ELSE 0 END), `cm`.`modify_date` = NOW(), `cm`.`status` = (CASE WHEN `cm`.`status` = 0 THEN 1 ELSE 0 END) ' + 489 | 490 | ' WHERE `cm`.`model_id` = ? AND `cm`.`status` != ? ', [reqObj.model_id, 2], (err, result) => { 491 | if (err) { 492 | helper.ThrowHtmlError(err, res); 493 | return 494 | } 495 | 496 | helper.Dlog(result); 497 | if (result.affectedRows > 0) { 498 | res.json({ "status": "1", "message": msg_success }) 499 | } else { 500 | res.json({ "status": "0", "message": msg_fail }) 501 | } 502 | }) 503 | }) 504 | }, "4") 505 | 506 | }) 507 | 508 | app.post('/api/admin/series_approved', (req, res) => { 509 | helper.Dlog(req.body) 510 | var reqObj = req.body; 511 | checkAccessToken(req.headers, res, (uObj) => { 512 | helper.CheckParameterValid(res, reqObj, ["series_id"], () => { 513 | 514 | db.query('UPDATE `car_series` AS `cs` ' + 515 | 'INNER JOIN `car_model` AS `cm` ON `cm`.`model_id` = `cs`.`model_id` ' + 516 | 'INNER JOIN `car_brand` AS `cb` ON `cs`.`brand_id` = `cb`.`brand_id` ' + 517 | 'SET `cb`.`modify_date` = NOW(), `cb`.`status` = (CASE WHEN `cb`.`status` = 0 THEN 1 ELSE 0 END), `cm`.`modify_date` = NOW(), `cm`.`status` = (CASE WHEN `cm`.`status` = 0 THEN 1 ELSE 0 END), `cs`.`modify_date` = NOW(), `cs`.`status` = (CASE WHEN `cs`.`status` = 0 THEN 1 ELSE 0 END) ' + 518 | 519 | ' WHERE `cs`.`series_id` = ? AND `cs`.`status` != ? ', [reqObj.series_id, 2], (err, result) => { 520 | if (err) { 521 | helper.ThrowHtmlError(err, res); 522 | } 523 | if (result.affectedRows > 0) { 524 | res.json({ "status": "1", "message": msg_success }) 525 | } else { 526 | res.json({ "status": "0", "message": msg_fail }) 527 | } 528 | }) 529 | }) 530 | }, "4") 531 | 532 | }) 533 | 534 | 535 | app.post('/api/admin/brand_delete', (req, res) => { 536 | helper.Dlog(req.body) 537 | var reqObj = req.body; 538 | checkAccessToken(req.headers, res, (uObj) => { 539 | helper.CheckParameterValid(res, reqObj, ["brand_id"], () => { 540 | 541 | db.query('UPDATE `car_brand` AS `cb` ' + 542 | 'LEFT JOIN `car_model` AS `cm` ON `cb`.`brand_id` = `cm`.`brand_id` ' + 543 | 'LEFT JOIN `car_series` AS `cs` ON `cs`.`model_id` = `cm`.`model_id` ' + 544 | 'SET `cm`.`modify_date` = NOW(), `cm`.`status` = 2,' + 545 | '`cb`.`modify_date` = NOW(), `cb`.`status` = 2, ' + 546 | '`cs`.`modify_date` = NOW(), `cs`.`status` = 2 ' + 547 | ' WHERE `cb`.`brand_id` = ? ', [reqObj.brand_id], (err, result) => { 548 | if (err) { 549 | helper.ThrowHtmlError(err, res); 550 | } 551 | if (result.affectedRows > 0) { 552 | res.json({ "status": "1", "message": msg_success }) 553 | } else { 554 | res.json({ "status": "0", "message": msg_fail }) 555 | } 556 | }) 557 | 558 | 559 | }) 560 | 561 | }, "4") 562 | 563 | }) 564 | 565 | app.post('/api/admin/model_delete', (req, res) => { 566 | helper.Dlog(req.body) 567 | var reqObj = req.body; 568 | checkAccessToken(req.headers, res, (uObj) => { 569 | helper.CheckParameterValid(res, reqObj, ["model_id"], () => { 570 | 571 | db.query('UPDATE `car_model` AS `cm` ' + 572 | 'LEFT JOIN `car_series` AS `cs` ON `cs`.`model_id` = `cm`.`model_id` ' + 573 | 'SET `cm`.`modify_date` = NOW(), `cm`.`status` = 2, `cs`.`modify_date` = NOW(), `cs`.`status` = 2 ' + 574 | ' WHERE `cm`.`model_id` = ? ', [reqObj.model_id], (err, result) => { 575 | if (err) { 576 | helper.ThrowHtmlError(err, res); 577 | return; 578 | } 579 | 580 | if (result.affectedRows > 0) { 581 | res.json({ "status": "1", "message": msg_success }) 582 | } else { 583 | res.json({ "status": "0", "message": msg_fail }) 584 | } 585 | }) 586 | 587 | 588 | }) 589 | 590 | }, "4") 591 | 592 | }) 593 | 594 | app.post('/api/admin/series_delete', (req, res) => { 595 | helper.Dlog(req.body) 596 | var reqObj = req.body; 597 | checkAccessToken(req.headers, res, (uObj) => { 598 | helper.CheckParameterValid(res, reqObj, ["series_id"], () => { 599 | 600 | db.query('UPDATE `car_series` AS `cs` SET `cs`.`modify_date` = NOW(), `cs`.`status` = 2 ' + 601 | ' WHERE `cs`.`series_id` = ? ', [reqObj.series_id], (err, result) => { 602 | if (err) { 603 | helper.ThrowHtmlError(err, res); 604 | } 605 | if (result.affectedRows > 0) { 606 | res.json({ "status": "1", "message": msg_success }) 607 | } else { 608 | res.json({ "status": "0", "message": msg_fail }) 609 | } 610 | }) 611 | 612 | 613 | }) 614 | 615 | }, "4") 616 | 617 | }) 618 | 619 | 620 | app.post('/api/admin/add_subscription_plan', (req, res) => { 621 | 622 | var form = new multiparty.Form(); 623 | form.parse(req, (err, reqObj, files) => { 624 | if (err) { 625 | helper.ThrowHtmlError(err, res); 626 | return; 627 | } 628 | 629 | checkAccessToken(req.headers, res, (uObj) => { 630 | helper.CheckParameterValid(res, reqObj, ["plan_name", "plan_details", "user_type", "days", "zone_id", "service_id", "min_amount", "max_ride", "max_discount", "discount_per", "amount", "start_date", "end_date"], () => { 631 | 632 | helper.CheckParameterValid(res, files, ["image"], () => { 633 | 634 | var extension = files.image[0].originalFilename.substring(files.image[0].originalFilename.lastIndexOf(".") + 1); 635 | var imageFileName = "subscription_plan/" + helper.fileNameGenerate(extension); 636 | 637 | var newPath = imageSavePath + imageFileName; 638 | 639 | fs.rename(files.image[0].path, newPath, (err) => { 640 | 641 | if (err) { 642 | helper.ThrowHtmlError(err); 643 | return; 644 | } else { 645 | db.query("INSERT INTO `subscription_plan`( `plan_name`, `detail`, `days`, `amount`, `max_discount`, `max_ride`, `zone_id`, `service_id`, `min_amount`, `discount_per`, `image`, `user_type`, `start_date`, `end_date`) VALUES (?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,? )", [ 646 | reqObj.plan_name[0], reqObj.plan_details[0], reqObj.days[0], reqObj.amount[0], reqObj.max_discount[0], reqObj.max_ride[0], reqObj.zone_id[0], reqObj.service_id[0], reqObj.min_amount[0], reqObj.discount_per[0], imageFileName, reqObj.user_type[0], reqObj.start_date[0], reqObj.end_date[0], 647 | ], (err, result) => { 648 | if (err) { 649 | helper.ThrowHtmlError(err, res); 650 | return 651 | } 652 | 653 | if (result) { 654 | res.json({ "status": "1", "message": "subscription plan added successfully" }) 655 | } else { 656 | res.json({ "status": "0", "message": msg_fail }) 657 | } 658 | }) 659 | 660 | } 661 | }) 662 | 663 | }) 664 | }) 665 | 666 | }, ut_admin) 667 | 668 | }) 669 | 670 | }) 671 | 672 | app.post('/api/admin/edit_subscription_plan', (req, res) => { 673 | 674 | var form = new multiparty.Form(); 675 | form.parse(req, (err, reqObj, files) => { 676 | if (err) { 677 | helper.ThrowHtmlError(err, res); 678 | return; 679 | } 680 | 681 | checkAccessToken(req.headers, res, (uObj) => { 682 | helper.CheckParameterValid(res, reqObj, ["plan_id", "plan_name", "plan_details", "user_type", "days", "zone_id", "service_id", "min_amount", "max_ride", "max_discount", "discount_per", "amount", "start_date", "end_date"], () => { 683 | 684 | 685 | var condition = "" 686 | 687 | if (files.image) { 688 | var extension = files.image[0].originalFilename.substring(files.image[0].originalFilename.lastIndexOf(".") + 1); 689 | var imageFileName = "subscription_plan/" + helper.fileNameGenerate(extension); 690 | 691 | var newPath = imageSavePath + imageFileName; 692 | condition = " `image ` = ? '" + imageFileName + "' , " 693 | fs.rename(files.image[0].path, newPath, (err) => { 694 | 695 | if (err) { 696 | helper.ThrowHtmlError(err); 697 | return; 698 | } 699 | }) 700 | } 701 | 702 | db.query("UPDATE `subscription_plan` SET `plan_name` = ?, `detail`= ?, `days`= ?, `amount`= ?, `max_discount`= ?, `max_ride`= ?, `zone_id`= ?, `service_id`= ?, `min_amount`= ?, `discount_per`= ?, " + condition + " `user_type` = ? , `start_date` = ?, `end_date` = ? WHERE `plan_id` = ? AND `start_date` > NOW() ", [ 703 | reqObj.plan_name[0], reqObj.plan_details[0], reqObj.days[0], reqObj.amount[0], reqObj.max_discount[0], reqObj.max_ride[0], reqObj.zone_id[0], reqObj.service_id[0], reqObj.min_amount[0], reqObj.discount_per[0], imageFileName, reqObj.user_type[0], reqObj.start_date[0], reqObj.end_date[0], reqObj.plan_id[0] 704 | ], (err, result) => { 705 | if (err) { 706 | helper.ThrowHtmlError(err, res); 707 | return 708 | } 709 | 710 | if (result.affectedRows > 0) { 711 | res.json({ "status": "1", "message": "subscription plan update successfully" }) 712 | } else { 713 | res.json({ "status": "0", "message": msg_fail }) 714 | } 715 | }) 716 | 717 | }) 718 | 719 | 720 | }, ut_admin) 721 | 722 | }) 723 | 724 | }) 725 | 726 | app.post('/api/admin/delete_subscription_plan', (req, res) => { 727 | helper.Dlog(req.body) 728 | var reqObj = req.body; 729 | 730 | checkAccessToken(req.headers, res, (uObj) => { 731 | helper.CheckParameterValid(res, reqObj, ["plan_id"], () => { 732 | 733 | db.query("UPDATE `subscription_plan` SET `status` = ?, `modify_date`= ? WHERE `plan_id` = ? ", [ 734 | reqObj.plan_id 735 | ], (err, result) => { 736 | if (err) { 737 | helper.ThrowHtmlError(err, res); 738 | return 739 | } 740 | if (result.affectedRows > 0) { 741 | res.json({ "status": "1", "message": "subscription plan deleted successfully" }) 742 | } else { 743 | res.json({ "status": "0", "message": msg_fail }) 744 | } 745 | }) 746 | 747 | }) 748 | }, ut_admin) 749 | }) 750 | 751 | app.post('/api/admin/subscription_plan_list', (req, res) => { 752 | checkAccessToken(req.headers, res, (uObj) => { 753 | 754 | db.query("SELECT `sp`.`plan_id`, `sp`.`plan_name`, `sp`.`detail`, `sp`.`days`, `sp`.`amount`, `sp`.`max_discount`, `sp`.`max_ride`, `sp`.`zone_id`, `sp`.`service_id`, `sp`.`min_amount`, `sp`.`discount_per`, `sp`.`image`, `sp`.`user_type`, `sp`.`start_date`, `sp`.`end_date`, `sp`.`status`, `sp`.`created_date`, `sp`.`modify_date`, GROUP_CONCAT(`sd`.`service_name` ) AS `service_name`, `zl`.`zone_name` FROM `subscription_plan` AS `sp` " + 755 | "INNER JOIN`zone_list` AS`zl` ON`zl`.`zone_id` = `sp`.`zone_id` " + 756 | "INNER JOIn`service_detail` AS`sd` ON FIND_IN_SET(`sd`, `service_id`, `sp`.`service_id`) != 0 AND`sd`.`status` = 1 " + 757 | "WHERE`sp`.`status` != 2 AND`sp`.`user_type` = 1 GROUP BY`sp`.`plan_id` ORDER BY`sp`.`plan_id` DESC;" + 758 | "SELECT `service_id`, `service_name` FROM `service_detail` WHERE `status` != 2 ;" + 759 | "SELECT `zone_id`, `zone_name` FROM `zone_list` WHERE `status` != 2;", [], (err, result) => { 760 | if (err) { 761 | helper.ThrowHtmlError(err, res); 762 | } 763 | res.json({ 764 | "status": "1", "payload": { 765 | "subscription_plan": result[0], 766 | "service_list": result[1], 767 | "zone_list": result[2] 768 | } 769 | }) 770 | }) 771 | }, ut_admin) 772 | 773 | }) 774 | 775 | app.post('/api/upload_image', (req, res) => { 776 | var form = new multiparty.Form(); 777 | form.parse(req, (err, reqObj, files) => { 778 | if (err) { 779 | helper.ThrowHtmlError(err, res); 780 | return; 781 | } 782 | 783 | helper.Dlog("--------------- Parameter --------------") 784 | helper.Dlog(reqObj); 785 | 786 | helper.Dlog("--------------- Files --------------") 787 | helper.Dlog(files); 788 | 789 | if (files.image != undefined || files.image != null) { 790 | var extension = files.image[0].originalFilename.substring(files.image[0].originalFilename.lastIndexOf(".") + 1); 791 | var imageFileName = helper.fileNameGenerate(extension); 792 | 793 | var newPath = imageSavePath + imageFileName; 794 | 795 | fs.rename(files.image[0].path, newPath, (err) => { 796 | 797 | if (err) { 798 | helper.ThrowHtmlError(err); 799 | return; 800 | } else { 801 | 802 | var name = reqObj.name; 803 | var address = reqObj.address; 804 | 805 | helper.Dlog(name); 806 | helper.Dlog(address); 807 | 808 | res.json({ 809 | "status": "1", 810 | "payload": { "name": name, "address": address, "image": helper.ImagePath() + imageFileName }, 811 | "message": msg_success 812 | }) 813 | } 814 | }) 815 | } 816 | }) 817 | }) 818 | 819 | } 820 | 821 | function car_brand_add(car_brand, callback) { 822 | db.query('SELECT `brand_id`, `brand_name`, `status`, `created_date`, `modify_date` FROM `car_brand` WHERE `brand_name` = ?', [car_brand.toUpperCase()], (err, result) => { 823 | if (err) { 824 | helper.ThrowHtmlError(err); 825 | return 826 | } 827 | 828 | if (result.length > 0) { 829 | //Exits 830 | db.query('UPDATE `car_brand` SET `modify_date` = (CASE WHEN `status` = "2" THEN NOW() ELSE `modify_date` END), `status` = (CASE WHEN `status` = "2" THEN 0 ELSE `status` END) WHERE `brand_id` = ? ', [result[0].brand_id], (err, result) => { 831 | if (err) { 832 | helper.ThrowHtmlError(err); 833 | } 834 | }) 835 | return callback(result[0].brand_id); 836 | } else { 837 | //Add New 838 | db.query("INSERT INTO `car_brand`( `brand_name`) VALUES (?)", [car_brand.toUpperCase()], (err, result) => { 839 | if (err) { 840 | helper.ThrowHtmlError(err); 841 | return 842 | } 843 | return callback(result.insertId); 844 | }) 845 | } 846 | }) 847 | } 848 | 849 | function car_model_add(brand_id, car_model, seat, callback) { 850 | db.query('SELECT `model_id`, `brand_id`, `model_name`, `seat`, `status`, `created_date`, `modify_date` FROM `car_model` WHERE `brand_id` = ? AND `model_name` = ? AND `seat` = ?', [brand_id, car_model.toUpperCase(), seat], (err, result) => { 851 | if (err) { 852 | helper.ThrowHtmlError(err); 853 | return 854 | } 855 | 856 | if (result.length > 0) { 857 | //Exits 858 | db.query('UPDATE `car_brand` AS `cb` ' + 859 | 'INNER JOIN `car_model` AS `cm` ON `cb`.`brand_id` = `cm`.`brand_id` ' + 860 | 'SET `cm`.`modify_date` = (CASE WHEN `cm`.`status` = "2" THEN NOW() ELSE `cm`.`modify_date` END), `cm`.`status` = (CASE WHEN `cm`.`status` = "2" THEN 0 ELSE `cm`.`status` END) ' + 861 | '`cb`.`modify_date` = (CASE WHEN `cb`.`status` = "2" THEN NOW() ELSE `cb`.`modify_date` END), `cb`.`status` = (CASE WHEN `cb`.`status` = "2" THEN 0 ELSE `cb`.`status` END)' + 862 | ' WHERE `cm`.`model_id` = ? ', [result[0].model_id], (err, result) => { 863 | if (err) { 864 | helper.ThrowHtmlError(err); 865 | } 866 | }) 867 | return callback(result[0].model_id); 868 | } else { 869 | //Add New 870 | db.query("INSERT INTO `car_model` ( `brand_id`, `model_name`, `seat` ) VALUES (?,?,?)", [brand_id, car_model.toUpperCase(), seat], (err, result) => { 871 | if (err) { 872 | helper.ThrowHtmlError(err); 873 | return 874 | } 875 | return callback(result.insertId); 876 | }) 877 | } 878 | }) 879 | } 880 | 881 | function car_series_add(brand_id, model_id, car_series, callback) { 882 | db.query('SELECT `series_id`, `brand_id`, `model_id`, `series_name`, `status`, `created_date`, `modify_date` FROM `car_series` WHERE `brand_id` = ? AND `model_id` = ? AND `series_name` = ?', [brand_id, model_id, car_series.toUpperCase()], (err, result) => { 883 | if (err) { 884 | helper.ThrowHtmlError(err); 885 | return 886 | } 887 | 888 | if (result.length > 0) { 889 | //Exits 890 | db.query('UPDATE `car_brand` AS `cb` ' + 891 | 'INNER JOIN `car_model` AS `cm` ON `cb`.`brand_id` = `cm`.`brand_id` ' + 892 | 'INNER JOIN `car_series` AS `cs` ON `cs`.`model_id` = `cm`.`model_id` ' + 893 | 'SET `cm`.`modify_date` = (CASE WHEN `cm`.`status` = "2" THEN NOW() ELSE `cm`.`modify_date` END), `cm`.`status` = (CASE WHEN `cm`.`status` = "2" THEN 0 ELSE `cm`.`status` END) ' + 894 | '`cb`.`modify_date` = (CASE WHEN `cb`.`status` = "2" THEN NOW() ELSE `cb`.`modify_date` END), `cb`.`status` = (CASE WHEN `cb`.`status` = "2" THEN 0 ELSE `cb`.`status` END)' + 895 | '`cs`.`modify_date` = (CASE WHEN `cs`.`status` = "2" THEN NOW() ELSE `cs`.`modify_date` END), `cs`.`status` = (CASE WHEN `cs`.`status` = "2" THEN 0 ELSE `cs`.`status` END)' + 896 | ' WHERE `cs`.`series_id` = ? ', [result[0].series_id], (err, result) => { 897 | if (err) { 898 | helper.ThrowHtmlError(err); 899 | } 900 | }) 901 | return callback(result[0].series_id); 902 | } else { 903 | //Add New 904 | db.query("INSERT INTO `car_series`( `brand_id`, `model_id`, `series_name` ) VALUES (?,?,?)", [brand_id, model_id, car_series], (err, result) => { 905 | if (err) { 906 | helper.ThrowHtmlError(err); 907 | return 908 | } 909 | return callback(result.insertId); 910 | }) 911 | } 912 | }) 913 | } 914 | 915 | function user_car_add(user_id, series_id, car_number, car_image_path, callback) { 916 | helper.Dlog("calling user_car_add"); 917 | db.query("SELECT `user_car_id` FROM `user_cars` WHERE `user_id` = ? AND `series_id` = ? AND `car_number` = ? AND `status` != 2 ", [user_id, series_id, car_number], (err, result) => { 918 | if (err) { 919 | helper.ThrowHtmlError(err); 920 | return callback({ "status": "0", "message": msg_fail }); 921 | } 922 | 923 | if (result.length == 0) { 924 | var extension = car_image_path.originalFilename.substring(car_image_path.originalFilename.lastIndexOf(".") + 1); 925 | var imageFileName = "car/" + helper.fileNameGenerate(extension); 926 | 927 | var newPath = imageSavePath + imageFileName; 928 | 929 | fs.rename(car_image_path.path, newPath, (err) => { 930 | 931 | if (err) { 932 | helper.ThrowHtmlError(err); 933 | return; 934 | } else { 935 | helper.Dlog("image save done"); 936 | 937 | } 938 | }) 939 | 940 | db.query("INSERT INTO `user_cars`( `user_id`, `series_id`, `car_number`, `car_image`) VALUES (?,?,?, ? )", [ 941 | user_id, series_id, car_number, imageFileName, 942 | ], (err, result) => { 943 | if (err) { 944 | helper.ThrowHtmlError(err); 945 | return callback({ "status": "0", "message": msg_fail }); 946 | } 947 | 948 | if (result) { 949 | return callback({ "status": "1", "message": "car added succfully" }); 950 | } else { 951 | return callback({ "status": "0", "message": msg_fail }); 952 | } 953 | }) 954 | 955 | } else { 956 | return callback({ "status": "0", "message": "this car already added" }); 957 | } 958 | }) 959 | } 960 | 961 | function checkAccessToken(helperObj, res, callback, requireType = "") { 962 | helper.Dlog(helperObj.access_token) 963 | helper.CheckParameterValid(res, helperObj, ["access_token"], () => { 964 | db.query('SELECT `user_id`, `name`, `email`, `gender`, `mobile`, `mobile_code`, `auth_token`, `user_type`, `is_block`, `image`, `status` FROM `user_detail` WHERE `auth_token` = ? AND (`status` = ? OR `status` = ?) ', [helperObj.access_token, "1", "2"], (err, result) => { 965 | 966 | if (err) { 967 | helper.ThrowHtmlError(err); 968 | return 969 | } 970 | 971 | helper.Dlog(result) 972 | 973 | if (result.length > 0) { 974 | if (requireType != "") { 975 | if (requireType == result[0].user_type) { 976 | return callback(result[0]) 977 | } else { 978 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 979 | } 980 | } else { 981 | return callback(result[0]) 982 | } 983 | 984 | } else { 985 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 986 | } 987 | }) 988 | }) 989 | } -------------------------------------------------------------------------------- /controllers/document_controller.js: -------------------------------------------------------------------------------- 1 | var db = require('./../helpers/db_helpers') 2 | var helper = require('./../helpers/helpers') 3 | var multiparty = require('multiparty') 4 | var fs = require('fs'); 5 | var imageSavePath = "./public/img/" 6 | 7 | //User Type: 8 | const ut_admin = 4 9 | const ut_driver = 2 10 | const ut_user = 1 11 | 12 | module.exports.controller = (app, io, socket_list) => { 13 | 14 | const msg_success = "successfully"; 15 | const msg_fail = "fail"; 16 | const msg_invalidUser = "invalid username"; 17 | const msg_no_doc = "No Document" 18 | const msg_doc_approved = "Document approved successfully" 19 | const msg_doc_unapproved = "Document unapproved successfully" 20 | const msg_doc_add = "Document added successfully" 21 | const msg_doc_update = "Document updated successfully" 22 | const msg_doc_delete = "Document delete successfully" 23 | const msg_doc_upload = "Document uploaded successfully" 24 | 25 | //App Api 26 | app.post('/api/driver_update_document', (req, res) => { 27 | 28 | var form = new multiparty.Form(); 29 | form.parse(req, (err, reqObj, files) => { 30 | if (err) { 31 | helper.ThrowHtmlError(err, res); 32 | return; 33 | } 34 | checkAccessToken(req.headers, res, (uObj) => { 35 | helper.CheckParameterValid(res, reqObj, ["doc_id", "zone_doc_id", "user_car_id", "expriry_date"], () => { 36 | 37 | helper.CheckParameterValid(res, files, ["image"], () => { 38 | 39 | helper.Dlog("working -----"); 40 | 41 | var driver_doc_id = ""; 42 | if (reqObj.driver_doc_id != undefined || reqObj.driver_doc_id != null) { 43 | driver_doc_id = reqObj.driver_doc_id[0]; 44 | } 45 | 46 | documentUpload(reqObj.doc_id[0], uObj.user_id, reqObj.expriry_date[0], files.image[0], driver_doc_id, (isDone, result) => { 47 | if (!isDone) { 48 | res.json({ "status": "0", "message": result }) 49 | } else { 50 | 51 | if (reqObj["user_car_id"][0] == "") { 52 | res.json({ "status": "1", "message": msg_doc_upload }) 53 | } else { 54 | db.query("INSERT INTO `zone_wise_doc_link`(`zone_doc_id`,`driver_doc_id`,`user_car_id`, `linked_date`) VALUES (?,?,?, NOW()) ", [reqObj.zone_doc_id[0], result, reqObj.user_car_id[0]], (err, result) => { 55 | if (err) { 56 | helper.ThrowHtmlError(err, res); 57 | return 58 | } 59 | if (result) { 60 | res.json({ "status": "1", "message": msg_doc_upload }) 61 | } else { 62 | res.json({ "status": "0", "message": msg_fail }) 63 | } 64 | }) 65 | } 66 | 67 | 68 | } 69 | }) 70 | 71 | }) 72 | }) 73 | 74 | }, "2") 75 | }) 76 | }) 77 | 78 | app.post('/api/document_list', (req, res) => { 79 | helper.Dlog(req.body); 80 | var reqObj = req.body; 81 | 82 | checkAccessToken(req.headers, res, (uObj) => { 83 | helper.CheckParameterValid(res, reqObj, ["user_car_id"], () => { 84 | db.query('SELECT IFNULL(`select_service_id`, "" ) AS `select_service_id` FROM `user_detail` WHERE `user_id` = ?', [uObj.user_id], (err, result) => { 85 | if (err) { 86 | helper.ThrowHtmlError(err, res); 87 | return 88 | } 89 | 90 | if (result.length > 0) { 91 | helper.Dlog(result); 92 | if (result[0].select_service_id != "") { 93 | db.query("SELECT `zwd`.`zone_doc_id`, `zwd`.`service_id`, `zwd`.`personal_doc`, `zwd`.`car_doc`, `sd`.`service_name`, `sd`.`color` FROM `zone_document` AS `zwd`" + 94 | "INNER JOIN`user_detail` AS`ud` ON`ud`.`zone_id` = `zwd`.`zone_id` AND`ud`.`user_id` = ? " + 95 | "INNER JOIn`service_detail` AS`sd` ON`sd`.`service_id` = `zwd`.`service_id` AND`sd`.`status` = 1 " + "AND`zwd`.`status` = 1 AND`zwd`.`service_id` IN(" + result[0].select_service_id + ") ", [uObj.user_id], (err, result) => { 96 | if (err) { 97 | helper.ThrowHtmlError(err, res); 98 | return 99 | } 100 | 101 | if (result.length > 0) { 102 | var payloadData = []; 103 | 104 | result.forEach((serviceDetail, index) => { 105 | payloadData.push(serviceDetail); 106 | var isServiceLast = false; 107 | if (serviceDetail == result.slice(-1)[0]) { 108 | isServiceLast = true; 109 | } 110 | 111 | var doc_id = ""; 112 | if (serviceDetail.personal_doc != "") { 113 | doc_id = serviceDetail.personal_doc 114 | } 115 | 116 | if (serviceDetail.car_doc != "") { 117 | if (doc_id == "") { 118 | doc_id = serviceDetail.car_doc 119 | } else { 120 | doc_id = doc_id + "," + serviceDetail.car_doc 121 | } 122 | 123 | } 124 | helper.Dlog("----- document ------") 125 | helper.Dlog(doc_id); 126 | helper.Dlog("----- service detail ------") 127 | helper.Dlog(serviceDetail); 128 | 129 | var sql_doc = "SELECT `doc_id`, `name`, `type`, `status`, `create_date`, `modify_date` FROM `document` WHERE `status` = 1 AND `doc_id` IN (" + doc_id + "); " + 130 | 'SELECT `uc`.`user_car_id`, `cs`.`series_name`, `cm`.`model_name`, `cb`.`brand_name`, `uc`.`car_number`, `uc`.`car_image` FROM `user_cars` AS `uc` ' + 131 | 'INNER JOIN `car_series` AS `cs` ON `uc`.`series_id` = `cs`.`series_id` ' + 132 | 'INNER JOIN `car_model` AS `cm` ON `cs`.`model_id` = `cm`.`model_id` ' + 133 | 'INNER JOIN `car_brand` AS `cb` ON `cb`.`brand_id` = `cm`.`brand_id` ' + 134 | "WHERE `uc`.`user_id` = ? AND `uc`.`status` != 2 "; 135 | 136 | helper.Dlog(sql_doc); 137 | db.query(sql_doc, [uObj.user_id], (err, docResult) => { 138 | 139 | if (err) { 140 | helper.ThrowHtmlError(err); 141 | return; 142 | } 143 | 144 | serviceDetail.cars_list = [] 145 | 146 | helper.Dlog(docResult[1]); 147 | 148 | docResult[1].forEach((carDetail, index) => { 149 | 150 | var is_car_doc_last = false; 151 | if (carDetail == docResult[1].slice(-1)[0]) { 152 | is_car_doc_last = true; 153 | } 154 | 155 | serviceDetail.cars_list.push(carDetail); 156 | 157 | var sqlCarDoc = 'SELECT `zwdl`.`zone_link_id`, `zwdl`.`driver_doc_id`, `zwdl`.`doc_status`, `zwdl`.`linked_date`, `dd`.`doc_id`, IFNULL( `dd`.`doc_image`, "" ) AS `doc_image`, `dd`.`expiry_date`, `dd`.`created_date`, `dd`.`status`, `d`.`type`, `d`.`name` AS `doc_name` FROM `zone_wise_doc_link` AS `zwdl` ' + 158 | 'INNER JOIN `zone_document` AS `zwd` ON`zwd`.`zone_doc_id` = `zwdl`.`zone_doc_id` ' + 159 | 'INNER JOIN `driver_document` AS `dd` ON`dd`.`driver_doc_id` = `zwdl`.`driver_doc_id` AND`dd`.`status` != 1 ' + 160 | 'INNER JOIN `document` AS `d` ON `dd`.`doc_id` = `d`.`doc_id` ' + 161 | 'WHERE `dd`.`user_id` = ? AND`zwdl`.`user_car_id` = ? AND`zwd`.`zone_doc_id` = ? AND`zwdl`.`doc_status` != 1'; 162 | 163 | db.query(sqlCarDoc, [uObj.user_id, carDetail.user_car_id, serviceDetail.zone_doc_id], (err, carDoc) => { 164 | if (err) { 165 | helper.ThrowHtmlError(err); 166 | return; 167 | } 168 | carDetail.doc_list = []; 169 | for (let i = 0; i < docResult[0].length; i++) { 170 | var isSet = false; 171 | for (let j = 0; j < carDoc.length; j++) { 172 | if (docResult[0][i].doc_id == carDoc[j].doc_id) { 173 | carDetail.doc_list.push(carDoc[j]) 174 | isSet = true; 175 | } 176 | } 177 | 178 | if (!isSet) { 179 | docResult[0][i].expriry_date = ""; 180 | docResult[0][i].status = -1; 181 | docResult[0][i].doc_status = ""; 182 | docResult[0][i].linked_date = ""; 183 | docResult[0][i].doc_image = ""; 184 | carDetail.doc_list.push(docResult[0][i]) 185 | } 186 | 187 | } 188 | 189 | if (isServiceLast && is_car_doc_last) { 190 | 191 | console.log(payloadData) 192 | res.json({ "status": "1", "payload": payloadData }) 193 | } 194 | }) 195 | 196 | }); 197 | 198 | 199 | }) 200 | 201 | }); 202 | } else { 203 | res.json({ "status": "0", "message": msg_no_doc }) 204 | } 205 | 206 | }) 207 | } else { 208 | res.json({ "status": "0", "message": "Please select service" }) 209 | } 210 | // res.json({ "status": "1", "payload": result }) 211 | } else { 212 | res.json({ "status": "0", "message": msg_invalidUser }) 213 | } 214 | }) 215 | }) 216 | }, "2") 217 | }) 218 | 219 | app.post('/api/personal_document_list', (req, res) => { 220 | helper.Dlog(req.body); 221 | var reqObj = req.body; 222 | 223 | checkAccessToken(req.headers, res, (uObj) => { 224 | 225 | db.query("SELECT `zl`.`zone_name`, `zl`.`zone_id`, `zld`.`zone_doc_id`, `zld`.`service_id`, `sd`.`service_name`, `zld`.`personal_doc`, `d`.`name`, `d`.`type`, `d`.`doc_id`, `dd`.`doc_image`, `dd`.`expiry_date`, `dd`.`status`, `dd`.`created_date`, `dd`.`driver_doc_id` FROM `user_detail` AS `ud` " + 226 | "INNER JOIN `zone_list` AS `zl` ON `zl`.`zone_id` = `ud`.`zone_id` AND `zl`.`status` = 1 AND `ud`.`user_id` = ? " + 227 | "INNER JOIN `zone_document` AS `zld` ON `zld`.`zone_id` = `zl`.`zone_id` AND FIND_IN_SET( `zld`.`service_id`, `ud`.`select_service_id` ) > 0 AND `zld`.`status` = 1 " + 228 | "INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `zld`.`service_id` AND `sd`.`status` = 1 " + 229 | "INNER JOIN `document` AS `d` ON FIND_IN_SET( `d`.`doc_id`, `zld`.`personal_doc` ) > 0 AND `d`.`status` = 1 " + 230 | "LEFT JOIN `driver_document` AS `dd` ON `dd`.`doc_id` = `d`.`doc_id` AND `dd`.`user_id` = `ud`.`user_id` AND `dd`.`status` != 1;", [uObj.user_id], (err, result) => { 231 | 232 | if (err) { 233 | helper.ThrowHtmlError(err, res); 234 | return 235 | } 236 | 237 | if (result.length > 0) { 238 | res.json({ 239 | 'status': '1', 240 | 'payload': result 241 | }) 242 | } else { 243 | res.json({ 244 | 'status': "0", 245 | "message": "Please select any one zone & any one provide service type" 246 | }) 247 | } 248 | 249 | }) 250 | }) 251 | 252 | 253 | }) 254 | 255 | app.post('/api/car_document_list', ( req, res) => { 256 | 257 | helper.Dlog(req.body); 258 | var reqObj = req.body 259 | checkAccessToken(req.headers, res, (uObj) => { 260 | helper.CheckParameterValid(res, reqObj, ["user_car_id"], () => { 261 | db.query("SELECT `zl`.`zone_name`, `zl`.`zone_id`, `zld`.`zone_doc_id`, `zld`.`service_id`, `sd`.`service_name`, `zld`.`personal_doc`, `d`.`name`, `d`.`type`, `d`.`doc_id`, `dd`.`doc_image`, `dd`.`expiry_date`, `dd`.`status`, `dd`.`created_date`, `dd`.`driver_doc_id`, `zwdl`.`zone_link_id`, `zwdl`.`doc_status` FROM `user_detail` AS `ud`" + 262 | "INNER JOIN `zone_list` AS `zl` ON `zl`.`zone_id` = `ud`.`zone_id` AND `zl`.`status` = 1 AND `ud`.`user_id` = ? " + 263 | "INNER JOIN `zone_document` AS `zld` ON `zld`.`zone_id` = `zl`.`zone_id` AND FIND_IN_SET ( `zld`.`service_id`, `ud`.`select_service_id` ) > 0 AND `zld`.`status` = 1 " + 264 | "INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `zld`.`service_id` AND `sd`.`status` = 1 " + 265 | "INNER JOIN `document` AS `d` ON FIND_IN_SET(`d`.`doc_id`, `zld`.`car_doc` ) > 0 AND `d`.`status` = 1 " + 266 | "LEFT JOIN `zone_wise_doc_link` AS `zwdl` ON `zwdl`.`zone_doc_id` = `zld`.`zone_doc_id` AND `zwdl`.`user_car_id` = ? AND `zwdl`.`doc_status` != 1 " + 267 | "LEFT JOIN `driver_document` AS `dd` ON `dd`.`driver_doc_id` = `zwdl`.`driver_doc_id` AND `dd`.`user_id` = `ud`.`user_id` AND `dd`.`status` != 1; ", [ 268 | uObj.user_id, 269 | reqObj.user_car_id 270 | ], (err, result) => { 271 | 272 | if(err) { 273 | helper.ThrowHtmlError(err, res); 274 | return 275 | } 276 | 277 | if(result.length > 0) { 278 | res.json({ 279 | 'status':'1', 280 | 'payload': result 281 | }) 282 | }else{ 283 | res.json({ 284 | 'status':"0", 285 | "message":"Please select any one zone & any one provide service type" 286 | }) 287 | } 288 | 289 | } ) 290 | }) 291 | }) 292 | 293 | }) 294 | 295 | 296 | //Admin Api 297 | app.post('/api/admin/add_document', (req, res) => { 298 | helper.Dlog(req.body) 299 | var reqObj = req.body; 300 | 301 | checkAccessToken(req.headers, res, (uObj) => { 302 | helper.CheckParameterValid(res, reqObj, ["document_name", "document_type"], () => { 303 | 304 | db.query("INSERT INTO `document`(`name`, `type`) VALUES (?,?) ", [reqObj.document_name, reqObj.document_type], (err, result) => { 305 | if (err) { 306 | helper.ThrowHtmlError(err, res); 307 | return 308 | } 309 | 310 | if (result) { 311 | res.json({ 312 | "status": "1", "payload": { 313 | "doc_id": result.insertId, 314 | "name": reqObj.document_name, 315 | "type": reqObj.document_type, 316 | "status": 0, 317 | }, "message": msg_doc_add 318 | }) 319 | } else { 320 | res.json({ "status": "0", "message": msg_fail }) 321 | } 322 | }) 323 | }) 324 | }, "4") 325 | }) 326 | 327 | app.post('/api/admin/document_list', (req, res) => { 328 | checkAccessToken(req.headers, res, (uObj) => { 329 | db.query('SELECT `doc_id`, `name`, `type`, `status` FROM `document` WHERE `status` != ?', [2], (err, result) => { 330 | if (err) { 331 | helper.ThrowHtmlError(err, res); 332 | return 333 | } 334 | 335 | if (result.length > 0) { 336 | res.json({ "status": "1", "payload": result }) 337 | 338 | } else { 339 | res.json({ "status": "0", "message": msg_no_doc }) 340 | } 341 | }) 342 | }, "4") 343 | 344 | }) 345 | 346 | app.post('/api/admin/document_delete', (req, res) => { 347 | helper.Dlog(req.body); 348 | var reqObj = req.body; 349 | checkAccessToken(req.headers, res, (uObj) => { 350 | helper.CheckParameterValid(res, reqObj, ["doc_id"], () => { 351 | 352 | db.query('UPDATE `document` SET `status`=2, `modify_date`=NOW() WHERE `doc_id` = ? AND `status` != 2', [reqObj.doc_id], (err, result) => { 353 | if (err) { 354 | helper.ThrowHtmlError(err, res); 355 | } 356 | if (result.affectedRows > 0) { 357 | res.json({ "status": "1", "message": msg_doc_delete }) 358 | } else { 359 | res.json({ "status": "0", "message": msg_fail }) 360 | } 361 | }) 362 | }) 363 | }, "4") 364 | }) 365 | 366 | app.post('/api/admin/document_update', (req, res) => { 367 | helper.Dlog(req.body); 368 | var reqObj = req.body; 369 | 370 | checkAccessToken(req.headers, res, (uObj) => { 371 | helper.CheckParameterValid(res, reqObj, ["doc_id", "document_name", "document_type"], () => { 372 | 373 | db.query('UPDATE `document` SET `name`=?, `type` = ?, `modify_date`=NOW() WHERE `doc_id` = ? AND `status` != 2', [reqObj.document_name, reqObj.document_type, reqObj.doc_id], (err, result) => { 374 | if (err) { 375 | helper.ThrowHtmlError(err, res); 376 | } 377 | if (result.affectedRows > 0) { 378 | res.json({ "status": "1", "message": msg_doc_update }) 379 | } else { 380 | res.json({ "status": "0", "message": msg_fail }) 381 | } 382 | }) 383 | }) 384 | }, "4") 385 | }) 386 | 387 | // app.post('/api/upload_image', (req, res) => { 388 | // var form = new multiparty.Form(); 389 | // form.parse(req, (err, reqObj, files) => { 390 | // if (err) { 391 | // helper.ThrowHtmlError(err, res); 392 | // return; 393 | // } 394 | 395 | // helper.Dlog("--------------- Parameter --------------") 396 | // helper.Dlog(reqObj); 397 | 398 | // helper.Dlog("--------------- Files --------------") 399 | // helper.Dlog(files); 400 | 401 | // if (files.image != undefined || files.image != null) { 402 | // var extension = files.image[0].originalFilename.substring(files.image[0].originalFilename.lastIndexOf(".") + 1); 403 | // var imageFileName = helper.fileNameGenerate(extension); 404 | 405 | // var newPath = imageSavePath + imageFileName; 406 | 407 | // fs.rename(files.image[0].path, newPath, (err) => { 408 | 409 | // if (err) { 410 | // helper.ThrowHtmlError(err); 411 | // return; 412 | // } else { 413 | 414 | // var name = reqObj.name; 415 | // var address = reqObj.address; 416 | 417 | // helper.Dlog(name); 418 | // helper.Dlog(address); 419 | 420 | // res.json({ 421 | // "status": "1", 422 | // "payload": { "name": name, "address": address, "image": helper.ImagePath() + imageFileName }, 423 | // "message": msg_success 424 | // }) 425 | // } 426 | // }) 427 | // } 428 | // }) 429 | // }) 430 | 431 | } 432 | 433 | function documentUpload(doc_id, user_id, expriry_date, image, driver_doc_id, callback) { 434 | if (driver_doc_id == undefined || driver_doc_id == "") { 435 | // 436 | var extension = image.originalFilename.substring(image.originalFilename.lastIndexOf(".") + 1); 437 | var imageFileName = "car/" + helper.fileNameGenerate(extension); 438 | 439 | var newPath = imageSavePath + imageFileName; 440 | 441 | fs.rename(image.path, newPath, (err) => { 442 | 443 | if (err) { 444 | helper.ThrowHtmlError(err); 445 | return callback(false, "document upload fail") 446 | 447 | } else { 448 | 449 | db.query("INSERT INTO `driver_document`( `doc_id`, `user_id`, `doc_image`, `expiry_date`) VALUES (?,?,?, ?)", [doc_id, user_id, imageFileName, expriry_date], (err, result) => { 450 | if (err) { 451 | helper.ThrowHtmlError(err); 452 | return callback(false, "document upload fail") 453 | } 454 | 455 | if (result) { 456 | return callback(true, result.insertId) 457 | } else { 458 | return callback(false, "document upload fail") 459 | } 460 | }) 461 | } 462 | }) 463 | } else { 464 | db.query("SELECT * FROM `driver_document` WHERE `driver_doc_id` = ? AND `user_id` = ? AND `doc_id` = ? ", [driver_doc_id, user_id, doc_id], (err, result) => { 465 | if (err) { 466 | helper.ThrowHtmlError(err); 467 | return callback(true, "document upload fail") 468 | 469 | } else { 470 | if (result.length > 0) { 471 | return callback(true, result[0].driver_doc_id) 472 | } else { 473 | return callback(false, "invalid document") 474 | } 475 | } 476 | 477 | }) 478 | } 479 | } 480 | 481 | 482 | function checkAccessToken(helperObj, res, callback, requireType = "") { 483 | helper.Dlog(helperObj.access_token) 484 | helper.CheckParameterValid(res, helperObj, ["access_token"], () => { 485 | db.query('SELECT `user_id`, `name`, `email`, `gender`, `mobile`, `mobile_code`, `auth_token`, `user_type`, `is_block`, `image`, `status` FROM `user_detail` WHERE `auth_token` = ? AND (`status` = ? OR `status` = ?) ', [helperObj.access_token, "1", "2"], (err, result) => { 486 | 487 | if (err) { 488 | helper.ThrowHtmlError(err); 489 | return 490 | } 491 | 492 | helper.Dlog(result) 493 | 494 | if (result.length > 0) { 495 | if (requireType != "") { 496 | if (requireType == result[0].user_type) { 497 | return callback(result[0]) 498 | } else { 499 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 500 | } 501 | } else { 502 | return callback(result[0]) 503 | } 504 | 505 | } else { 506 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 507 | } 508 | }) 509 | }) 510 | } -------------------------------------------------------------------------------- /controllers/login_controller.js: -------------------------------------------------------------------------------- 1 | var db = require('./../helpers/db_helpers') 2 | var helper = require('./../helpers/helpers') 3 | var multiparty = require('multiparty') 4 | var fs = require('fs'); 5 | var imageSavePath = "./public/img/" 6 | 7 | //User Type: 8 | const ut_admin = 4 9 | const ut_driver = 2 10 | const ut_user = 1 11 | 12 | module.exports.controller = (app, io, socket_list) => { 13 | 14 | const msg_success = "successfully"; 15 | const msg_fail = "fail"; 16 | const msg_invalidUser = "invalid username"; 17 | 18 | app.post('/api/login', (req, res) => { 19 | helper.Dlog(req.body); 20 | var reqObj = req.body; 21 | 22 | helper.CheckParameterValid(res, reqObj, ["user_type", "mobile_code", "mobile", "os_type", "push_token", "socket_id"], () => { 23 | 24 | db.query('SELECT `user_id`, `name`, `email`, `gender`, `mobile`, `mobile_code`, `user_type`, `is_block`, `image`, `status` FROM `user_detail` WHERE `mobile` = ? AND `mobile_code` = ? AND `user_type` = ? ', [reqObj.mobile, reqObj.mobile_code, reqObj.user_type], (err, result) => { 25 | 26 | if (err) { 27 | helper.ThrowHtmlError(err, res); 28 | return 29 | } 30 | 31 | if (result.length > 0) { 32 | var auth_token = helper.createRequestToken(); 33 | db.query("UPDATE `user_detail` SET `auth_token` = ?, `modify_date` = NOW() WHERE `mobile` = ? AND `mobile_code` = ? AND `user_type` = ? ", [auth_token, reqObj.mobile, reqObj.mobile_code, reqObj.user_type], (err, uResult) => { 34 | if (err) { 35 | helper.ThrowHtmlError(err, res); 36 | return 37 | } 38 | if (uResult.affectedRows > 0) { 39 | getUserDetailUserId(result[0].user_id, (isDone, uObj) => { 40 | res.json({ "status": "1", "payload": uObj }) 41 | }) 42 | } 43 | 44 | }) 45 | 46 | } else { 47 | var auth_token = helper.createRequestToken(); 48 | db.query("INSERT INTO `user_detail` ( `mobile`, `mobile_code`,`user_type`, `push_token`, `auth_token`, `device_source`, `status` ) VALUES (?,?,?, ?,?,?, ?)", [ 49 | reqObj.mobile, reqObj.mobile_code, reqObj.user_type, reqObj.push_token, auth_token, reqObj.os_type, "1" 50 | ], (err, result) => { 51 | if (err) { 52 | helper.ThrowHtmlError(err, res); 53 | return 54 | } 55 | 56 | if (result) { 57 | getUserDetailUserId(result.insertId, (isDone, uObj) => { 58 | res.json({ "status": "1", "payload": uObj }) 59 | }) 60 | } else { 61 | res.json({ "status": "0", "message": msg_fail }) 62 | } 63 | }) 64 | } 65 | }) 66 | }) 67 | }) 68 | 69 | app.post('/api/static_data', (req, res) => { 70 | helper.Dlog(req.body); 71 | var reqObj = req.body; 72 | helper.CheckParameterValid(res, reqObj, ["last_call_time"], () => { 73 | 74 | var lastCallTime = reqObj.last_call_time 75 | 76 | if (!lastCallTime || lastCallTime == "") { 77 | lastCallTime = "2023-08-01 00:00:00" 78 | } 79 | 80 | db.query( 81 | "SELECT * FROM `zone_list` WHERE `modify_date` >= ? ;" + 82 | 'SELECT `service_id`, `service_name`, `seat`, `color`, (CASE WHEN `icon` != "" THEN CONCAT( "' + helper.ImagePath() + '" , `icon` ) ELSE "" END) AS `icon`, (CASE WHEN `top_icon` != "" THEN CONCAT( "' + helper.ImagePath() + '" , `top_icon` ) ELSE "" END) AS `top_icon`, `gender`, `status`, `created_date`, `modify_date`, `description` FROM `service_detail` WHERE `modify_date` >= ? ;' + 83 | "SELECT * FROM `price_detail` WHERE `modify_date` >= ? ;" + 84 | "SELECT * FROM `document` WHERE `modify_date` >= ? ;" + 85 | "SELECT * FROM `zone_document` WHERE `modify_date` >= ? ;", 86 | 87 | [lastCallTime, lastCallTime, lastCallTime, lastCallTime, lastCallTime,], (err, result) => { 88 | if (err) { 89 | helper.ThrowHtmlError(err, res); 90 | return 91 | } 92 | 93 | res.json( 94 | { 95 | "status": "1", 96 | "payload": 97 | 98 | { 99 | "zone_list": result[0], 100 | "service_detail": result[1], 101 | "price_detail": result[2], 102 | "document": result[3], 103 | "zone_document": result[4], 104 | } 105 | }) 106 | } 107 | ) 108 | }) 109 | }) 110 | 111 | function getUserDetailUserId(user_id, callback) { 112 | db.query('SELECT `user_id`, `name`, `email`, `gender`, `mobile`, `mobile_code`, `auth_token`, `user_type`, `is_block`, (CASE WHEN `image` != "" THEN CONCAT( "' + helper.ImagePath() + '" , `image` ) ELSE "" END) AS `image`, `status`, `zone_id`, `select_service_id` FROM `user_detail` WHERE `user_id` = ? ', [user_id], (err, result) => { 113 | 114 | if (err) { 115 | helper.ThrowHtmlError(err); 116 | return callback(false, []) 117 | } 118 | 119 | if (result.length > 0) { 120 | return callback(true, result[0]) 121 | } else { 122 | return callback(false, []) 123 | } 124 | }) 125 | } 126 | 127 | app.post('/api/driver_online', (req, res) => { 128 | helper.Dlog(req.body); 129 | var reqObj = req.body 130 | checkAccessToken(req.headers, res, (uObj) => { 131 | helper.CheckParameterValid(res, reqObj, ['is_online'], () => { 132 | 133 | db.query( 134 | "SELECT `ud`.`user_id`, `ud`.`car_id`, `ud`.`status`, `ucd`.`status` AS `car_status`, `zwcs`.`zone_service_id` FROM `user_detail` AS `ud` " + 135 | "LEFT JOIN `user_cars` AS `ucd` ON `ud`.`car_id` = `ucd`.`user_car_id` " + 136 | "LEFT JOIN `zone_document` AS `zd` ON `ud`.`zone_id` = `zd`.`zone_id` " + 137 | "LEFT JOIN `zone_wise_cars_service` AS `zwcs` ON `zwcs`.`user_car_id` = `ucd`.`user_car_id` AND `zwcs`.`zone_doc_id` = `zd`.`zone_doc_id` AND `zwcs`.`status` = '1' AND `zwcs`.`service_provide` = '1' " + 138 | "WHERE `ud`.`user_id` = ? AND `ud`.`user_type` = ? ORDER BY`zwcs`.`zone_service_id` DESC ", [uObj.user_id, ut_driver], (err, result) => { 139 | if (err) { 140 | helper.ThrowHtmlError(err, res); 141 | return 142 | } 143 | 144 | 145 | 146 | if (result.length > 0) { 147 | 148 | if (reqObj.is_online == 0) { 149 | //Offline 150 | if (result[0].status == 2) { 151 | //Not Offline Driver ride is started 152 | res.json({ 153 | "status": "0", 154 | "message": "please complete ride after offline !" 155 | }) 156 | return 157 | } 158 | } else { 159 | //Online 160 | 161 | if (result[0].status == 0 || result[0].status == -1) { 162 | 163 | res.json({ 164 | "status": "0", 165 | "message": "Your account not approved" 166 | }) 167 | return 168 | } 169 | if (result[0].car_id == undefined || result[0].car_id == "") { 170 | res.json({ 171 | "status": "0", 172 | "message": "Not select on ride car!" 173 | }) 174 | return 175 | } 176 | if (result[0].car_id != undefined && result[0].car_id != "" && result[0].car_status != 1) { 177 | res.json({ 178 | "status": "0", 179 | "message": "Not select on ride car!" 180 | }) 181 | return 182 | } 183 | 184 | if (result[0].zone_service_id == undefined || result[0].zone_service_id == "") { 185 | res.json({ 186 | "status": "0", 187 | "message": "Please select on ride car provide service" 188 | }) 189 | return 190 | } 191 | } 192 | 193 | var status_condition = "=" 194 | if (reqObj.is_online == 1) { 195 | status_condition = ">=" 196 | } 197 | 198 | db.query("UPDATE `user_detail` SET `is_online` = ? WHERE `user_id` = ? AND `status` " + status_condition + " ?", [reqObj.is_online, uObj.user_id, 1], (err, result) => { 199 | if (err) { 200 | helper.ThrowHtmlError(err, res); 201 | return 202 | } 203 | 204 | if (result.affectedRows > 0) { 205 | var msg = "You're Offline" 206 | 207 | if (reqObj.is_online == 1) { 208 | msg = "You're Online" 209 | } 210 | 211 | res.json({ 212 | 'status': '1', 213 | 'is_online': reqObj.is_online, 214 | 'message': msg 215 | }) 216 | 217 | } else { 218 | res.json({ 219 | 'status': '0', 220 | 'message': msg_fail 221 | }) 222 | } 223 | }) 224 | 225 | } else { 226 | res.json({ 227 | 'status': '0', 228 | 'message': msg_fail 229 | }) 230 | } 231 | 232 | 233 | } 234 | ) 235 | }) 236 | }) 237 | }) 238 | 239 | app.post('/api/admin/login', (req, res) => { 240 | helper.Dlog(req.body); 241 | var reqObj = req.body; 242 | 243 | helper.CheckParameterValid(res, reqObj, ["email", "password", "socket_id"], () => { 244 | 245 | var auth_token = helper.createRequestToken(); 246 | db.query("UPDATE `user_detail` SET `auth_token` = ? , `modify_date` = NOW() WHERE `email` = ? AND `password` = ? AND `user_type` = ? ", [auth_token, reqObj.email, reqObj.password, ut_admin], (err, result) => { 247 | if (err) { 248 | helper.ThrowHtmlError(err, res); 249 | return 250 | } 251 | 252 | if (result.affectedRows > 0) { 253 | db.query('SELECT `user_id`, `name`, `email`, `auth_token` , `gender`, `mobile`, `mobile_code`, `user_type`, `is_block`, `image`, `status` FROM `user_detail` WHERE `email` = ? AND `password` = ? AND `user_type` = ? ', [reqObj.email, reqObj.password, ut_admin], (err, result) => { 254 | 255 | if (err) { 256 | helper.ThrowHtmlError(err, res); 257 | return 258 | } 259 | 260 | res.json({ "status": "1", "payload": result[0] }) 261 | }) 262 | 263 | } else { 264 | res.json({ "status": "0", "message": "invalid email & password" }) 265 | } 266 | }) 267 | 268 | 269 | }) 270 | 271 | }) 272 | 273 | app.post('/api/profile_update', (req, res) => { 274 | helper.Dlog(req.body) 275 | var reqObj = req.body; 276 | 277 | checkAccessToken(req.headers, res, (uObj) => { 278 | 279 | var check = ["name", "gender", "email", "mobile", "mobile_code"] 280 | 281 | if (uObj.user_type == ut_driver) { 282 | check.push('zone_id') 283 | check.push('select_service_id') 284 | } 285 | helper.CheckParameterValid(res, reqObj, check, () => { 286 | 287 | db.query("SELECT `user_id`, `mobile`, `mobile_code` FROM `user_detail` WHERE `user_id` != ? AND `mobile` = ? AND `mobile_code` = ? ", [uObj.user_id, reqObj.mobile, reqObj.mobile_code], (err, result) => { 288 | if (err) { 289 | helper.ThrowHtmlError(err, res); 290 | return 291 | } 292 | 293 | if (result.length == 0) { 294 | 295 | var select_service_id = "" 296 | var zone_id = "" 297 | if (uObj.user_type == ut_driver) { 298 | zone_id = reqObj.zone_id 299 | select_service_id = reqObj.select_service_id 300 | } 301 | db.query("UPDATE `user_detail` SET `name` = ?, `email` = ?, `gender` = ?, `mobile` = ? , `mobile_code` = ?, `zone_id` = ?, `select_service_id` = ? WHERE `user_id` = ? ", [ 302 | reqObj.name, reqObj.email, reqObj.gender, reqObj.mobile, reqObj.mobile_code, zone_id, select_service_id, uObj.user_id 303 | ], (err, result) => { 304 | 305 | if (err) { 306 | helper.ThrowHtmlError(err, res); 307 | return 308 | } 309 | 310 | if (result.affectedRows > 0) { 311 | getUserDetailUserId(uObj.user_id, (isDone, userObj) => { 312 | res.json({ "status": "1", "payload": userObj }) 313 | }) 314 | } else { 315 | res.json({ "status": "0", "message": msg_fail }) 316 | } 317 | }) 318 | 319 | } else { 320 | res.json({ "status": "0", "message": "mobile number exits" }) 321 | } 322 | 323 | }) 324 | }) 325 | }) 326 | }) 327 | 328 | app.post('/api/profile_image', (req, res) => { 329 | helper.Dlog(req.body); 330 | 331 | var form = new multiparty.Form(); 332 | form.parse(req, (err, reqObj, files) => { 333 | if (err) { 334 | helper.ThrowHtmlError(err, res); 335 | return 336 | } 337 | 338 | checkAccessToken(req.headers, res, (uObj) => { 339 | helper.CheckParameterValid(res, files, ["image"], () => { 340 | 341 | var extension = files.image[0].originalFilename.substring(files.image[0].originalFilename.lastIndexOf(".") + 1) 342 | var imageFileName = "profile/" + helper.fileNameGenerate(extension); 343 | 344 | var newPath = imageSavePath + imageFileName; 345 | fs.rename(files.image[0].path, newPath, (err) => { 346 | if (err) { 347 | helper.ThrowHtmlError(err, res); 348 | return; 349 | } else { 350 | db.query("UPDATE `user_detail` SET `image` = ? WHERE `user_id` = ? ", [imageFileName, uObj.user_id], (err, result) => { 351 | 352 | if (err) { 353 | helper.ThrowHtmlError(err, res); 354 | return 355 | } 356 | 357 | if (result.affectedRows > 0) { 358 | 359 | getUserDetailUserId(uObj.user_id, (isDone, uObj) => { 360 | res.json({ "status": "1", "payload": uObj }) 361 | }) 362 | 363 | 364 | } else { 365 | res.json({ "status": "0", "message": msg_fail }) 366 | } 367 | }) 368 | } 369 | 370 | 371 | }) 372 | }) 373 | }) 374 | 375 | }) 376 | 377 | }) 378 | 379 | 380 | app.post('/api/service_and_zone_list', (req, res) => { 381 | helper.Dlog(req.body); 382 | var reqObj = req.body; 383 | 384 | checkAccessToken(req.headers, res, (uObj) => { 385 | db.query("SELECT `zl`.`zone_id`, `zl`.`zone_name` FROM `zone_list` AS `zl` " + 386 | "INNER JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`status` = 1 " + 387 | "INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `pd`.`service_id` AND `sd`.`status` = 1 AND `zl`.`status` = 1 " + 388 | "GROUP BY `zl`.`zone_id` ;" + 389 | "SELECT `service_id`, `service_name`, `seat`, `color`, ( CASE WHEN `icon` != '' THEN CONCAT('" + helper.ImagePath() + "', `icon` ) ELSE '' END ) AS `icon`, " + 390 | " (CASE WHEN `top_icon` != '' THEN CONCAT('" + helper.ImagePath() + "',`top_icon`) ELSE '' END) AS `top_icon` FROM `service_detail` " + 391 | "WHERE `status` = 1 ", [], (err, result) => { 392 | if (err) { 393 | helper.ThrowHtmlError(err, res); 394 | return; 395 | } 396 | 397 | res.json({ 398 | 'status': '1', 399 | 'payload': { 400 | 'zone_list': result[0], 401 | 'service_list': result[1] 402 | } 403 | }) 404 | }) 405 | }) 406 | 407 | 408 | }) 409 | 410 | 411 | app.post('/api/address_add', (req, res) => { 412 | helper.Dlog(req.body) 413 | var reqObj = req.body; 414 | 415 | checkAccessToken(req.headers, res, (uObj) => { 416 | 417 | helper.CheckParameterValid(res, reqObj, ["tag_name", "address", "lati", "longi"], () => { 418 | 419 | db.query("INSERT INTO `user_address`(`user_id`, `address`, `lati`, `longi`, `tag_name`) VALUES (?,?,?, ?,?) ", [uObj.user_id, reqObj.address, reqObj.lati, reqObj.longi, reqObj.tag_name], (err, result) => { 420 | if (err) { 421 | helper.ThrowHtmlError(err, res); 422 | return 423 | } 424 | 425 | if (result) { 426 | 427 | 428 | db.query("SELECT `address_id`, `user_id`, `address`, `lati`, `longi`, `tag_name`, `created_date`FROM `user_address` WHERE WHERE `user_id` = ? AND `status` != ? ", [ 429 | uObj.user_id, "2" 430 | ], (err, result) => { 431 | 432 | if (err) { 433 | helper.ThrowHtmlError(err, res); 434 | return 435 | } 436 | 437 | res.json({ "status": "1", "payload": result, "message": msg_success }) 438 | }) 439 | 440 | } else { 441 | res.json({ "status": "0", "message": msg_fail }) 442 | } 443 | 444 | }) 445 | }) 446 | 447 | 448 | }, "1") 449 | }) 450 | 451 | app.post('/api/address_edit', (req, res) => { 452 | helper.Dlog(req.body) 453 | var reqObj = req.body; 454 | 455 | checkAccessToken(req.headers, res, (uObj) => { 456 | 457 | helper.CheckParameterValid(res, reqObj, ["address_id", "tag_name", "address", "lati", "longi"], () => { 458 | 459 | db.query("UPDATE `user_address` SET `address`=?,`lati`=?,`longi`=?,`tag_name`=?,`modify_date`=NOW() WHERE `address_id` = ? AND `user_id` = ? AND `status` != 2", [reqObj.address, reqObj.lati, reqObj.longi, reqObj.tag_name, reqObj.address_id, uObj.user_id], (err, result) => { 460 | if (err) { 461 | helper.ThrowHtmlError(err, res); 462 | return 463 | } 464 | 465 | if (result.affectedRows > 0) { 466 | 467 | 468 | res.json({ "status": "1", "payload": result, "message": msg_success }) 469 | 470 | } else { 471 | res.json({ "status": "0", "message": msg_fail }) 472 | } 473 | 474 | }) 475 | }) 476 | }, "1") 477 | }) 478 | 479 | app.post('/api/address_delete', (req, res) => { 480 | helper.Dlog(req.body) 481 | var reqObj = req.body; 482 | 483 | checkAccessToken(req.headers, res, (uObj) => { 484 | 485 | helper.CheckParameterValid(res, reqObj, ["address_id"], () => { 486 | 487 | db.query("UPDATE `user_address` SET `status`=2, `modify_date`=NOW() WHERE `address_id` = ? AND `user_id` = ? AND `status` != 2", [reqObj.address_id, uObj.user_id], (err, result) => { 488 | if (err) { 489 | helper.ThrowHtmlError(err, res); 490 | return 491 | } 492 | 493 | if (result.affectedRows > 0) { 494 | 495 | res.json({ "status": "1", "payload": result, "message": msg_success }) 496 | 497 | } else { 498 | res.json({ "status": "0", "message": msg_fail }) 499 | } 500 | 501 | }) 502 | }) 503 | }, "1") 504 | }) 505 | 506 | app.post('/api/address_list', (req, res) => { 507 | helper.Dlog(req.body) 508 | var reqObj = req.body; 509 | 510 | checkAccessToken(req.headers, res, (uObj) => { 511 | db.query("SELECT `address_id`, `user_id`, `address`, `lati`, `longi`, `tag_name`, `created_date`FROM `user_address` WHERE `user_id` = ? AND `status` != ? ", [ 512 | uObj.user_id, "2" 513 | ], (err, result) => { 514 | 515 | if (err) { 516 | helper.ThrowHtmlError(err, res); 517 | return 518 | } 519 | 520 | res.json({ "status": "1", "payload": result, "message": msg_success }) 521 | }) 522 | }, "1") 523 | 524 | }) 525 | 526 | app.post('/api/driver_service_provide', (req, res) => { 527 | helper.Dlog(req.body) 528 | var reqObj = req.body; 529 | 530 | checkAccessToken(req.headers, res, (uObj) => { 531 | 532 | helper.CheckParameterValid(res, reqObj, ["zone_service_id", "is_switch"], () => { 533 | 534 | db.query("UPDATE `zone_wise_cars_service` AS `zwcs` INNER JOIN `user_cars` AS `uc` ON `zwcs`.`user_car_id` = `uc`.`user_car_id` SET `zwcs`.`service_provide`=?, `modify_date`=NOW() WHERE `uc`.`user_id` = ? AND `zwcs`.`zone_service_id` = ?", [reqObj.is_switch, uObj.user_id, reqObj.zone_service_id], (err, result) => { 535 | if (err) { 536 | helper.ThrowHtmlError(err, res); 537 | return 538 | } 539 | 540 | if (result.affectedRows > 0) { 541 | 542 | 543 | res.json({ "status": "1", "payload": result, "message": "service change successfully" }) 544 | 545 | } else { 546 | res.json({ "status": "0", "message": msg_fail }) 547 | } 548 | 549 | }) 550 | }) 551 | }, ut_driver) 552 | }) 553 | 554 | app.post('/api/bank_detail', (req, res) => { 555 | helper.Dlog(req.body) 556 | var reqObj = req.body; 557 | 558 | checkAccessToken(req.headers, res, (uObj) => { 559 | db.query("SELECT `user_id`, `account_name`, `bsb`, `account_no`, `bank_name` FROM `bank_detail` WHERE `user_id` = ? ", [ 560 | uObj.user_id 561 | ], (err, result) => { 562 | 563 | if (err) { 564 | helper.ThrowHtmlError(err, res); 565 | return 566 | } 567 | 568 | if (result.length > 0) { 569 | res.json({ "status": "1", "payload": result[0] }) 570 | } else { 571 | res.json({ "status": "0", "message": "no bank info" }) 572 | } 573 | 574 | }) 575 | }, ut_driver) 576 | 577 | }) 578 | 579 | app.post('/api/driver_bank_update', (req, res) => { 580 | helper.Dlog(req.body) 581 | var reqObj = req.body; 582 | 583 | checkAccessToken(req.headers, res, (uObj) => { 584 | 585 | helper.CheckParameterValid(res, reqObj, ["account_name", "ifsc", "account_no", "bank_name"], () => { 586 | db.query("SELECT `user_id`, `account_name`, `bsb`, `account_no`, `bank_name` FROM `bank_detail` WHERE `user_id` = ? ", [ 587 | uObj.user_id 588 | ], (err, result) => { 589 | 590 | if (err) { 591 | helper.ThrowHtmlError(err, res); 592 | return 593 | } 594 | 595 | if (result.length > 0) { 596 | // already added 597 | db.query("UPDATE `bank_detail` SET `account_name`=?, `bsb` = ?, `account_no` = ?, `bank_name` = ? WHERE `user_id` = ? ", [reqObj.account_name, reqObj.ifsc, reqObj.account_no, reqObj.bank_name, uObj.user_id], (err, result) => { 598 | if (err) { 599 | helper.ThrowHtmlError(err, res); 600 | return 601 | } 602 | 603 | if (result.affectedRows > 0) { 604 | res.json({ "status": "1", "message": "update bank info done" }) 605 | 606 | } else { 607 | res.json({ "status": "0", "message": msg_fail }) 608 | } 609 | 610 | }) 611 | } else { 612 | // New Add 613 | db.query("INSERT INTO `bank_detail` (`user_id`, `account_name`, `bsb`, `account_no`, `bank_name` ) VALUES (?,?,?, ?,?) ", [uObj.user_id, reqObj.account_name, reqObj.ifsc, reqObj.account_no, reqObj.bank_name], (err, result) => { 614 | if (err) { 615 | helper.ThrowHtmlError(err, res); 616 | return 617 | } 618 | 619 | if (result) { 620 | res.json({ "status": "1", "message": "update bank info done" }) 621 | 622 | } else { 623 | res.json({ "status": "0", "message": msg_fail }) 624 | } 625 | }) 626 | } 627 | 628 | }) 629 | 630 | 631 | }) 632 | }, ut_driver) 633 | }) 634 | 635 | app.post('/api/service_detail', (req, res) => { 636 | helper.Dlog(req.body) 637 | var reqObj = req.body; 638 | 639 | checkAccessToken(req.headers, res, (uObj) => { 640 | db.query("SELECT `sd`.`service_name`, `sd`.`color`, `sd`.`icon`, `sd`.`top_icon` , `zwcs`.`zone_service_id`, `zwcs`.`service_provide`, `zwcs`.`status_message` FROM `zone_wise_cars_service` AS `zwcs` " + 641 | "INNER JOIN`zone_document` AS`zd` ON`zd`.`zone_doc_id` = `zwcs`.`zone_doc_id` " + 642 | "INNER JOIN`user_detail` AS`ud` ON`ud`.`car_id` = `zwcs`.`user_car_id` AND`ud`.`zone_id` = `zd`.`zone_id` " + 643 | "INNER JOIN`service_detail` AS`sd` ON`sd`.`service_id` = `zd`.`service_id` AND FIND_IN_SET(`sd`.`service_id`, `ud`.`select_service_id`) != 0 " + 644 | "WHERE`ud`.`user_id` = ? AND`zwcs`.`status` = 1 AND`sd`.`status` = 1; " + 645 | "SELECT `ud`.`status` , `ud`.`car_id` FROM `user_detail` AS `ud` WHERE `ud`.`user_id` = ? ", [ 646 | uObj.user_id, uObj.user_id 647 | ], (err, result) => { 648 | 649 | if (err) { 650 | helper.ThrowHtmlError(err, res); 651 | return 652 | } 653 | 654 | if (result.length > 0) { 655 | var userStatus = "Approved"; 656 | switch (result[1][0].status) { 657 | case 0: 658 | userStatus = "No Verify" 659 | break; 660 | case 1: 661 | userStatus = "Not Approved" 662 | break 663 | default: 664 | break; 665 | } 666 | var carStatus = "" 667 | if (result[1][0].car_id == "" || result[1][0].car_id == undefined) { 668 | carStatus = "Car not selected" 669 | } else { 670 | if (result[0].length > 0) { 671 | carStatus = "Active" 672 | } else { 673 | carStatus = "Missing Document" 674 | } 675 | res.json({ "status": "1", "payload": result[0], "car_status": carStatus, "user_status": userStatus }) 676 | } 677 | 678 | } else { 679 | res.json({ "status": "0", "message": "No Service Available || Please Select Car", "car_status": "", "user_status": "" }) 680 | } 681 | 682 | }) 683 | }, ut_driver) 684 | 685 | }) 686 | 687 | app.post('/api/change_password', (req, res) => { 688 | helper.Dlog(req.body) 689 | var reqObj = req.body 690 | checkAccessToken( req.headers, res, (uObj) => { 691 | helper.CheckParameterValid(res, reqObj, ["old_password", "new_password"], ()=> { 692 | db.query("UPDATE `user_detail` SET `password` = ? WHERE `user_id` = ? AND `password` = ? ",[ reqObj.new_password, uObj.user_id, reqObj.old_password ], (err, result) => { 693 | 694 | if(err) { 695 | helper.ThrowHtmlError(err, res) 696 | return 697 | } 698 | 699 | if(result.affectedRows > 0) { 700 | res.json({ 701 | 'status': '1', 702 | 'message': 'password change successfully' 703 | }) 704 | }else{ 705 | res.json({ 706 | 'status':'0', 707 | 'message':'invalid password' 708 | }) 709 | } 710 | 711 | } ) 712 | } ) 713 | 714 | } ) 715 | } ) 716 | 717 | app.post('/api/contact_us', (req, res) => { 718 | helper.Dlog(req.body) 719 | var reqObj = req.body 720 | helper.CheckParameterValid(res, reqObj, ["name", "email", "subject", "message"], () => { 721 | 722 | db.query("INSERT INTO `contact_us_detail` (`name`, `email`, `subject`, `message`) VALUES (?,?,?, ?) ", [ reqObj.name, reqObj.email, reqObj.subject, reqObj.message ], (err, result) => { 723 | 724 | if(err) { 725 | helper.ThrowHtmlError(err, res) 726 | return; 727 | } 728 | 729 | if(result) { 730 | res.json({ 731 | 'status':'1', 732 | 'message':'message send successfully' 733 | }) 734 | }else{ 735 | res.json({ 736 | 'status': '0', 737 | 'message': 'message send fail' 738 | }) 739 | } 740 | 741 | } ) 742 | 743 | }) 744 | 745 | } ) 746 | 747 | app.post('/api/admin/user_list', (req, res) => { 748 | helper.Dlog(req.body) 749 | checkAccessToken(req.headers, res, (uObj) => { 750 | db.query("SELECT `ud`.`user_id`, `ud`.`name`, `ud`.`email`, `ud`.`gender`, `ud`.`mobile`, `ud`.`mobile_code`, `ud`.`user_type`, `ud`.`device_source`, `ud`.`zone_id`, `ud`.`is_block`, (CASE WHEN `ud`.`image` != '' THEN CONCAT('" + helper.ImagePath() + "', `ud`.`image` ) ELSE '' END) AS `image` , `ud`.`is_online`, `ud`.`status`, `ud`.`created_date`, IFNULL( `zl`.`zone_name`, '' ) AS `zone_name` FROM `user_detail` AS `ud`" + 751 | "LEFT JOIN`zone_list` AS`zl` ON`zl`.`zone_id` = `ud`.`zone_id`" + 752 | "WHERE`user_type` = 1 ORDER BY`ud`.`user_id` DESC", [], (err, result) => { 753 | if (err) { 754 | helper.ThrowHtmlError(err, res); 755 | return 756 | } 757 | 758 | if (result.length > 0) { 759 | res.json({ "status": "1", "payload": result }) 760 | } else { 761 | res.json({ "status": "0", "payload": [], "message": "no data" }) 762 | } 763 | }) 764 | }, ut_admin) 765 | }) 766 | 767 | app.post('/api/admin/driver_list', (req, res) => { 768 | helper.Dlog(req.body) 769 | checkAccessToken(req.headers, res, (uObj) => { 770 | db.query("SELECT `ud`.`user_id`, `ud`.`name`, `ud`.`email`, `ud`.`gender`, `ud`.`mobile`, `ud`.`mobile_code`, `ud`.`user_type`, `ud`.`device_source`, `ud`.`zone_id`, `ud`.`is_block`, (CASE WHEN `ud`.`image` != '' THEN CONCAT('" + helper.ImagePath() + "', `ud`.`image` ) ELSE '' END) AS `image` , `ud`.`is_online`, `ud`.`status`, `ud`.`created_date`, IFNULL( `zl`.`zone_name` , '' ) AS `zone_name` FROM `user_detail` AS `ud`" + 771 | "LEFT JOIN`zone_list` AS`zl` ON`zl`.`zone_id` = `ud`.`zone_id`" + 772 | "WHERE`user_type` = 2 ORDER BY`ud`.`user_id` DESC", [], (err, result) => { 773 | if (err) { 774 | helper.ThrowHtmlError(err, res); 775 | return 776 | } 777 | 778 | if (result.length > 0) { 779 | res.json({ "status": "1", "payload": result }) 780 | } else { 781 | res.json({ "status": "0", "payload": [], "message": "no data" }) 782 | } 783 | }) 784 | }, ut_admin) 785 | }) 786 | 787 | app.post('/api/admin/driver_detail', (req, res) => { 788 | helper.Dlog(req.body) 789 | var reqObj = req.body 790 | checkAccessToken(req.headers, res, (uObj) => { 791 | 792 | helper.CheckParameterValid(res, reqObj, ["user_id"], () => { 793 | db.query("SELECT `ud`.`user_id`, `ud`.`name`, `ud`.`email`, `ud`.`gender`, `ud`.`mobile`, `ud`.`mobile_code`, `ud`.`user_type`, `ud`.`device_source`, `ud`.`zone_id`, `ud`.`is_block`, `ud`.`image`, `ud`.`is_online`, `ud`.`status`, `ud`.`created_date`, IFNULL( `zl`.`zone_name` ) AS `zone_name` FROM `user_detail` AS `ud`" + 794 | "LEFT JOIN`zone_list` AS`zl` ON`zl`.`zone_id` = `ud`.`zone_id`" + 795 | "WHERE`user_type` = 2 AND `user_id` = ? ORDER BY`ud`.`user_id` DESC;" + 796 | "SELECT `bank_id`, `user_id`, `account_name`, `bsb`, `account_no`, `bank_name`, `created_date`, `status` FROM `bank_detail` WHERE `user_id` = ? ", [reqObj.user_id, reqObj.user_id], (err, result) => { 797 | if (err) { 798 | helper.ThrowHtmlError(err, res); 799 | return 800 | } 801 | 802 | if (result.length > 0) { 803 | res.json({ 804 | "status": "1", "payload": { 805 | "user_info": result[0], 806 | "bank_info": result[1] 807 | } 808 | }) 809 | } else { 810 | res.json({ "status": "0", "payload": [], "message": msg_invalidUser }) 811 | } 812 | }) 813 | }) 814 | 815 | 816 | }, ut_admin) 817 | }) 818 | 819 | app.post('/api/admin/service_add', (req, res) => { 820 | var form = new multiparty.Form(); 821 | form.parse(req, (err, reqObj, files) => { 822 | if (err) { 823 | helper.ThrowHtmlError(err, res); 824 | return; 825 | } 826 | 827 | helper.Dlog("--------------- Parameter --------------") 828 | helper.Dlog(reqObj); 829 | 830 | helper.Dlog("--------------- Files --------------") 831 | helper.Dlog(files); 832 | 833 | checkAccessToken(req.headers, res, (uObj) => { 834 | 835 | helper.CheckParameterValid(res, reqObj, ["service_name", "seat", "color", "gender", "description"], () => { 836 | helper.CheckParameterValid(res, files, ["icon", "top_icon"], () => { 837 | 838 | 839 | var iconExtension = files.icon[0].originalFilename.substring(files.icon[0].originalFilename.lastIndexOf(".") + 1); 840 | var iconName = "service/" + helper.fileNameGenerate(iconExtension); 841 | var iconNewPath = imageSavePath + iconName; 842 | 843 | fs.rename(files.icon[0].path, iconNewPath, (err) => { 844 | 845 | if (err) { 846 | helper.ThrowHtmlError(err); 847 | return; 848 | } else { 849 | 850 | var topIconExtension = files.top_icon[0].originalFilename.substring(files.top_icon[0].originalFilename.lastIndexOf(".") + 1); 851 | var topIConName = "service/" + helper.fileNameGenerate(topIconExtension); 852 | var topIConNewPath = imageSavePath + topIConName; 853 | 854 | fs.rename(files.top_icon[0].path, topIConNewPath, (err) => { 855 | 856 | if (err) { 857 | helper.ThrowHtmlError(err); 858 | return; 859 | } else { 860 | 861 | db.query("INSERT INTO `service_detail`(`service_name`, `seat`, `color`, `icon`, `top_icon`, `gender`, `description`) VALUES (?,?,?, ?,?,?, ?)", [ 862 | reqObj.service_name[0], reqObj.seat[0], reqObj.color[0], iconName, topIConName, reqObj.gender[0], reqObj.description[0], 863 | ], (err, result) => { 864 | if (err) { 865 | helper.ThrowHtmlError(err); 866 | return; 867 | } 868 | 869 | if (result) { 870 | res.json({ 871 | "status": "1", "message": msg_success 872 | }) 873 | } else { 874 | res.json({ "status": "0", "message": msg_fail }) 875 | } 876 | }) 877 | 878 | } 879 | }) 880 | 881 | 882 | } 883 | }) 884 | }) 885 | }) 886 | 887 | }, ut_admin) 888 | 889 | 890 | }) 891 | }) 892 | 893 | app.post('/api/admin/service_list', (req, res) => { 894 | helper.Dlog(req.body) 895 | var reqObj = req.body 896 | checkAccessToken(req.headers, res, (uObj) => { 897 | 898 | 899 | db.query("SELECT `service_id`, `service_name`, `seat`, `color`, (CASE WHEN `icon` != '' THEN CONCAT('" + helper.ImagePath() + "', `icon` ) ELSE '' END) AS `icon`, (CASE WHEN `top_icon` != '' THEN CONCAT('" + helper.ImagePath() + "', `top_icon` ) ELSE '' END) AS `top_icon`, `gender`, `status`, `created_date`, `description` FROM `service_detail` WHERE `status` != 2 ", [], (err, result) => { 900 | if (err) { 901 | helper.ThrowHtmlError(err, res); 902 | return 903 | } 904 | 905 | res.json({ 906 | "status": "1", "payload": result 907 | }) 908 | }) 909 | }, ut_admin) 910 | }) 911 | 912 | app.post('/api/admin/service_document_list', (req, res) => { 913 | helper.Dlog(req.body) 914 | var reqObj = req.body 915 | checkAccessToken(req.headers, res, (uObj) => { 916 | 917 | 918 | db.query("SELECT `service_id`, `service_name`, `seat`, `color`, `icon`, `top_icon`, `gender`, `status`, `created_date`, `description` FROM `service_detail` WHERE `status` != 2 ;" + 919 | "SELECT `doc_id`, `name`, `type`, `status`, `create_date` FROM `document` WHERE `status` != 2 ", [], (err, result) => { 920 | if (err) { 921 | helper.ThrowHtmlError(err, res); 922 | return 923 | } 924 | 925 | res.json({ 926 | "status": "1", "payload": { 927 | "service": result[0], 928 | "document": result[1] 929 | } 930 | }) 931 | }) 932 | }, ut_admin) 933 | }) 934 | 935 | app.post('/api/admin/service_edit', (req, res) => { 936 | var form = new multiparty.Form(); 937 | form.parse(req, (err, reqObj, files) => { 938 | if (err) { 939 | helper.ThrowHtmlError(err, res); 940 | return; 941 | } 942 | 943 | helper.Dlog("--------------- Parameter --------------") 944 | helper.Dlog(reqObj); 945 | 946 | helper.Dlog("--------------- Files --------------") 947 | helper.Dlog(files); 948 | 949 | checkAccessToken(req.headers, res, (uObj) => { 950 | 951 | helper.CheckParameterValid(res, reqObj, ["service_id", "service_name", "seat", "color", "gender", "description"], () => { 952 | 953 | 954 | var iconName = "" 955 | var topIConName = "" 956 | var updateSetValue = "" 957 | if (files.icon) { 958 | var iconExtension = files.icon[0].originalFilename.substring(files.icon[0].originalFilename.lastIndexOf(".") + 1); 959 | iconName = "service/" + helper.fileNameGenerate(iconExtension); 960 | var iconNewPath = imageSavePath + iconName; 961 | updateSetValue = ", `icon` = '" + iconName + "' " 962 | fs.rename(files.icon[0].path, iconNewPath, (err) => { 963 | 964 | if (err) { 965 | helper.ThrowHtmlError(err); 966 | return; 967 | } 968 | }) 969 | } 970 | 971 | if (files.top_icon) { 972 | var topIconExtension = files.top_icon[0].originalFilename.substring(files.top_icon[0].originalFilename.lastIndexOf(".") + 1); 973 | topIConName = "service/" + helper.fileNameGenerate(topIconExtension); 974 | var topIConNewPath = imageSavePath + topIConName; 975 | updateSetValue = updateSetValue + ", `top_icon` = '" + topIConName + "' " 976 | fs.rename(files.top_icon[0].path, topIConNewPath, (err) => { 977 | 978 | if (err) { 979 | helper.ThrowHtmlError(err); 980 | return; 981 | } 982 | }) 983 | 984 | } 985 | 986 | 987 | 988 | db.query("UPDATE `service_detail` SET `service_name`=?,`seat`=?,`color`=?,`gender`=?,`description`=? " + updateSetValue + ", `modify_date` = NOW() WHERE `service_id` = ? AND `status` != 2 ;", [ 989 | reqObj.service_name[0], reqObj.seat[0], reqObj.color[0], reqObj.gender[0], reqObj.description[0], 990 | reqObj.service_id[0] 991 | ], (err, result) => { 992 | if (err) { 993 | helper.ThrowHtmlError(err, res); 994 | return; 995 | } 996 | 997 | if (result.affectedRows > 0) { 998 | db.query( 999 | "SELECT `service_id`, `service_name`, `seat`, `color`, (CASE WHEN `icon` != '' THEN CONCAT('" + helper.ImagePath() + "', `icon` ) ELSE '' END) AS `icon`, (CASE WHEN `top_icon` != '' THEN CONCAT('" + helper.ImagePath() + "', `top_icon` ) ELSE '' END) AS `top_icon`, `gender`, `status`, `created_date`, `description` FROM `service_detail` WHERE `service_id` = ? ", [ 1000 | reqObj.service_id[0] 1001 | ], (err, result) => { 1002 | 1003 | if (err) { 1004 | helper.ThrowHtmlError(err, res); 1005 | return; 1006 | } 1007 | res.json({ 1008 | "status": "1", "message": "service updated successfully", "payload": result[0] 1009 | }) 1010 | 1011 | }) 1012 | 1013 | } else { 1014 | res.json({ "status": "0", "message": msg_fail }) 1015 | } 1016 | }) 1017 | }) 1018 | }, ut_admin) 1019 | }) 1020 | }) 1021 | 1022 | app.post('/api/admin/service_delete', (req, res) => { 1023 | helper.Dlog(req.body) 1024 | var reqObj = req.body 1025 | checkAccessToken(req.headers, res, (uObj) => { 1026 | 1027 | helper.CheckParameterValid(res, reqObj, ["service_id"], () => { 1028 | db.query("UPDATE `service_detail` SET `status`=?, `modify_date` = NOW() WHERE `service_id` = ? AND `status` != 2 ;", ["2", reqObj.service_id], (err, result) => { 1029 | if (err) { 1030 | helper.ThrowHtmlError(err, res); 1031 | return 1032 | } 1033 | 1034 | if (result.affectedRows > 0) { 1035 | res.json({ 1036 | "status": "1", "message": "service deleted successfully" 1037 | }) 1038 | } else { 1039 | res.json({ 1040 | "status": "0", "message": msg_fail 1041 | }) 1042 | } 1043 | 1044 | 1045 | }) 1046 | }) 1047 | 1048 | }, ut_admin) 1049 | }) 1050 | 1051 | } 1052 | 1053 | function checkAccessToken(helperObj, res, callback, requireType = "") { 1054 | helper.Dlog(helperObj.access_token) 1055 | helper.CheckParameterValid(res, helperObj, ["access_token"], () => { 1056 | db.query('SELECT `user_id`, `name`, `email`, `gender`, `mobile`, `mobile_code`, `auth_token`, `user_type`, `is_block`, `image`, `status` FROM `user_detail` WHERE `auth_token` = ? AND (`status` = ? OR `status` = ?) ', [helperObj.access_token, "1", "2"], (err, result) => { 1057 | 1058 | if (err) { 1059 | helper.ThrowHtmlError(err); 1060 | return 1061 | } 1062 | 1063 | helper.Dlog(result) 1064 | 1065 | if (result.length > 0) { 1066 | if (requireType != "") { 1067 | if (requireType == result[0].user_type) { 1068 | return callback(result[0]) 1069 | } else { 1070 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 1071 | } 1072 | } else { 1073 | return callback(result[0]) 1074 | } 1075 | 1076 | } else { 1077 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 1078 | } 1079 | }) 1080 | }) 1081 | } -------------------------------------------------------------------------------- /controllers/sockect_controller.js: -------------------------------------------------------------------------------- 1 | var helper = require('./../helpers/helpers') 2 | var db = require('./../helpers/db_helpers') 3 | 4 | module.exports.controller = (app, io, socket_list) => { 5 | var response = ''; 6 | 7 | const msg_success = "successfully"; 8 | const msg_fail = "fail"; 9 | const msg_invalidUser = "invalid username and password"; 10 | 11 | io.on('connection', (client) => { 12 | client.on('UpdateSocket', (data) => { 13 | helper.Dlog('UpdateSocket :- ' + data); 14 | var jsonObj = JSON.parse(data); 15 | 16 | helper.CheckParameterValidSocket(client, "UpdateSocket", jsonObj, ["access_token"], () => { 17 | db.query("SELECT `user_id`, `email` FROM `user_detail` WHERE `auth_token` = ? ;", [jsonObj.access_token], (err, result) => { 18 | 19 | if(err) { 20 | helper.ThrowSocketError(err, client, "UpdateSocket") 21 | return; 22 | } 23 | 24 | if(result.length > 0) { 25 | socket_list['us_' + result[0].user_id] = { 'socket_id': client.id} 26 | helper.Dlog(socket_list); 27 | response = { "success": "true", "status": "1", "message": msg_success } 28 | }else{ 29 | response = {"success":"false", "status":"0", "message": msg_invalidUser} 30 | } 31 | client.emit('UpdateSocket', response) 32 | }) 33 | }) 34 | 35 | }) 36 | }) 37 | 38 | 39 | } -------------------------------------------------------------------------------- /controllers/support_controller.js: -------------------------------------------------------------------------------- 1 | var db = require('./../helpers/db_helpers') 2 | var helper = require('./../helpers/helpers') 3 | var multiparty = require('multiparty') 4 | var fs = require('fs'); 5 | var imageSavePath = "./public/img/" 6 | 7 | //User Type: 8 | const ut_admin = 4 9 | const ut_driver = 2 10 | const ut_user = 1 11 | 12 | module.exports.controller = (app, io, socket_list) => { 13 | 14 | const msg_success = "successfully"; 15 | const msg_fail = "fail"; 16 | const msg_invalidUser = "invalid username"; 17 | 18 | //App Api 19 | 20 | app.post('/api/support_user_list', (req, res) => { 21 | helper.Dlog(req.body); 22 | var reqObj = req.body; 23 | checkAccessToken( req.headers, res, (uObj) => { 24 | helper.CheckParameterValid(res, reqObj, [ "socket_id"] , () => { 25 | 26 | db.query('SELECT `ud`.`user_id`, "App Support" AS `name`, (CASE WHEN `ud`.`image` != "" THEN CONCAT("' + helper.ImagePath() + '", `ud`.`image` ) ELSE "" END ) AS `image`, "" AS `message`, 0 as `message_type`, NOW() AS `created_date`, 0 AS `base_count` FROM `user_detail` AS `ud` WHERE `ud`.`user_type` = ?;' + 27 | 28 | 'SELECT `ud`.`user_id`, `ud`.`name`, (CASE WHEN `ud`.`image` != "" THEN CONCAT("' + helper.ImagePath() + '", `ud`.`image` ) ELSE "" END ) AS `image`, IFNULL(`cm`.`message` , "" ) AS `message`, IFNULL(`cm`.`message_type` , 0 ) AS `message_type`, IFNULL(`cm`.`created_date` , NOW() ) AS `created_date`, IFNULL(`bc`.`base_count` , 0 ) AS `base_count` FROM `user_detail` AS `ud` ' + 29 | 30 | 'INNER JOIN (' + 31 | 32 | 'SELECT `created_date`, `message_type`, `message`, (CASE WHEN `sender_id` = ? THEN `receiver_id` ELSE `sender_id` END) AS `user_id` FROM `chat_message` ' + 33 | 'WHERE `chat_id` IN ( SELECT MAX(`chat_id`) FROM `chat_message` WHERE `status` < "3" AND ( `sender_id` = ? OR ( `receiver_id` = ? AND `status` > "-1") ) GROUP BY (CASE WHEN `sender_id` = ? THEN `receiver_id` ELSE `sender_id` END) ) ' + 34 | 35 | ') AS `cm` ON `cm`.`user_id` = `ud`.`user_id` ' + 36 | 'LEFT JOIN (SELECT count(`chat_id`) AS `base_count`, `sender_id` AS `user_id` FROM `chat_message` WHERE `receiver_id` = ? AND `status` = 0 GROUP BY `sender_id` ) AS `bc` ON `cm`.`user_id` = `bc`.`user_id` ' + 37 | "WHERE `ud`.`status` = 1 ORDER BY `cm`.`created_date` DESC", [ut_admin, uObj.user_id, uObj.user_id, uObj.user_id, uObj.user_id, uObj.user_id ], (err, result) => { 38 | 39 | if(err) { 40 | helper.ThrowHtmlError(err, res); 41 | return 42 | } 43 | 44 | var adminArr = []; 45 | 46 | helper.Dlog(result[1]); 47 | if(result[0].length > 0) { 48 | 49 | adminArr = result[1].filter( (uObj) => result[0][0].user_id == uObj.user_id); 50 | 51 | // chat message not found admin user 52 | if (adminArr.length == 0) { 53 | //insert admin support 54 | 55 | result[1].unshift(result[0][0]); 56 | } 57 | 58 | } 59 | 60 | res.json({ 61 | 'status':"1", 62 | "payload": result[1] 63 | }) 64 | 65 | 66 | } ) 67 | 68 | } ) 69 | } ) 70 | } ) 71 | 72 | app.post('/api/support_connect', (req, res) => { 73 | helper.Dlog(req.body); 74 | var reqObj = req.body; 75 | checkAccessToken(req.headers, res, (uObj) => { 76 | helper.CheckParameterValid(res, reqObj, ["user_id", "socket_id"], () => { 77 | socket_list["us_" + uObj.user_id.toString()] = { 78 | 'socket_id': reqObj.socket_id 79 | }; 80 | 81 | db.query('SELECT `created_date` FROM `chat_delete` WHERE `user_id` = ? AND `receiver_id` = ? ', [uObj.user_id, reqObj.user_id], (err, result) => { 82 | if (err) { 83 | helper.ThrowHtmlError(err, res); 84 | return; 85 | } 86 | 87 | var deleteMessageTime = "2024-01-01 00:00:00" 88 | if (result.length > 0) { 89 | deleteMessageTime = helper.serverMySqlDate(result[0].created_date, "YYYY-MM-DD HH:mm:ss"); 90 | } 91 | 92 | 93 | db.query( 94 | "SELECT `user_id`, `name`, `image` FROM `user_detail` WHERE `user_id` = ? ;" + 95 | "SELECT `chat_id`, `sender_id`, `receiver_id`, `message`, `created_date`, `message_type` FROM `chat_message` WHERE `created_date` > ? AND ( (`sender_id` = ? AND `receiver_id` = ?) OR (`sender_id` = ? AND `receiver_id` = ?) ); ", [reqObj.user_id, deleteMessageTime, reqObj.user_id, uObj.user_id, uObj.user_id, reqObj.user_id], (err, result) => { 96 | 97 | if (err) { 98 | helper.ThrowHtmlError(err, res); 99 | return 100 | } 101 | 102 | if (result[0].length > 0) { 103 | 104 | db.query("UPDATE `chat_message` SET `status` = 1, `modify_date` = NOW() WHERE `sender_id` = ? AND `receiver_id` = ? AND `status` = 0 ", [reqObj.user_id, uObj.user_id], (err, uResult) => { 105 | if (err) { 106 | helper.ThrowHtmlError(err); 107 | return 108 | } 109 | 110 | if(uResult.affectedRows > 0) { 111 | helper.Dlog("User base reset done"); 112 | }else{ 113 | helper.Dlog("User base reset fail"); 114 | } 115 | }) 116 | 117 | res.json( 118 | { 119 | "status": "1", 120 | "payload": { 121 | "user_info": result[0][0], 122 | "messages": result[1], 123 | } 124 | } 125 | ) 126 | } else { 127 | res.json( 128 | { 129 | "status": "0", 130 | "message": "invalid user" 131 | } 132 | ) 133 | } 134 | } 135 | ) 136 | }) 137 | 138 | }) 139 | }) 140 | 141 | }); 142 | 143 | app.post('/api/support_clear', (req, res) => { 144 | helper.Dlog(req.body); 145 | var reqObj = req.body; 146 | checkAccessToken(req.headers, res, (uObj) => { 147 | helper.CheckParameterValid(res, reqObj, ["receiver_id"], () => { 148 | 149 | db.query('UPDATE `chat_delete` SET `created_date` = NOW() WHERE `user_id` = ? AND `receiver_id` = ? ', [uObj.user_id, reqObj.receiver_id], (err, result) => { 150 | if (err) { 151 | helper.ThrowHtmlError(err, res); 152 | return; 153 | } 154 | 155 | 156 | if (result.affectedRows > 0) { 157 | res.json({ "status": "1", "message": msg_success }); 158 | } else { 159 | db.query("INSERT INTO `chat_delete` (`user_id`,`receiver_id`,`created_date`) VALUES (?,?,NOW()) ", [uObj.user_id, reqObj.receiver_id], (err, result) => { 160 | 161 | if (err) { 162 | helper.ThrowHtmlError(err, res); 163 | return; 164 | } 165 | 166 | if (result) { 167 | res.json({ "status": "1", "message": msg_success }); 168 | } else { 169 | res.json({ "status": "0", "message": msg_fail }); 170 | } 171 | }) 172 | } 173 | }) 174 | }) 175 | }) 176 | }); 177 | 178 | app.post('/api/support_message', (req, res) => { 179 | helper.Dlog(req.body); 180 | var reqObj = req.body; 181 | checkAccessToken(req.headers, res, (uObj) => { 182 | helper.CheckParameterValid(res, reqObj, ["receiver_id", "message", "socket_id"], () => { 183 | socket_list["us_" + uObj.user_id.toString()] = { 184 | 'socket_id': reqObj.socket_id 185 | }; 186 | 187 | var createdDate = helper.serverYYYYMMDDHHmmss() 188 | 189 | db.query('INSERT INTO `chat_message` (`sender_id`,`receiver_id`,`message`, `message_type` ) VALUES (?,?,?, ?) ;' + 190 | 'SELECT `user_id`, `name`, (CASE WHEN `image` != "" THEN CONCAT("' + helper.ImagePath() + '", `image` ) ELSE "" END ) AS `image`, "" AS `message`, 0 as `message_type`, NOW() AS `created_date`, 0 AS `base_count` FROM `user_detail` WHERE `user_id` = ? ; ', [uObj.user_id, reqObj.receiver_id, reqObj.message, "0", uObj.user_id ], (err, result) => { 191 | if (err) { 192 | helper.ThrowHtmlError(err, res); 193 | return; 194 | } 195 | 196 | if (result[0]) { 197 | var dataMessage = { 198 | "chat_id": result[0].insertId, 199 | "sender_id": uObj.user_id, "receiver_id": parseInt(reqObj.receiver_id), "message": reqObj.message, "created_date": helper.isoDate(createdDate), "message_type": 0, 200 | } 201 | res.json({ 202 | "status": "1", 203 | "payload": dataMessage, 204 | "message": msg_success, 205 | }) 206 | 207 | //socket send emit event calling 208 | var receiverSocket = socket_list['us_' + reqObj.receiver_id]; 209 | if (receiverSocket && io.sockets.sockets.get(receiverSocket.socket_id)) { 210 | io.sockets.sockets.get(receiverSocket.socket_id).emit("support_message", { 211 | "status": "1", "payload": [dataMessage], "user_info": result[1].length > 0 ? result[1][0] : {} 212 | }) 213 | 214 | helper.Dlog("receiverSocket emit done") 215 | } else { 216 | helper.Dlog("receiverSocket client not connected"); 217 | } 218 | 219 | } else { 220 | res.json({ 221 | "status": "0", 222 | "message": msg_fail 223 | }) 224 | } 225 | 226 | }) 227 | 228 | }) 229 | }) 230 | 231 | }); 232 | 233 | 234 | } 235 | 236 | function checkAccessToken(helperObj, res, callback, requireType = "") { 237 | helper.Dlog(helperObj.access_token) 238 | helper.CheckParameterValid(res, helperObj, ["access_token"], () => { 239 | db.query('SELECT `user_id`, `name`, `email`, `gender`, `mobile`, `mobile_code`, `auth_token`, `user_type`, `is_block`, `image`, `status` FROM `user_detail` WHERE `auth_token` = ? AND (`status` = ? OR `status` = ?) ', [helperObj.access_token, "1", "2"], (err, result) => { 240 | 241 | if (err) { 242 | helper.ThrowHtmlError(err); 243 | return 244 | } 245 | 246 | helper.Dlog(result) 247 | 248 | if (result.length > 0) { 249 | if (requireType != "") { 250 | if (requireType == result[0].user_type) { 251 | return callback(result[0]) 252 | } else { 253 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 254 | } 255 | } else { 256 | return callback(result[0]) 257 | } 258 | 259 | } else { 260 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 261 | } 262 | }) 263 | }) 264 | } -------------------------------------------------------------------------------- /controllers/zone_controller.js: -------------------------------------------------------------------------------- 1 | var db = require('./../helpers/db_helpers') 2 | var helper = require('./../helpers/helpers') 3 | var multiparty = require('multiparty') 4 | var fs = require('fs'); 5 | var imageSavePath = "./public/img/" 6 | 7 | //User Type: 8 | const ut_admin = 4 9 | const ut_driver = 2 10 | const ut_user = 1 11 | 12 | module.exports.controller = (app, io, socket_list) => { 13 | 14 | const msg_success = "successfully"; 15 | const msg_fail = "fail"; 16 | const msg_invalidUser = "invalid username"; 17 | const msg_no_doc = "No Document" 18 | 19 | 20 | var pr_base_charge = 5; 21 | var pr_per_km_charge = 5; 22 | var pr_per_minute_charge = 1; 23 | var pr_booking_charge = 5; 24 | var pr_minimum_fair = 10; 25 | var pr_cancel_charge = 0; 26 | 27 | //App api 28 | app.post('/api/zone_list', (req, res) => { 29 | helper.Dlog(req.body); 30 | var reqObj = req.body; 31 | 32 | checkAccessToken(req.headers, res, (uObj) => { 33 | 34 | db.query("SELECT `zl`.`zone_id`, `zl`.`zone_name`, `zl`.`city`, `zl`.`tax` FROM `zone_list` AS `zl` " + 35 | "INNER JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`status` = 1 " + 36 | "INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `pd`.`service_id` AND `sd`.`status` = 1 AND `zl`.`status` = 1 " + 37 | "GROUP BY `zl`.`zone_id` ", [], (err, result) => { 38 | 39 | if (err) { 40 | helper.ThrowHtmlError(err, res); 41 | return 42 | } 43 | if (result.length > 0) { 44 | res.json({ "status": "1", "payload": result }) 45 | } else { 46 | res.json({ "status": "0", "message": "no zone data" }) 47 | } 48 | }) 49 | 50 | }, ut_driver) 51 | }) 52 | 53 | //Admin Api 54 | app.post('/api/admin/zone_add', (req, res) => { 55 | helper.Dlog(req.body); 56 | var reqObj = req.body; 57 | 58 | checkAccessToken(req.headers, res, (uObj) => { 59 | helper.CheckParameterValid(res, reqObj, ["zone_name", "zone_json", "city", "price_json", "tax"], () => { 60 | 61 | var zonePriceObj = JSON.parse(reqObj.price_json); 62 | if (zonePriceObj.length > 0) { 63 | db.query('INSERT INTO `zone_list`(`zone_name`, `city` , `zone_json`, `tax`) VALUES (?,?,?, ?)', [reqObj.zone_name, reqObj.city, reqObj.zone_json, reqObj.tax], (err, result) => { 64 | if (err) { 65 | helper.ThrowHtmlError(err, res); 66 | return 67 | } 68 | if (result) { 69 | 70 | var priceArray = [] 71 | var documentArray = [] 72 | 73 | zonePriceObj.forEach((zoneServiceObj) => { 74 | priceArray.push([result.insertId, zoneServiceObj.service_id, zoneServiceObj.base_charge, zoneServiceObj.per_km_charge, zoneServiceObj.per_minute_charge, zoneServiceObj.booking_charge, zoneServiceObj.minimum_fair, zoneServiceObj.minimum_km, zoneServiceObj.cancel_charge, reqObj.tax]); 75 | 76 | documentArray.push([result.insertId, zoneServiceObj.service_id, zoneServiceObj.document_id, zoneServiceObj.car_document_id]); 77 | 78 | }); 79 | 80 | helper.Dlog(priceArray); 81 | helper.Dlog(documentArray); 82 | 83 | db.query("INSERT INTO `price_detail`(`zone_id`, `service_id`, `base_charge`, `per_km_charge`, `per_min_charge`, `booking_charge`, `mini_fair`, `mini_km`, `cancel_charge`, `tax`) VALUES ?;" + 84 | "INSERT INTO `zone_document`(`zone_id`, `service_id`, `personal_doc`, `car_doc`) VALUES ? ;", [priceArray, documentArray], (err, pResult) => { 85 | 86 | if (err) { 87 | helper.ThrowHtmlError(err, res); 88 | return 89 | } 90 | 91 | if (pResult[0] && pResult[1]) { 92 | res.json({ "status": "1", "message": "zone add successfully" }) 93 | } else { 94 | res.json({ "status": "0", "message": msg_fail }) 95 | } 96 | 97 | }) 98 | 99 | 100 | } else { 101 | res.json({ "status": "0", "message": msg_fail }) 102 | } 103 | }) 104 | } else { 105 | res.json({ "status": "0", "message": "zone price data is missing" }) 106 | } 107 | 108 | }) 109 | }, ut_admin) 110 | }) 111 | app.post('/api/admin/zone_edit', (req, res) => { 112 | helper.Dlog(req.body) 113 | var reqObj = req.body; 114 | checkAccessToken(req.headers, res, (uObj) => { 115 | helper.CheckParameterValid(res, reqObj, ["zone_id", "zone_name", "zone_json", "city", "service_id", "tax"], () => { 116 | 117 | db.query("UPDATE `zone_list` AS `zl`" + 118 | "LEFT JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`service_id` NOT IN (" + reqObj.service_id + ") AND `pd`.`status` = 1 " + 119 | "LEFT JOIN `zone_document` AS `zd` ON `zd`.`zone_id` = `zl`.`zone_id` AND `zd`.`service_id` NOT IN (" + reqObj.service_id + ") AND `sd`.`status` = 1 " + 120 | "SET `zl`.`zone_name` = ? , `zl`.`zone_json` = ?, `zl`.`tax` = ?, `zl`.`modify_date` = NOW(), `pd`.`modify_date` = NOW(), `pd`.`status` = 2, `zd`.`modify_date` = NOW(), `zd`.`status` = 2 WHERE `zl`.`zone_id` = ?; " + 121 | 122 | "SELECT IFNULL( GROUP_CONCAT(DISTINCT `pd`.`service_id`),'') AS `service_id` FROM `zone_list` AS `zl` " + 123 | "INNER JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`service_id` IN (" + reqObj, service_id + ") AND `pd`.`status` = 0 AND `zl`.`zone_id` = ?;" + 124 | 125 | "SELECT IFNULL( GROUP_CONCAT(DISTINCT `service_id`),'') AS `d_service_id` FROM `zone_document` WHERE `zone_id` = ? AND `status` = 2 ;" + 126 | 127 | "SELECT IFNULL( GROUP_CONCAT(DISTINCT `service_id`),'') AS `p_service_id` FROM `price_detail` WHERE `zone_id` = ? AND `status` = 2 ;", [reqObj.zone_name, reqObj.zone_json, reqObj.tax, reqObj.zone_id, 128 | reqObj.zone_id, reqObj.zone_id, reqObj.zone_id], (err, result) => { 129 | 130 | if (err) { 131 | helper.ThrowHtmlError(err, res); 132 | return 133 | } 134 | 135 | if (result[0].affectedRows > 0) { 136 | 137 | var insertPrice = [] 138 | var insertDocument = [] 139 | 140 | activeService = result[1][0].service_id.split(","); 141 | myService = reqObj.service_id.split(",").filter((service_id) => !activeService.includes(service_id)); 142 | 143 | myService.forEach((service_id) => { 144 | 145 | var isFind = false; 146 | 147 | result[2][0].d_service_id.split(',').forEach((id) => { 148 | if (service_id == id) { 149 | isFind = true; 150 | } 151 | }) 152 | 153 | if (!isFind) { 154 | //no service document 155 | //insert 156 | insertDocument.push([reqObj.zone_id, service_id]); 157 | } 158 | 159 | var isFindPrice = false; 160 | 161 | result[3][0].p_service_id.split(',').forEach((id) => { 162 | if (service_id == id) { 163 | isFindPrice = true; 164 | } 165 | }) 166 | 167 | if (!isFindPrice) { 168 | //no service price 169 | //insert 170 | insertPrice.push([reqObj.zone_id, service_id, pr_base_charge, pr_per_km_charge, pr_per_minute_charge, pr_booking_charge, pr_minimum_fair, pr_cancel_charge]); 171 | } 172 | 173 | }); 174 | 175 | var sqlData = []; 176 | var sqlQuery = ''; 177 | var dbChange = false; 178 | 179 | 180 | if (myService.length > 0) { 181 | sqlQuery += "UPDATE `zone_document` SET `status` = 1 WHERE `zone_id` = ? AND FIND_IN_SET( `service_id`, ? ) != 0; " 182 | sqlData.push(reqObj.zone_id, myService.toString()); 183 | dbChange = true; 184 | } 185 | 186 | if (myService.length > 0) { 187 | sqlQuery += "UPDATE `price_detail` AS `pd` " + 188 | "INNER JOIN ( SELECT MAX(`price_id`) AS `max_price_id` FROM `price_detail` WHERE `zone_id` = ? AND FIND_IN_SET( `service_id`, ? ) != 0 GROUP BY `zone_id`, `service_id` ) AS `pmm` ON `pd`.`price_id` = `pmm`.`max_price_id` " + 189 | "SET `pd`.`status` = 1 ; " 190 | sqlData.push(reqObj.zone_id, myService.toString()); 191 | dbChange = true; 192 | } 193 | 194 | if (insertPrice.length > 0) { 195 | sqlQuery += 'INSERT INTO `price_detail` (`zone_id`, `service_id`, `base_charge`, `per_km_charge`, `per_minute_charge`, `booking_charge`, `minimum_fair`, `cancel_charge` ) VALUES ?;'; 196 | sqlData.push(insertPrice); 197 | dbChange = true; 198 | } 199 | 200 | if (insertDocument.length > 0) { 201 | sqlQuery += 'INSERT INTO `zone_document` (`zone_id`, `service_id` ) VALUES ?;'; 202 | sqlData.push(insertDocument); 203 | dbChange = true; 204 | } 205 | 206 | if (dbChange) { 207 | db.query(sqlQuery, sqlData, (err, zoneResult) => { 208 | if (err) { 209 | helper.ThrowHtmlError(err, res); 210 | return 211 | } 212 | 213 | res.json({ "status": "1", "message": "zone edited successfully" }) 214 | }) 215 | } else { 216 | res.json({ "status": "1", "message": "zone edited successfully" }) 217 | } 218 | 219 | } else { 220 | res.json({ "status": "0", "message": msg_fail }) 221 | } 222 | }) 223 | 224 | 225 | }) 226 | }, ut_admin) 227 | 228 | }) 229 | app.post('/api/admin/zone_detail', (req, res) => { 230 | helper.Dlog(req.body) 231 | var reqObj = req.body; 232 | checkAccessToken(req.headers, res, (uObj) => { 233 | helper.CheckParameterValid(res, reqObj, ["zone_id"], () => { 234 | 235 | db.query("SELECT `zl`.`zone_id`, `zl`.`zone_name`, `zl`.`city`, `zl`.`tax`, `zl`.`zone_json`, GROUP_CONCAT(`pd`.`service_id`) AS `on_service_id` FROM `zone_list` AS `zl` " + 236 | "INNER JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`status` = 1 " + 237 | "WHERE `zl`.`status` != 2 AND `zl`.`zone_id` = ? ;" + 238 | "SELECT * FROM `service_detail` WHERE `status` != 2", [reqObj.zone_id], (err, result) => { 239 | 240 | if (err) { 241 | helper.ThrowHtmlError(err, res); 242 | return 243 | } 244 | 245 | if (result[0].length > 0) { 246 | res.json({ 247 | "status": "1", 248 | "payload": result[0], 249 | "service": result[1] 250 | }) 251 | 252 | 253 | } else { 254 | res.json({ "status": "0", "message": msg_fail }) 255 | } 256 | }) 257 | 258 | 259 | }) 260 | }, ut_admin) 261 | 262 | }) 263 | app.post('/api/admin/zone_list', (req, res) => { 264 | helper.Dlog(req.body); 265 | var reqObj = req.body; 266 | 267 | checkAccessToken(req.headers, res, (uObj) => { 268 | 269 | db.query("SELECT `zd`.`zone_doc_id`, `pd`.`price_id`, `pd`.`service_id`, `zl`.`zone_id`, `zl`.`zone_name`, `zl`.`city`, `zl`.`tax`, `sd`.`service_name`, GROUP_CONCAT( CASE WHEN `d`.`type` = 1 THEN `d`.`name` ELSE NULL END) AS `document_name`, GROUP_CONCAT( CASE WHEN `d`.`type` = 2 THEN `d`.`name` ELSE NULL END) AS `car_document_name`,`pd`.`base_charge`, `pd`.`per_km_charge`, `pd`.`per_min_charge`, `pd`.`booking_charge`, `pd`.`mini_fair`, `pd`.`mini_km`, `pd`.`cancel_charge` FROM `zone_list` AS `zl` " + 270 | "INNER JOIN `zone_document` AS `zd` ON `zd`.`zone_id` = `zl`.`zone_id` AND `zd`.`status` = 1 AND `zl`.`status` != 2 " + 271 | "INNER JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`service_id` = `zd`.`service_id` AND `pd`.`status` = 1 " + 272 | "INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `pd`.`service_id` AND `sd`.`status` = 1 " + 273 | "LEFT JOIN `document` AS `d` ON `d`.`status` = 1 AND ( FIND_IN_SET( `d`.`doc_id`, `zd`.`personal_doc` ) != 0 OR FIND_IN_SET( `d`.`doc_id`, `zd`.`car_doc` ) != 0) GROUP BY `pd`.`price_id` ", [], (err, result) => { 274 | 275 | if (err) { 276 | helper.ThrowHtmlError(err, res); 277 | return 278 | } 279 | 280 | if (result.length > 0) { 281 | res.json({ "status": "1", "payload": result }) 282 | } else { 283 | res.json({ "status": "0", "message": "no zone data" }) 284 | } 285 | }) 286 | 287 | 288 | 289 | 290 | }, "4") 291 | }) 292 | app.post('/api/admin/zone_price_list', (req, res) => { 293 | helper.Dlog(req.body); 294 | var reqObj = req.body; 295 | 296 | checkAccessToken(req.headers, res, (uObj) => { 297 | 298 | var condition = ""; 299 | 300 | if (reqObj.zone_id != undefined && reqObj.zone_id != "") { 301 | condition = " AND `pd`.`zone_id` = " + reqObj.zone_id; 302 | } 303 | 304 | if (reqObj.service_id != undefined && reqObj.service_id != "") { 305 | condition += " AND `pd`.`service_id` = " + reqObj.service_id; 306 | } 307 | 308 | db.query("SELECT `pd`.`price_id`, `pd`.`service_id`, `zl`.`zone_id`, `zl`.`zone_name`, `zl`.`city`, `zl`.`tax`, `sd`.`service_name`, `pd`.`base_charge`, `pd`.`per_km_charge`, `pd`.`per_min_charge`, `pd`.`booking_charge`, `pd`.`mini_fair`, `pd`.`mini_km`, `pd`.`cancel_charge` FROM `zone_list` AS `zl` " + 309 | "INNER JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`status` = 1 " + 310 | "INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `pd`.`service_id` AND `sd`.`status` != 2 " + 311 | "WHERE `zl`.`status` != 2 " + condition, [], (err, result) => { 312 | 313 | if (err) { 314 | helper.ThrowHtmlError(err, res); 315 | return 316 | } 317 | 318 | if (result.length > 0) { 319 | res.json({ "status": "1", "payload": result }) 320 | } else { 321 | res.json({ "status": "0", "message": "no zone data" }) 322 | } 323 | }) 324 | }, "4") 325 | }) 326 | app.post('/api/admin/zone_price_delete', (req, res) => { 327 | helper.Dlog(req.body); 328 | var reqObj = req.body; 329 | 330 | checkAccessToken(req.headers, res, (uObj) => { 331 | 332 | helper.CheckParameterValid(res, reqObj, ["price_id", "zone_id", "service_id"], () => { 333 | 334 | db.query(" UPDATE `price_detail` SET `status` = 2, `modify_date` = NOW() WHERE `price_id` = ? AND `zone_id` = ? AND `service_id` = ? ", [reqObj.price_id, reqObj.zone_id, reqObj.service_id], (err, result) => { 335 | 336 | if (err) { 337 | helper.ThrowHtmlError(err, res); 338 | return 339 | } 340 | 341 | if (result.affectedRows > 0) { 342 | res.json({ "status": "1", "message": "zone price delete successfully" }) 343 | } else { 344 | res.json({ "status": "0", "message": msg_fail }) 345 | } 346 | }) 347 | }) 348 | }, "4") 349 | }) 350 | app.post('/api/admin/zone_price_edit', (req, res) => { 351 | helper.Dlog(req.body); 352 | var reqObj = req.body; 353 | 354 | checkAccessToken(req.headers, res, (uObj) => { 355 | 356 | helper.CheckParameterValid(res, reqObj, ["price_id", "zone_id", "service_id", "base_charge", "per_km_charge", "per_min_charge", "booking_charge", "mini_fair", "mini_km", "cancel_charge"], () => { 357 | 358 | if (reqObj.price_id == "") { 359 | //new price add 360 | zoneNewPriceAdd(reqObj, res, "zone price added successfully") 361 | } else { 362 | //old price delete then new price add 363 | db.query(" UPDATE `price_detail` SET `status` = 2, `modify_date` = NOW() WHERE `price_id` = ? AND `zone_id` = ? AND `service_id` = ? ", [reqObj.price_id, reqObj.zone_id, reqObj.service_id], (err, result) => { 364 | 365 | if (err) { 366 | helper.ThrowHtmlError(err, res); 367 | return 368 | } 369 | 370 | if (result.affectedRows > 0) { 371 | zoneNewPriceAdd(reqObj, res, "zone price edited successfully") 372 | } else { 373 | res.json({ "status": "0", "message": msg_fail }) 374 | } 375 | }) 376 | } 377 | 378 | }) 379 | }, "4") 380 | }) 381 | app.post('/api/admin/zone_document_edit', (req, res) => { 382 | helper.Dlog(req.body); 383 | var reqObj = req.body; 384 | 385 | checkAccessToken(req.headers, res, (uObj) => { 386 | 387 | helper.CheckParameterValid(res, reqObj, ["zone_doc_id", "personal_doc", "car_doc"], () => { 388 | 389 | db.query("UPDATE `zone_document` SET `personal_doc` = ?, `car_doc` = ?, `modify_date` = NOW() WHERE `zone_doc_id` = ? ", [reqObj.personal_doc, reqObj.car_doc, reqObj.zone_doc_id], (err, result) => { 390 | 391 | if (err) { 392 | helper.ThrowHtmlError(err, res); 393 | return 394 | } 395 | 396 | if (result.affectedRows > 0) { 397 | res.json({ "status": "1", "message": "zone document edited successfully" }) 398 | 399 | } else { 400 | res.json({ "status": "0", "message": msg_fail }) 401 | } 402 | }) 403 | 404 | }) 405 | }, "4") 406 | }) 407 | app.post('/api/admin/zone_document_list', (req, res) => { 408 | helper.Dlog(req.body); 409 | var reqObj = req.body; 410 | 411 | checkAccessToken(req.headers, res, (uObj) => { 412 | 413 | var condition = ""; 414 | 415 | if (reqObj.zone_id != undefined && reqObj.zone_id != "") { 416 | condition = " AND `zd`.`zone_id` = " + reqObj.zone_id; 417 | } 418 | 419 | if (reqObj.service_id != undefined && reqObj.service_id != "") { 420 | condition += " AND `zd`.`service_id` = " + reqObj.service_id; 421 | } 422 | 423 | db.query("SELECT `zd`.`zone_doc_id`, `zl`.`zone_id`, `zl`.`zone_name`, `zl`.`city`, `zl`.`modify_date`, `zl`.`tax`, `sd`.`service_name`, GROUP_CONCAT( CASE WHEN `d`.`type` = 1 THEN `d`.`name` ELSE NULL END) AS `document_name`, GROUP_CONCAT( CASE WHEN `d`.`type` = 2 THEN `d`.`name` ELSE NULL END) AS `car_document_name`,GROUP_CONCAT( CASE WHEN `d`.`type` = 1 THEN `d`.`doc_id` ELSE NULL END) AS `document_ids`, GROUP_CONCAT( CASE WHEN `d`.`type` = 2 THEN `d`.`doc_id` ELSE NULL END) AS `car_document_ids`, `pd`.`base_charge`, `pd`.`per_km_charge` FROM `zone_list` AS `zl` " + 424 | "INNER JOIN `zone_document` AS `zd` ON `zd`.`zone_id` = `zl`.`zone_id` AND `zd`.`status` = 1 AND `zl`.`status` != 2 " + 425 | "INNER JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`service_id` = `zd`.`service_id` AND `pd`.`status` = 1 " + 426 | "INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `zd`.`service_id` AND `sd`.`status` != 2 " + 427 | "LEFT JOIN `document` AS `d` ON `d`.`status` = 1 AND ( FIND_IN_SET( `d`.`doc_id`, `zd`.`personal_doc` ) != 0 OR FIND_IN_SET( `d`.`doc_id`, `zd`.`car_doc` ) != 0) " + 428 | "WHERE `zl`.`status` != 2 " + condition + " GROUP BY `zd`.`zone_doc_id` ;" + 429 | "SELECT `doc_id`, `name`, `type`, `modify_date` FROM `document` WHERE `status` = 1 ", [], (err, result) => { 430 | 431 | if (err) { 432 | helper.ThrowHtmlError(err, res); 433 | return 434 | } 435 | 436 | if (result[0].length > 0) { 437 | res.json({ "status": "1", "payload": result[0], "document_list": result[1] }) 438 | } else { 439 | res.json({ "status": "0", "message": "no zone data" }) 440 | } 441 | }) 442 | }, "4") 443 | }) 444 | app.post('/api/admin/zone_service_list', (req, res) => { 445 | helper.Dlog(req.body); 446 | var reqObj = req.body; 447 | 448 | checkAccessToken(req.headers, res, (uObj) => { 449 | 450 | 451 | db.query("SELECT `zl`.`zone_id`, `zl`.`zone_name` FROM `zone_list` AS `zl` " + 452 | "INNER JOIN `price_detail` AS `pd` ON `pd`.`zone_id` = `zl`.`zone_id` AND `pd`.`status` = 1 " + 453 | "INNER JOIN `service_detail` AS `sd` ON `sd`.`service_id` = `pd`.`service_id` AND `sd`.`status` != 2 " + 454 | "WHERE `zl`.`status` = 0 GROUP BY `zl`.`zone_id`;" + 455 | 456 | "SELECT `service_id`, `service_name`, `icon` FROM `service_detail` WHERE `status` != 2 ", [], (err, result) => { 457 | 458 | if (err) { 459 | helper.ThrowHtmlError(err, res); 460 | return 461 | } 462 | 463 | res.json({ 464 | "status": "1", "payload": { 465 | "zone_list": result[0], 466 | "service_list": result[1] 467 | } 468 | }) 469 | }) 470 | }, ut_admin) 471 | }) 472 | } 473 | 474 | 475 | function zoneNewPriceAdd(reqObj, res, message) { 476 | db.query("INSERT INTO `price_detail`(`zone_id`, `service_id`, `base_charge`, `per_km_charge`, `per_min_charge`, `booking_charge`, `mini_fair`, `mini_km`, `cancel_charge`) VALUES (?,?,?, ?,?,?, ?,?,?);" 477 | , [reqObj.zone_id, reqObj.service_id, reqObj.base_charge, reqObj.per_km_charge, reqObj.per_min_charge, reqObj.booking_charge, reqObj.mini_fair, reqObj.mini_km, reqObj.cancel_charge], (err, result) => { 478 | 479 | if (err) { 480 | helper.ThrowHtmlError(err, res); 481 | return 482 | } 483 | 484 | if (result) { 485 | res.json({ "status": "1", "payload": { "price_id": result.insertId }, "message": message }) 486 | } else { 487 | res.json({ "status": "0", "message": msg_fail }) 488 | } 489 | 490 | }) 491 | } 492 | 493 | function checkAccessToken(helperObj, res, callback, requireType = "") { 494 | helper.Dlog(helperObj.access_token) 495 | helper.CheckParameterValid(res, helperObj, ["access_token"], () => { 496 | db.query('SELECT `user_id`, `name`, `email`, `gender`, `mobile`, `mobile_code`, `auth_token`, `user_type`, `is_block`, `image`, `status` FROM `user_detail` WHERE `auth_token` = ? AND (`status` = ? OR `status` = ?) ', [helperObj.access_token, "1","2"], (err, result) => { 497 | 498 | if (err) { 499 | helper.ThrowHtmlError(err); 500 | return 501 | } 502 | 503 | helper.Dlog(result) 504 | 505 | if (result.length > 0) { 506 | if (requireType != "") { 507 | if (requireType == result[0].user_type) { 508 | return callback(result[0]) 509 | } else { 510 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 511 | } 512 | } else { 513 | return callback(result[0]) 514 | } 515 | 516 | } else { 517 | res.json({ "status": "0", "code": "404", "message": "Access denied. Unauthorized user access." }) 518 | } 519 | }) 520 | }) 521 | } -------------------------------------------------------------------------------- /crash_log/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforany/taxi_driver_node/5d5d86f8808646a33079889daa1737d97e7208ad/crash_log/.DS_Store -------------------------------------------------------------------------------- /helpers/db_helpers.js: -------------------------------------------------------------------------------- 1 | var mysql = require('mysql') 2 | var config = require('config') 3 | var dbConfig = config.get('dbConfig') 4 | var db = mysql.createConnection(dbConfig); 5 | var helper = require('./helpers') 6 | 7 | if(config.has('optionalFeature.detail')) { 8 | var detail = config.get('optionalFeature.detail'); 9 | helper.Dlog('config: ' + detail); 10 | } 11 | 12 | reconnect(db, () => {}); 13 | 14 | function reconnect(connection, callback) { 15 | helper.Dlog("\n New connection tentative ... (" + helper.serverYYYYMMDDHHmmss() + ")" ) 16 | 17 | connection = mysql.createConnection(dbConfig); 18 | connection.connect((err) => { 19 | if(err) { 20 | helper.ThrowHtmlError(err); 21 | 22 | setTimeout(() => { 23 | helper.Dlog('----------------- DB ReConnecting Error (' + helper.serverYYYYMMDDHHmmss() + ') ....................' ); 24 | 25 | reconnect(connection, callback); 26 | }, 5 * 1000); 27 | }else{ 28 | helper.Dlog('\n\t ----- New Connection established with database. -------'); 29 | db = connection; 30 | return callback(); 31 | } 32 | } ) 33 | 34 | connection.on('error', (err) => { 35 | helper.Dlog('----- App is connection Crash DB Helper (' + helper.serverYYYYMMDDHHmmss() + ') -------'); 36 | 37 | if (err.code === "PROTOCOL_CONNECTION_LOST") { 38 | helper.Dlog("/!\\ PROTOCOL_CONNECTION_LOST Cannot establish a connection with the database. /!\\ (" + err.code + ")"); 39 | reconnect(db, callback); 40 | } else if (err.code === "PROTOCOL_ENQUEUE_AFTER_QUIT") { 41 | helper.Dlog("/!\\ PROTOCOL_ENQUEUE_AFTER_QUIT Cannot establish a connection with the database. /!\\ (" + err.code + ")"); 42 | reconnect(db, callback); 43 | } else if (err.code === "PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR") { 44 | helper.Dlog("/!\\ PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR Cannot establish a connection with the database. /!\\ (" + err.code + ")"); 45 | reconnect(db, callback); 46 | } else if (err.code === "PROTOCOL_ENQUEUE_HANDSHAKE_TWICE") { 47 | helper.Dlog("/!\\ PROTOCOL_ENQUEUE_HANDSHAKE_TWICE Cannot establish a connection with the database. /!\\ (" + err.code + ")"); 48 | reconnect(db, callback); 49 | } else if (err.code === "ECONNREFUSED") { 50 | helper.Dlog("/!\\ ECONNREFUSED Cannot establish a connection with the database. /!\\ (" + err.code + ")"); 51 | reconnect(db, callback); 52 | } else if (err.code === "PROTOCOL_PACKETS_OUT_OF_ORDER") { 53 | helper.Dlog("/!\\ PROTOCOL_PACKETS_OUT_OF_ORDER Cannot establish a connection with the database. /!\\ (" + err.code + ")"); 54 | reconnect(db, callback); 55 | } else { 56 | throw err; 57 | } 58 | }) 59 | 60 | } 61 | 62 | module.exports = { 63 | query: (sqlQuery, args, callback) => { 64 | 65 | if(db.state === 'authenticated' || db.state === "connected") { 66 | db.query(sqlQuery, args, (error, result) => { 67 | return callback(error, result); 68 | }) 69 | }else if ( db.state === "protocol_error" ) { 70 | reconnect(db, () => { 71 | db.query(sqlQuery, args, (error, result) => { 72 | return callback(error, result); 73 | }) 74 | }) 75 | }else{ 76 | reconnect(db, ()=>{ 77 | db.query(sqlQuery, args, (error, result ) => { 78 | return callback(error, result); 79 | } ) 80 | }) 81 | } 82 | 83 | } 84 | } 85 | 86 | process.on('uncaughtException', (err) => { 87 | 88 | helper.Dlog('------------------------ App is Crash DB helper (' + helper.serverYYYYMMDDHHmmss() + ')-------------------------' ); 89 | helper.Dlog(err.code); 90 | helper.ThrowHtmlError(err); 91 | }) 92 | -------------------------------------------------------------------------------- /helpers/helpers.js: -------------------------------------------------------------------------------- 1 | var moment = require('moment-timezone'); 2 | var fs = require('fs'); 3 | const { format } = require('path'); 4 | 5 | const app_debug_mode = true; 6 | const timezone_name = "Asia/Kolkata"; 7 | const msg_server_internal_error = "Server Internal Error" 8 | 9 | module.exports = { 10 | 11 | ImagePath:() => { 12 | return "http://localhost:3001/img/"; 13 | }, 14 | 15 | ThrowHtmlError: (err, res) => { 16 | 17 | Dlog("---------------------------- App is Helpers Throw Crash(" + serverYYYYMMDDHHmmss() + ") -------------------------" ) 18 | Dlog(err.stack); 19 | 20 | fs.appendFile('./crash_log/Crash' + serverDateTime('YYYY-MM-DD HH mm ss ms') + '.txt', err.stack, (err) => { 21 | if(err) { 22 | Dlog(err); 23 | } 24 | }) 25 | 26 | if(res) { 27 | res.json({'status': '0', "message": msg_server_internal_error }) 28 | return 29 | } 30 | }, 31 | 32 | ThrowSocketError: (err, client, eventName ) => { 33 | 34 | Dlog("---------------------------- App is Helpers Throw Crash(" + serverYYYYMMDDHHmmss() + ") -------------------------") 35 | Dlog(err.stack); 36 | 37 | fs.appendFile('./crash_log/Crash' + serverDateTime('YYYY-MM-DD HH mm ss ms') + '.txt', err.stack, (err) => { 38 | if (err) { 39 | Dlog(err); 40 | } 41 | }) 42 | 43 | if (client) { 44 | client.emit(eventName, { 'status': '0', "message": msg_server_internal_error } ) 45 | return 46 | } 47 | }, 48 | 49 | CheckParameterValid: (res, jsonObj, checkKeys, callback) => { 50 | 51 | var isValid = true; 52 | var missingParameter = ""; 53 | 54 | checkKeys.forEach( (key, indexOf) => { 55 | if(!Object.prototype.hasOwnProperty.call(jsonObj, key)) { 56 | isValid = false; 57 | missingParameter += key + " "; 58 | } 59 | }); 60 | 61 | 62 | if(!isValid) { 63 | 64 | if(!app_debug_mode) { 65 | missingParameter = ""; 66 | } 67 | res.json({ 'status': '0', "message": "Missing parameter (" + missingParameter +")" }) 68 | }else{ 69 | return callback() 70 | } 71 | }, 72 | 73 | CheckParameterValidSocket: (client, eventName, jsonObj, checkKeys, callback) => { 74 | 75 | var isValid = true; 76 | var missingParameter = ""; 77 | 78 | checkKeys.forEach((key, indexOf) => { 79 | if (!Object.prototype.hasOwnProperty.call(jsonObj, key)) { 80 | isValid = false; 81 | missingParameter += key + " "; 82 | } 83 | }); 84 | 85 | 86 | if (!isValid) { 87 | 88 | if (!app_debug_mode) { 89 | missingParameter = ""; 90 | } 91 | client.emit(eventName, { 'status': '0', "message": "Missing parameter (" + missingParameter + ")" }) 92 | } else { 93 | return callback() 94 | } 95 | }, 96 | 97 | createRequestToken: () => { 98 | var chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 99 | var result = ''; 100 | for (let i = 20; i > 0; i--) { 101 | result += chars[Math.floor(Math.random() * chars.length)]; 102 | 103 | } 104 | 105 | return result; 106 | }, 107 | 108 | fileNameGenerate: (extension) => { 109 | var chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 110 | var result = ''; 111 | for (let i = 10; i > 0; i--) result += chars[Math.floor(Math.random() * chars.length)]; 112 | return serverDateTime('YYYYMMDDHHmmssms') + result + '.' + extension; 113 | }, 114 | 115 | Dlog: (log) => { 116 | return Dlog(log); 117 | }, 118 | 119 | serverDateTime:(format) => { 120 | return serverDateTime(format); 121 | }, 122 | 123 | serverMySqlDate: (date, format = 'YYYY-MM-DD HH:mm:ss' ) => { 124 | return serverDateTimeFormat(date, format); 125 | }, 126 | 127 | serverYYYYMMDDHHmmss:()=>{ 128 | return serverYYYYMMDDHHmmss(); 129 | }, 130 | 131 | isoDate:(date) => { 132 | return moment.tz(date, 'YYYY-MM-DD HH:mm:ss', timezone_name ).toISOString(); 133 | }, 134 | //serverDateTimeAddMin(bookingDetail.pickup_date, "YYYY-MM-DD HH:mm:ss", newRequestTimeABC) 135 | serverDateTimeAddMin: (date, format = 'YYYY-MM-DD HH:mm:ss', add_minutes = 0 ) => { 136 | var jun = moment(new Date(date)).add(add_minutes, 'm'); 137 | jun.tz(timezone_name).format(); 138 | //Dlog("server_datetime_add_minutes :- " + jun.format(format)); 139 | return jun.format(format);; 140 | }, 141 | findNearByLocation: (lat, long, radius_km, callback) => { 142 | var latitude = parseFloat(lat); 143 | var longitude = parseFloat(long); 144 | var distance_find = parseFloat(radius_km); // value is km convent 1 miles = 1.60934 km 145 | //Dlog("latitude : " + latitude+ "longitude : "+longitude +"distance_find : " +distance_find); 146 | var radius = 6371; 147 | var maxlat = latitude + ((distance_find / radius) * 180 / Math.PI); 148 | var minlat = latitude - ((distance_find / radius) * 180 / Math.PI); 149 | var maxlng = longitude + ((distance_find / radius / Math.cos(latitude * Math.PI / 180)) * 180 / Math.PI); 150 | var minlng = longitude - ((distance_find / radius / Math.cos(latitude * Math.PI / 180)) * 180 / Math.PI); 151 | Dlog("minlat : " + minlat + "minmaxlatlat : " + maxlat + "minlng : " + minlng + "maxlng : " + maxlng); 152 | return callback(minlat, maxlat, minlng, maxlng); 153 | }, 154 | 155 | distance: (lat1, lon1, lat2, lon2) => { 156 | return distance(lat1, lon1, lat2, lon2); 157 | }, 158 | 159 | timeDuration:(date1, date2, callback) => { 160 | var now = moment(date1); 161 | var end = moment(date2); 162 | var duration = moment.duration(now.diff(end)); 163 | var totalMin = duration.asMinutes(); 164 | var durationString = moment.utc(duration.asMilliseconds()).format("mm:ss") 165 | if(totalMin > 60) { 166 | durationString = moment.utc(duration.asMilliseconds()).format("HH:mm:ss") 167 | } 168 | return callback(totalMin, durationString) 169 | 170 | } 171 | 172 | } 173 | 174 | 175 | function serverDateTime(format) { 176 | var jun = moment(new Date()); 177 | jun.tz(timezone_name).format(); 178 | return jun.format(format); 179 | } 180 | 181 | function serverDateTimeFormat(date,format) { 182 | var jun = moment(date); 183 | jun.tz(timezone_name).format(); 184 | return jun.format(format); 185 | } 186 | 187 | function Dlog(log) { 188 | if (app_debug_mode) { 189 | console.log(log); 190 | } 191 | } 192 | 193 | function serverYYYYMMDDHHmmss() { 194 | return serverDateTime('YYYY-MM-DD HH:mm:ss'); 195 | } 196 | 197 | function distance(lat1, lon1, lat2, lon2) { 198 | var radlat1 = Math.PI * parseFloat(lat1) / 180; 199 | var radlat2 = Math.PI * parseFloat(lat2) / 180; 200 | var theta = parseFloat(lon1) - parseFloat(lon2); 201 | var radtheta = Math.PI * theta / 180; 202 | var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta); 203 | dist = Math.acos(dist); 204 | dist = dist * 180 / Math.PI; 205 | dist = dist * 60 * 1.1515; 206 | dist = dist * 1.609344; 207 | //Dlog(dist); 208 | if (isNaN(dist)) { 209 | //Dlog("Nan :- "+lat1+","+lon1+","+lat2+","+lon2+","); 210 | dist = 0; 211 | } 212 | //Dlog("dist :-"+dist); 213 | return dist; 214 | } 215 | 216 | process.on('uncaughtException', (err) => { 217 | 218 | }) -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "taxi-app", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "config": "^3.3.9", 10 | "cookie-parser": "~1.4.4", 11 | "cors": "^2.8.5", 12 | "debug": "~2.6.9", 13 | "ejs": "^3.1.9", 14 | "express": "^4.18.2", 15 | "http-errors": "~1.6.3", 16 | "moment-timezone": "^0.5.43", 17 | "morgan": "~1.9.1", 18 | "multiparty": "^4.2.3", 19 | "mysql": "^2.18.1", 20 | "socket.io": "^4.7.0", 21 | "uuid": "^9.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /public/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforany/taxi_driver_node/5d5d86f8808646a33079889daa1737d97e7208ad/public/.DS_Store -------------------------------------------------------------------------------- /public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET home page. */ 5 | router.get('/', function(req, res, next) { 6 | res.render('index', { title: 'Express' }); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /routes/users.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET users listing. */ 5 | router.get('/', function(req, res, next) { 6 | res.send('respond with a resource'); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /views/error.ejs: -------------------------------------------------------------------------------- 1 |

<%= message %>

2 |

<%= error.status %>

3 |
<%= error.stack %>
4 | -------------------------------------------------------------------------------- /views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%= title %> 5 | 6 | 7 | 8 |

<%= title %>

9 |

Welcome to <%= title %>

10 | 11 | 12 | --------------------------------------------------------------------------------