434 lines
13 KiB
TypeScript
434 lines
13 KiB
TypeScript
import express from 'express';
|
|
import type { Request, Response } from 'express';
|
|
import PendafaranBaruModel from '../models/pendaftaran_baru_model';
|
|
import UserModel from '../models/user_model';
|
|
import KirimanModel from '../models/kiriman_model';
|
|
import KurirModel from '../models/kurir_model';
|
|
import type { UploadedFile } from 'express-fileupload';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
import axios from 'axios';
|
|
import { socket_client } from '../index';
|
|
|
|
// import { io, Socket } from 'socket.io-client';
|
|
|
|
|
|
// const socket_client: Socket = io("http://localhost:3014");
|
|
|
|
const router = express.Router();
|
|
|
|
|
|
router.get('/', (req: Request, res: Response) => {
|
|
// socket_client.emit('scan_dia', 'test');
|
|
res.sendFile(__dirname + '/user_ui/index.html');
|
|
});
|
|
|
|
|
|
|
|
// router.get('/coba', async (req: Request, res: Response) => {
|
|
// res.status(200).json('success');
|
|
// })
|
|
|
|
router.get('/login', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/user_ui/login.html');
|
|
})
|
|
|
|
router.post('/login', async (req: Request, res: Response) => {
|
|
const { no_telpon, password } = req.body;
|
|
const user = await UserModel.findOne({ no_telpon, password });
|
|
if (user) {
|
|
console.log(user);
|
|
res.status(200).json(user);
|
|
return;
|
|
}
|
|
res.status(400).json('Nomor Telpon atau Password Salah');
|
|
})
|
|
|
|
router.get('/daftar', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/user_ui/daftar.html');
|
|
})
|
|
|
|
router.post('/daftar', async (req: Request, res: Response) => {
|
|
const { no_telpon, nama, password } = req.body;
|
|
// check the user
|
|
const user = await UserModel.findOne({ no_telpon });
|
|
if (user) {
|
|
res.status(400).json('Nomor Telpon sudah terdaftar');
|
|
return;
|
|
}
|
|
|
|
// check the pendaftaran baru
|
|
const pencarian_data = await PendafaranBaruModel.findOne({ no_telpon });
|
|
if (pencarian_data) {
|
|
// delete the pendaftaran baru with no_telpon
|
|
await PendafaranBaruModel.deleteOne({ no_telpon });
|
|
}
|
|
|
|
const otp = Math.floor(Math.random() * 1000000);
|
|
// create pendaftaran baru
|
|
|
|
|
|
// create a 6 otp random otp code
|
|
|
|
try {
|
|
const response = await axios.post('http://localhost:3012/send-otp', { number: no_telpon, otp });
|
|
const pendaftaran_baru = new PendafaranBaruModel({ no_telpon, nama, password, otp });
|
|
await pendaftaran_baru.save();
|
|
res.status(200).json('success');
|
|
return;
|
|
} catch (error: any) {
|
|
// console.log(error);
|
|
res.status(error.response.status).json(error.response.data);
|
|
return
|
|
}
|
|
|
|
|
|
|
|
// res.status(400).json('error dari backend');
|
|
});
|
|
|
|
router.post('/verifikasi', async (req: Request, res: Response) => {
|
|
const { no_telpon, kode_otp } = req.body;
|
|
const pencarian_data = await PendafaranBaruModel.findOne({ no_telpon });
|
|
if (!pencarian_data) {
|
|
res.status(400).json('Nomor Telpon tidak ditemukan');
|
|
return;
|
|
}
|
|
|
|
if (pencarian_data.otp == kode_otp) {
|
|
const user = new UserModel({ no_telpon, nama: pencarian_data.nama, password: pencarian_data.password });
|
|
await user.save();
|
|
await PendafaranBaruModel.deleteOne({ no_telpon });
|
|
res.status(200).json('success');
|
|
return;
|
|
}
|
|
res.status(400).json('Kode OTP Salah');
|
|
return
|
|
})
|
|
|
|
|
|
router.get('/user', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/user_after_login_ui/index.html');
|
|
})
|
|
|
|
router.get('/user/gambar/:id/:gambar', (req: Request, res: Response) => {
|
|
const { id, gambar } = req.params;
|
|
// console.log(id, gambar);
|
|
const gambarPath = path.join(__dirname, '../images/user/' + id + '/' + gambar);
|
|
res.sendFile(gambarPath);
|
|
})
|
|
|
|
router.put('/user/:_id', async (req: Request, res: Response) => {
|
|
const { _id } = req.params;
|
|
const { nama, alamat, ada_file } = req.body;
|
|
let gambar_name = "";
|
|
if (ada_file > 0) {
|
|
const { gambar } = req.files as { gambar: UploadedFile };
|
|
// console.log(gambar);
|
|
const userDir = path.join(__dirname, '../images/user/' + _id);
|
|
if (!fs.existsSync(userDir)) {
|
|
fs.mkdirSync(userDir);
|
|
}
|
|
// delete all file on userDir
|
|
const files = fs.readdirSync(userDir);
|
|
for (const file of files) {
|
|
fs.unlinkSync(path.join(userDir, file));
|
|
}
|
|
|
|
const gambarPath = path.join(userDir, gambar.name);
|
|
gambar_name = gambar.name;
|
|
// console.log(gambarPath);
|
|
await gambar.mv(gambarPath);
|
|
}
|
|
|
|
|
|
const response = await UserModel.findOneAndUpdate({ _id }, { $set: { nama, alamat, gambar: gambar_name } }, { new: true });
|
|
console.log(response);
|
|
res.status(200).json(response);
|
|
})
|
|
|
|
|
|
router.get('/user/kirim-paket', async (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/user_after_login_ui/paket.html');
|
|
})
|
|
|
|
router.post('/user/kirim-paket', async (req: Request, res: Response) => {
|
|
const { _id, no_telpon_pengirim, nama_pengirim, alamat_pengirim, no_telpon_penerima, nama_penerima, alamat_penerima } = req.body;
|
|
const { gambar_paket } = req.files as { gambar_paket: UploadedFile };
|
|
|
|
const userNoTelpon = (await UserModel.findOne({ _id }).select('no_telpon'))?.no_telpon;
|
|
// console.log(userNoTelpon);
|
|
|
|
const newKiriman = new KirimanModel({ id_pengirim: _id, no_telpon_pengirim, nama_pengirim, alamat_pengirim, no_telpon_penerima, nama_penerima, alamat_penerima, gambar_paket: gambar_paket.name });
|
|
await newKiriman.save();
|
|
// console.log(newKiriman);
|
|
|
|
const gambarPath = path.join(__dirname, '../images/kiriman/' + newKiriman._id + '/' + gambar_paket.name);
|
|
await gambar_paket.mv(gambarPath);
|
|
|
|
const message = `Pengiriman anda dengan nomor resi ${newKiriman._id} sedang diproses oleh admin.`;
|
|
|
|
try {
|
|
await axios.post('http://localhost:3012/send-message', { number: userNoTelpon, message: message });
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
|
|
socket_client.emit('pengiriman_baru_server');
|
|
|
|
res.status(200).json("ini kirim paket")
|
|
})
|
|
|
|
router.get("/user/paket/:id/:status", async (req: Request, res: Response) => {
|
|
try {
|
|
const { id, status } = req.params;
|
|
console.log(id);
|
|
let response
|
|
if (status == "paket") {
|
|
// check where status is not "Dibatalkan Oleh Admin"
|
|
response = await KirimanModel.find({
|
|
id_pengirim: id,
|
|
status: {
|
|
$nin: ['Dibatalkan Oleh Admin', 'Diterima Terverifikasi',"Dibatalkan Oleh Pengirim"],
|
|
$type: 'string'
|
|
}
|
|
});
|
|
} else {
|
|
response = await KirimanModel.find({ id_pengirim: id });
|
|
}
|
|
console.log(response);
|
|
res.status(200).json(response);
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(400).json([]);
|
|
}
|
|
|
|
})
|
|
|
|
router.get("/user/paket-detail/:id", async (req: Request, res: Response) => {
|
|
const { id } = req.params;
|
|
console.log(id);
|
|
try {
|
|
const response = await KirimanModel.findOne({ _id: id }).lean();
|
|
if (!response) {
|
|
res.status(404).json("Data tidak ditemukan");
|
|
return;
|
|
}
|
|
let responseWithKurir = {};
|
|
if (response.id_kurir) {
|
|
const kurirData = await KurirModel.findOne({ _id: response.id_kurir });
|
|
|
|
|
|
responseWithKurir = {
|
|
...response,
|
|
nama_kurir: kurirData?.nama,
|
|
no_telpon_kurir: kurirData?.no_telpon
|
|
};
|
|
console.log(responseWithKurir);
|
|
}
|
|
// await 2 sec
|
|
// await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
res.status(200).json(response.id_kurir ? responseWithKurir : response);
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(400).json("error menampilkan data");
|
|
}
|
|
})
|
|
|
|
|
|
router.get("/user/paket-detail/:id/:gambar", async (req: Request, res: Response) => {
|
|
let { id, gambar } = req.params;
|
|
// console.log(id , gambar);
|
|
try {
|
|
const response = await KirimanModel.findOne({ _id: id, gambar_paket: gambar });
|
|
const gambarPath = path.join(__dirname, '../images/kiriman/' + id + '/' + gambar);
|
|
res.sendFile(gambarPath);
|
|
// await 2 sec
|
|
// await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
// res.status(200).json(response);
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(400).json("error menampilkan data");
|
|
}
|
|
// res.status(200).json("success");
|
|
|
|
})
|
|
|
|
|
|
|
|
router.get('/user/profil', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/user_after_login_ui/profil.html');
|
|
})
|
|
|
|
|
|
router.post('/user/check', async (req: Request, res: Response) => {
|
|
if (!req.body) {
|
|
res.status(400).json('Bad Request');
|
|
return;
|
|
}
|
|
const { _id, no_telpon, password, createdAt } = req.body;
|
|
|
|
// console.log(_id , no_telpon , password , createdAt);
|
|
try {
|
|
// check the user by _id , no_telpon , password , createdAt
|
|
const user = await UserModel.findOne({ _id, no_telpon, password, createdAt });
|
|
if (!user) {
|
|
res.status(400).json('User not found');
|
|
return;
|
|
}
|
|
|
|
res.status(200).json('Success');
|
|
return;
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(500).json('Terjadi Kesalahan Server');
|
|
return
|
|
}
|
|
|
|
})
|
|
|
|
router.get('/user/cek-kurir/:id', async (req: Request, res: Response) => {
|
|
const { id } = req.params;
|
|
console.log(id);
|
|
|
|
if (!id) {
|
|
res.status(400).json('Bad Request');
|
|
return;
|
|
}
|
|
// res.status(200).json('Success');
|
|
try {
|
|
const kurir = await KurirModel.findOne({ _id: id });
|
|
// console.log(kurir);
|
|
if (!kurir) {
|
|
res.status(400).json('Kurir not found');
|
|
return;
|
|
}
|
|
res.status(200).json(kurir);
|
|
return;
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(500).json('Terjadi Kesalahan Server');
|
|
return
|
|
}
|
|
})
|
|
|
|
|
|
router.get('/user/kurir/gambar/:no_telpon/:jenis', (req: Request, res: Response) => {
|
|
const { no_telpon, jenis } = req.params;
|
|
if (!no_telpon) {
|
|
res.status(400).json({ error: 'No Telpon is required.' });
|
|
return
|
|
}
|
|
KurirModel.findOne({ no_telpon }).then((data) => {
|
|
// if data not found
|
|
if (!data) {
|
|
res.status(404).json({ error: 'Kurir not found.' });
|
|
return
|
|
}
|
|
// Define file paths
|
|
const motorGambar = path.join(__dirname, '../images/' + jenis + '/' + data.gambar_motor);
|
|
const kurirGambar = path.join(__dirname, '../images/kurir/' + data.gambar_kurir);
|
|
|
|
if (jenis == 'motor') {
|
|
res.sendFile(motorGambar);
|
|
} else {
|
|
res.sendFile(kurirGambar);
|
|
}
|
|
})
|
|
})
|
|
|
|
router.post('/user/terima-paket/:id_kiriman', async (req: Request, res: Response) => {
|
|
const { id_kiriman } = req.params;
|
|
const { id_pengirim } = req.body;
|
|
console.log(id_kiriman, id_pengirim);
|
|
|
|
if (!id_kiriman || !id_pengirim) {
|
|
res.status(400).json('Bad Request');
|
|
return;
|
|
}
|
|
|
|
// cek the kiriman by id : id_kiriman , id_pengirim : id_pengirim
|
|
const kiriman = await KirimanModel.findOne({ _id: id_kiriman, id_pengirim });
|
|
if (!kiriman) {
|
|
res.status(400).json('Kiriman not found');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const updatedDoc = await KirimanModel.findOneAndUpdate({ _id: id_kiriman }, {
|
|
$set: {
|
|
status: 'Diterima Terverifikasi'
|
|
},
|
|
$push: {
|
|
timeline: {
|
|
status: 'Diterima Terverifikasi',
|
|
waktu: new Date(),
|
|
// alasan: alasan || null,
|
|
id_kurir: kiriman.id_kurir
|
|
}
|
|
}
|
|
}, { new: true });
|
|
console.log(updatedDoc, "diterima terverifikasi");
|
|
socket_client.emit('diterima_terverifikasi', updatedDoc);
|
|
res.status(200).json('Success');
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(500).json('Terjadi Kesalahan Server');
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
router.delete('/user/delete-paket/:id_kiriman', async (req: Request, res: Response) => {
|
|
const { id_kiriman } = req.params;
|
|
const { id_pengirim } = req.body;
|
|
|
|
if (!id_kiriman || !id_pengirim) {
|
|
res.status(400).json('Bad Request');
|
|
return;
|
|
}
|
|
|
|
// search by id : id_kiriman , id_pengirim : id_pengirim
|
|
const kirimanData = await KirimanModel.findOne({ _id: id_kiriman, id_pengirim });
|
|
if (!kirimanData) {
|
|
res.status(400).json('Kiriman not found');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
// delete the kiriman
|
|
const deletedDoc = await KirimanModel.findOneAndUpdate({ _id: id_kiriman }, {
|
|
$set: {
|
|
status: 'Dibatalkan Oleh Pengirim'
|
|
},
|
|
$push: {
|
|
timeline: {
|
|
status: 'Dibatalkan Oleh Pengirim',
|
|
waktu: new Date(),
|
|
// alasan: alasan || null,
|
|
id_kurir: kirimanData.id_kurir
|
|
}
|
|
}
|
|
}, { new: true });
|
|
socket_client.emit('delete_kiriman', deletedDoc);
|
|
res.status(200).json('Success');
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(500).json('Terjadi Kesalahan Server');
|
|
}
|
|
})
|
|
|
|
|
|
router.get('/user/history', async (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/user_after_login_ui/history.html');
|
|
})
|
|
// This should be the last route
|
|
router.use((req: Request, res: Response) => {
|
|
res.status(404).sendFile(__dirname + '/user_ui/404.html');
|
|
});
|
|
|
|
|
|
|
|
|
|
export default router; |