From daa648e4df2980dfa7b563104a30a3041194530a Mon Sep 17 00:00:00 2001 From: kicap1992 Date: Thu, 26 May 2022 06:18:34 +0800 Subject: [PATCH] added pengirim and maps api --- .babelrc | 4 ++ .eslintrc.json | 4 +- package-lock.json | 57 +++++++++++++++++++++++ package.json | 1 + server/index.js | 15 +++++- server/models/kurir_model.js | 32 +++++++++++++ server/models/peta_model.js | 27 +++++++++++ server/routes/kurir_router.js | 80 ++++++++++++++++++++++++++++++++ server/routes/pengirim_router.js | 37 +++++++++++++++ server/routes/peta_router.js | 56 ++++++++++++++++++++++ yarn.lock | 24 ++++++++++ 11 files changed, 333 insertions(+), 4 deletions(-) create mode 100644 .babelrc create mode 100644 server/models/kurir_model.js create mode 100644 server/models/peta_model.js create mode 100644 server/routes/kurir_router.js create mode 100644 server/routes/pengirim_router.js create mode 100644 server/routes/peta_router.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..b56ad8d --- /dev/null +++ b/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["next/babel"], + "plugins": [] +} \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index bffb357..fe73d21 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,3 +1,3 @@ { - "extends": "next/core-web-vitals" -} + "extends": ["next/babel","next/core-web-vitals"] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c8b52c9..5b986be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "express": "^4.17.3", "express-form-data": "^2.0.17", "googleapis": "^100.0.0", + "md5": "^2.3.0", "mongoose": "^6.2.11", "next": "12.1.5", "nodemon": "^2.0.15", @@ -976,6 +977,14 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1194,6 +1203,14 @@ "node": ">= 8" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "engines": { + "node": "*" + } + }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -2686,6 +2703,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -3157,6 +3179,16 @@ "semver": "bin/semver.js" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -5595,6 +5627,11 @@ "supports-color": "^7.1.0" } }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -5759,6 +5796,11 @@ "which": "^2.0.1" } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -6912,6 +6954,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -7257,6 +7304,16 @@ } } }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", diff --git a/package.json b/package.json index 25ca4ea..d37119e 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "express": "^4.17.3", "express-form-data": "^2.0.17", "googleapis": "^100.0.0", + "md5": "^2.3.0", "mongoose": "^6.2.11", "next": "12.1.5", "nodemon": "^2.0.15", diff --git a/server/index.js b/server/index.js index 56a1837..bf3c368 100644 --- a/server/index.js +++ b/server/index.js @@ -1,5 +1,6 @@ const express = require('express') const next = require('next') +require("dotenv").config(); const mongoose = require('mongoose'); const formData = require('express-form-data'); @@ -37,9 +38,15 @@ app.prepare().then(() => { // import routes const login_router = require('./routes/login_router'); + const kurir_router = require('./routes/kurir_router'); + const pengirim_router = require('./routes/pengirim_router'); + const peta_router = require('./routes/peta_router'); // use routes server.use('/api/login', login_router); + server.use('/api/kurir', kurir_router); + server.use('/api/pengirim', pengirim_router); + server.use('/api/peta', peta_router); // connect to mongodb mongoose.connect(process.env.DB_CONNECTION, { useNewUrlParser: true, useUnifiedTopology: true, family: 4}) @@ -55,6 +62,10 @@ app.prepare().then(() => { return res.status(200).send({ status : true, message : 'connected to api'}) }); + server.use('/api',(req, res, next) => { + res.status(404).send('404 not found'); + }); + server.all('*', (req, res) => { return handle(req, res) }) @@ -72,10 +83,10 @@ app.prepare().then(() => { console.log(`> Ready on http://localhost:${port}`) }) - https.createServer (options, server).listen(3002, (err) => { + https.createServer (options, server).listen(3003, (err) => { if (err) throw err // console.log(`ini dia ${process.env.DB_CONNECTION}`) - console.log(`> Ready on https://localhost:${3002}`) + console.log(`> Ready on https://localhost:${3003}`) }) }) \ No newline at end of file diff --git a/server/models/kurir_model.js b/server/models/kurir_model.js new file mode 100644 index 0000000..4226649 --- /dev/null +++ b/server/models/kurir_model.js @@ -0,0 +1,32 @@ +const mongoose = require('mongoose'); + +const pengaturanPengirimanSchema = new mongoose.Schema({ + id_kurir: { + type: mongoose.Schema.Types.ObjectId, + required: true, + }, + biaya_minimal: { + type: Number, + required: true, + }, + biaya_maksimal: { + type: Number, + required: true, + }, + biaya_per_kilo: { + type: Number, + required: true, + }, + created_at: { + type: Date, + default: Date.now + }, + updated_at: { + type: Date, + default: Date.now + } +}) + +const pengaturanPengirimanModel = mongoose.model('tb_pengaturan_pengiriman', pengaturanPengirimanSchema , 'tb_pengaturan_pengiriman'); + +module.exports = {pengaturanPengirimanModel}; \ No newline at end of file diff --git a/server/models/peta_model.js b/server/models/peta_model.js new file mode 100644 index 0000000..fad3e72 --- /dev/null +++ b/server/models/peta_model.js @@ -0,0 +1,27 @@ +const mongoose = require('mongoose'); + +const petaKecamatanSchema = new mongoose.Schema({ + kecamatan : { + type: String, + }, + polygon:{ + type: Array, + } +}) + +const petaKelurahanDesaSchema = new mongoose.Schema({ + kecamatan_id: { + type: mongoose.Schema.Types.ObjectId, + }, + kelurahan_desa: { + type: String, + }, + polygon:{ + type: Array, + } +}) + +const petaKecamatanModel = mongoose.model('tb_kecamatan', petaKecamatanSchema , 'tb_kecamatan'); +const petaKelurahanDesaModel = mongoose.model('tb_kelurahan_desa', petaKelurahanDesaSchema , 'tb_kelurahan_desa'); + +module.exports = {petaKecamatanModel, petaKelurahanDesaModel}; \ No newline at end of file diff --git a/server/routes/kurir_router.js b/server/routes/kurir_router.js new file mode 100644 index 0000000..29a4793 --- /dev/null +++ b/server/routes/kurir_router.js @@ -0,0 +1,80 @@ +const express = require('express'); +const router = express.Router(); +const md5 = require('md5'); + +const { pengaturanPengirimanModel } = require('../models/kurir_model'); +const { kurirModel, loginUserModel } = require('../models/users_model'); + +let googlenya = require('../google/googleapi.js'); +const pengirim_folder_id = process.env.PENGIRIM_FOLDER_ID; +const kurir_folder_id = process.env.KURIR_FOLDER_ID; +const ktp_kurir_folder_id = process.env.KTP_KURIR_FOLDER_ID; +const ktp_holding_kurir_folder_id = process.env.KTP_HOLDING_KURIR_FOLDER_ID; +const kenderaan_kurir_folder_id = process.env.KENDERAAN_KURIR_FOLDER_ID; + +async function cek_user_kurir(req, res, next) { + if (req.query.username == null && req.query.password == null && req.query.id == null) return res.status(401).send({ message: 'Not Authorized' }); + const cek_login = await loginUserModel.findOne({ + username: req.query.username, + password: req.query.password, + role: 'kurir' + }) + if (!cek_login) return res.status(401).send({ message: 'Not Authorized' }); + const cek_kurir = await kurirModel.findOne({ + _id: req.query.id + }) + if (!cek_kurir) return res.status(401).send({ message: 'Not Authorized' }); + next() +} + +// create '/pengaturan' post route +router.post('/pengaturan', cek_user_kurir, async (req, res) => { + // console.log('masuk post pengaturan'); + const minimal_biaya_pengiriman = req.body.minimal_biaya_pengiriman; + const maksimal_biaya_pengiriman = req.body.maksimal_biaya_pengiriman; + const biaya_per_kilo = req.body.biaya_per_kilo; + + const cek_data = await pengaturanPengirimanModel.findOne({ + id_kurir: req.query.id + }); + let message, datanya; + if (cek_data) { + datanya = await pengaturanPengirimanModel.findOneAndUpdate({ + id_kurir: req.query.id, + }, { + biaya_minimal: minimal_biaya_pengiriman, + biaya_maksimal: maksimal_biaya_pengiriman, + biaya_per_kilo: biaya_per_kilo, + updated_at: new Date() + }) + message = 'Pengaturan pengiriman berhasil diubah'; + + } else { + datanya = new pengaturanPengirimanModel({ + id_kurir: req.query.id, + biaya_minimal: minimal_biaya_pengiriman, + biaya_maksimal: maksimal_biaya_pengiriman, + biaya_per_kilo, + created_at: new Date(), + updated_at: new Date() + }); + await datanya.save(); + message = 'Pengaturan biaya pengiriman berhasil dibuat'; + console.log("data baru"); + } + + res.status(200).send({ message: message, data: datanya }); +}) + +// create '/pengaturan' get route +router.get('/pengaturan', cek_user_kurir, async (req, res) => { + // console.log('masuk get pengaturan'); + const cek_data = await pengaturanPengirimanModel.findOne({ + id_kurir: req.query.id + }); + if (!cek_data) return res.status(200).send({ message: 'Pengaturan tidak ditemukan' , data: null}); + res.status(200).send({ message: 'Pengaturan pengiriman berhasil ditemukan', data: cek_data }); +}) + +module.exports = router; + diff --git a/server/routes/pengirim_router.js b/server/routes/pengirim_router.js new file mode 100644 index 0000000..3f1b719 --- /dev/null +++ b/server/routes/pengirim_router.js @@ -0,0 +1,37 @@ +const express = require('express'); +const router = express.Router(); + + +const {pengirimModel, loginUserModel} = require('../models/users_model'); + + +let googlenya = require('../google/googleapi.js'); +const pengirim_folder_id = process.env.PENGIRIM_FOLDER_ID; +const kurir_folder_id = process.env.KURIR_FOLDER_ID; +const ktp_kurir_folder_id = process.env.KTP_KURIR_FOLDER_ID; +const ktp_holding_kurir_folder_id = process.env.KTP_HOLDING_KURIR_FOLDER_ID; +const kenderaan_kurir_folder_id = process.env.KENDERAAN_KURIR_FOLDER_ID; + +async function cek_user_pengirim(req, res, next) { + if (req.query.username == null && req.query.password == null && req.query.id == null) return res.status(401).send({ message: 'Not Authorized' }); + const cek_login = await loginUserModel.findOne({ + username: req.query.username, + password: req.query.password, + role: 'pengirim' + }) + if (!cek_login) return res.status(401).send({ message: 'Not Authorized' }); + const cek_pengirim = await pengirimModel.findOne({ + _id: req.query.id + }) + if (!cek_pengirim) return res.status(401).send({ message: 'Not Authorized' }); + next() +} + + +// create get route +router.get('/', cek_user_pengirim, async (req, res) => { + console.log("sini router get pengirim"); + res.status(200).send({ message: 'connected to pengirim' }) +}) + +module.exports = router; \ No newline at end of file diff --git a/server/routes/peta_router.js b/server/routes/peta_router.js new file mode 100644 index 0000000..ac309f9 --- /dev/null +++ b/server/routes/peta_router.js @@ -0,0 +1,56 @@ +const express = require('express'); +const router = express.Router(); + +const { petaKecamatanModel, petaKelurahanDesaModel } = require('../models/peta_model'); + +// create get route +router.get('/', async (req, res) => { + console.log("sini router get peta"); + res.status(200).send({ message: 'connected to peta' }) +}) + +// create '/kecamatan' get route +router.get('/kecamatan', async (req, res) => { + try { + // const nama = req.query.nama; + let data; + // if (nama == null) { + // data = await petaKecamatanModel.find({}); + // }else + data = await petaKecamatanModel.findOne({ + kecamatan: "Enrekang" + }); + console.log("sini cari kecamatan"); + res.status(200).send({ data: data }); + } catch (error) { + console.log(error, " ini error di peta kecamatan"); + res.status(500).send({ message: 'Internal Server Error' }); + } + + +}) + +// create '/kelurahan_desa' get route +router.get('/kelurahan_desa', async (req, res) => { + try { + const kelurahan_desa = req.query.kelurahan_desa; + let data; + if(kelurahan_desa != null && kelurahan_desa != ""){ + data = await petaKelurahanDesaModel.findOne({ + kelurahan_desa: kelurahan_desa + }); + }else{ + // exclude polygon + data = await petaKelurahanDesaModel.find().select('-polygon'); + } + console.log("sini cari kelurahan_desa"); + res.status(200).send({ data: data }); + } catch (error) { + console.log(error, " ini error di peta kelurahan desa"); + res.status(500).send({ message: 'Internal Server Error' }); + } + + +}) + +module.exports = router; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8780ea3..c4b45f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -455,6 +455,11 @@ "ansi-styles" "^4.1.0" "supports-color" "^7.1.0" +"charenc@0.0.2": + "integrity" "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + "version" "0.0.2" + "chokidar@^3.5.2": "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" @@ -571,6 +576,11 @@ "shebang-command" "^2.0.0" "which" "^2.0.1" +"crypt@0.0.2": + "integrity" "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + "version" "0.0.2" + "crypto-random-string@^2.0.0": "integrity" "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" "resolved" "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" @@ -1532,6 +1542,11 @@ "call-bind" "^1.0.2" "has-tostringtag" "^1.0.0" +"is-buffer@~1.1.6": + "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + "version" "1.1.6" + "is-callable@^1.1.4", "is-callable@^1.2.4": "integrity" "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" @@ -1829,6 +1844,15 @@ dependencies: "semver" "^6.0.0" +"md5@^2.3.0": + "integrity" "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==" + "resolved" "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "charenc" "0.0.2" + "crypt" "0.0.2" + "is-buffer" "~1.1.6" + "media-typer@0.3.0": "integrity" "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"