317 lines
11 KiB
TypeScript
317 lines
11 KiB
TypeScript
import express from 'express';
|
|
import type { Request, Response } from 'express';
|
|
import PendafaranBaruModel from '../models/pendaftaran_baru_model';
|
|
import KurirModel from '../models/kurir_model';
|
|
import type { UploadedFile } from 'express-fileupload';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
import UserModel from '../models/user_model';
|
|
import KirimanModel from '../models/kiriman_model';
|
|
import axios from 'axios';
|
|
import { socket_client } from '../index';
|
|
|
|
const router = express.Router();
|
|
|
|
router.get('/', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/kurir_ui/index.html');
|
|
});
|
|
|
|
router.get('/penghantaran', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/kurir_ui/penghantaran.html');
|
|
})
|
|
|
|
router.get('/login', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/kurir_ui/login.html');
|
|
});
|
|
|
|
router.post('/login', async (req: Request, res: Response) => {
|
|
const { no_telpon, password } = req.body;
|
|
|
|
try {
|
|
const user = await KurirModel.findOne({ no_telpon, password });
|
|
if (user) {
|
|
res.status(200).json(user);
|
|
return;
|
|
}
|
|
res.status(400).json('Nomor Telpon atau Password Salah');
|
|
return;
|
|
} catch (error) {
|
|
console.log("error di kurir login", error);
|
|
res.status(500).json('Terjadi Kesalahan Server');
|
|
return;
|
|
}
|
|
|
|
});
|
|
|
|
router.get('/:jenis/:gambar', (req: Request, res: Response) => {
|
|
const { jenis, gambar } = req.params;
|
|
const imagePath = path.join(__dirname, `../images/${jenis}/${gambar}`);
|
|
|
|
if (fs.existsSync(imagePath)) {
|
|
res.sendFile(imagePath);
|
|
} else {
|
|
res.status(404).send('Image not found');
|
|
}
|
|
|
|
})
|
|
|
|
router.get('/gambar-paket/:id/:gambar', (req: Request, res: Response) => {
|
|
const { id, gambar } = req.params;
|
|
const imagePath = path.join(__dirname, `../images/kiriman/${id}/${gambar}`);
|
|
|
|
if (fs.existsSync(imagePath)) {
|
|
res.sendFile(imagePath);
|
|
} else {
|
|
res.status(404).send('Image not found');
|
|
}
|
|
|
|
})
|
|
|
|
router.post('/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);
|
|
|
|
// console.log(_id , no_telpon , password , createdAt);
|
|
try {
|
|
// check the user by _id , no_telpon , password , createdAt
|
|
const user = await KurirModel.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('/paket/:id/:status', async (req: Request, res: Response) => {
|
|
const { id, status } = req.params;
|
|
try {
|
|
const kirimanDoc = status == "ongoing" ? await KirimanModel.find({
|
|
id_kurir: id,
|
|
status: {
|
|
$nin: ['Dibatalkan Oleh Admin', 'Paket Telah Diterima Penerima',"Diterima Terverifikasi"],
|
|
$type: 'string'
|
|
}
|
|
}) : await KirimanModel.find({ id_kurir: id });
|
|
console.log(kirimanDoc);
|
|
res.status(200).json(kirimanDoc);
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(500).json([]);
|
|
}
|
|
})
|
|
|
|
router.get('/user/:id', async (req: Request, res: Response) => {
|
|
const { id } = req.params;
|
|
|
|
try {
|
|
const user = await UserModel.findOne({ _id: id });
|
|
res.status(200).json(user);
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.status(500).json();
|
|
}
|
|
|
|
})
|
|
|
|
router.delete('/batalkan-pengiriman/:id_kurir', async (req: Request, res: Response) => {
|
|
const { id_kurir } = req.params;
|
|
const { id, alasan } = req.body;
|
|
// console.log(id_kurir , id , alasan);
|
|
|
|
try {
|
|
const updatedDoc = await KirimanModel.findByIdAndUpdate(
|
|
id,
|
|
{
|
|
$set: {
|
|
status: 'Dibatalkan Oleh Kurir , Admin mencari kurir baru',
|
|
id_kurir: null
|
|
},
|
|
$push: {
|
|
timeline: {
|
|
status: 'Dibatalkan Oleh Kurir , Admin mencari kurir baru',
|
|
waktu: new Date(),
|
|
alasan: alasan || null,
|
|
id_kurir
|
|
}
|
|
}
|
|
},
|
|
{ new: true } // Return the updated document
|
|
|
|
);
|
|
|
|
await KurirModel.findByIdAndUpdate(
|
|
id_kurir,
|
|
{
|
|
$set: {
|
|
status: 'Tersedia'
|
|
}
|
|
},
|
|
{ new: true } // Return the updated document
|
|
)
|
|
// console.log(updatedDoc);
|
|
const userData = await UserModel.findById(updatedDoc?.id_pengirim);
|
|
// const kurirData = await KurirModel.findById(id_kurir);
|
|
|
|
socket_client.emit('pembatalan_paket_kurir', updatedDoc);
|
|
|
|
try {
|
|
await axios.post('http://localhost:3012/send-message', { number: userData?.no_telpon, message: `🛵*_Kurir Shenior 🛵_*\nPengiriman anda dengan nomor resi ${updatedDoc?._id} telah dibatalkan oleh kurir\nAdmin akan menugaskan kurir yang baru\nHarap Bersabar'}* 🔄🔄` })
|
|
} catch (error) {
|
|
console.log(error)
|
|
}
|
|
|
|
} catch (error) {
|
|
console.log(error)
|
|
res.status(500).json();
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
// kurir menyetujui pengambilan pengiriman
|
|
router.put('/mengambil-pengiriman/:id', async (req: Request, res: Response) => {
|
|
const { id: id_kiriman } = req.params;
|
|
const { id_kurir } = req.body;
|
|
console.log(id_kiriman, id_kurir);
|
|
|
|
// sini nnt berlaku update data
|
|
// const kirimanData = await KirimanModel.findById(id_kiriman);
|
|
const kirimanDoc = await KirimanModel.findByIdAndUpdate(
|
|
id_kiriman,
|
|
{
|
|
$set: {
|
|
id_kurir: id_kurir,
|
|
status: 'Kurir Dalam Perjalanan',
|
|
},
|
|
$push: {
|
|
timeline: {
|
|
status: 'Kurir Dalam Perjalanan',
|
|
waktu: new Date(),
|
|
alasan: null,
|
|
id_kurir
|
|
}
|
|
}
|
|
},
|
|
{ new: true } // Return the updated document
|
|
);
|
|
|
|
const userData = await UserModel.findById(kirimanDoc?.id_pengirim);
|
|
const kurirData = await KurirModel.findById(id_kurir);
|
|
|
|
|
|
try {
|
|
await axios.post('http://localhost:3012/send-message', { number: userData?.no_telpon, message: `🛵*_Kurir Shenior_* 🛵 \nPengiriman anda dengan nomor resi *${id_kiriman}* telash disetujui oleh kurir.\n Kurir sekarang berangkat ke alamat pengirim untuk mengambil paket, Silakan menunggu} ➡️➡️` })
|
|
await axios.post('http://localhost:3012/send-message', { number: kurirData?.no_telpon, message: `🛵*_Kurir Shenior_* 🛵 \nAnda telah ditugaskan untuk mengambil paket dengan nomor resi *${id_kiriman}* \nAlamat Pengirim : *${kirimanDoc?.alamat_pengirim}* \nNama Pengirim: *${kirimanDoc?.nama_pengirim}*` })
|
|
} catch (error) {
|
|
console.log("Error Mengambil Pengiriman | Kurir");
|
|
console.log(error);
|
|
}
|
|
|
|
|
|
|
|
// notifikasi ke aplikasi (admin dan user)
|
|
socket_client.emit('kurir_mengambil_pengiriman', kirimanDoc);
|
|
|
|
|
|
res.status(200).json("ini mengambil pengiriman");
|
|
|
|
})
|
|
|
|
router.post('/mengambil-pengiriman-dari-pengirim-ke-penerima/:id', async (req: Request, res: Response) => {
|
|
const { id: id_kiriman } = req.params;
|
|
const { id_kurir, status } = req.body;
|
|
|
|
const { foto_paket } = req.files as {
|
|
foto_paket: UploadedFile;
|
|
|
|
};
|
|
|
|
// console.log(id_kiriman, id_kurir);
|
|
// console.log(foto_paket);
|
|
|
|
const random_5_char = Math.random().toString(36).substring(2, 7);
|
|
const nama_foto = `${random_5_char}-${foto_paket.name}`;
|
|
|
|
const paketDir = path.join(__dirname, `../images/kiriman/${id_kiriman}`);
|
|
const paketPath = path.join(paketDir, `${nama_foto}`);
|
|
|
|
console.log(paketPath);
|
|
fs.mkdirSync(paketDir, { recursive: true });
|
|
|
|
// move photo
|
|
await foto_paket.mv(paketPath);
|
|
|
|
|
|
// const kirimanDoc = await KirimanModel.findById(id_kiriman);
|
|
const kirimanDoc = await KirimanModel.findByIdAndUpdate(
|
|
id_kiriman,
|
|
{
|
|
$set: {
|
|
id_kurir: id_kurir,
|
|
status: status == "mengirim" ? 'Mengirim Paket Ke Alamat Penerima' : 'Paket Telah Diterima Penerima',
|
|
},
|
|
$push: {
|
|
timeline: {
|
|
status: status == "mengirim" ? 'Mengirim Paket Ke Alamat Penerima' : 'Paket Telah Diterima Penerima',
|
|
waktu: new Date(),
|
|
alasan: null,
|
|
id_kurir,
|
|
gambar: nama_foto
|
|
}
|
|
}
|
|
},
|
|
{ new: true } // Return the updated document
|
|
);
|
|
|
|
|
|
const userData = await UserModel.findById(kirimanDoc?.id_pengirim);
|
|
// const kurirData = await KurirModel.findById(id_kurir);
|
|
if (status == "menerima") {
|
|
await KurirModel.findByIdAndUpdate(
|
|
id_kurir,
|
|
{
|
|
$set: {
|
|
status: 'Tersedia'
|
|
}
|
|
}
|
|
)
|
|
}
|
|
|
|
|
|
// console.log(kirimanDoc);
|
|
// console.log(userData);
|
|
// console.log(kurirData);
|
|
|
|
try {
|
|
const mes = status == "mengirim" ? `🛵*_Kurir Shenior_* 🛵 \nPengiriman anda dengan nomor resi *${id_kiriman}* telah diambil oleh kurir.\nSilakan menunggu kurir mengantarkan paket ke alamat penerima di *${kirimanDoc?.alamat_penerima}*` : `🛵*_Kurir Shenior_* 🛵 \nPengiriman anda dengan nomor resi *${id_kiriman}* telah diterima oleh penerima.`
|
|
await axios.post('http://localhost:3012/send-message', { number: userData?.no_telpon, message: mes, img_stat: true, foto_paket: paketPath, foto_name: foto_paket.name })
|
|
// await axios.post('http://localhost:3012/send-message', { number: kurirData?.no_telpon, message: `🛵*_Kurir Shenior_* 🛵 \nAnda telah mengambil paket dengan nomor resi *${id_kiriman}* di alamat pengirim dan akan menghantar ke \nAlamat Penerima : *${kirimanDoc?.alamat_penerima}* \nNama Penerima: *${kirimanDoc?.nama_penerima}*` ,img_stat:true , foto_paket : paketPath, foto_name : foto_paket.name})
|
|
} catch (error) {
|
|
console.log("Error Mengambil Pengiriman di pengirim | Kurir");
|
|
console.log(error);
|
|
}
|
|
|
|
socket_client.emit('kurir_menghantar_ke_penerima', kirimanDoc);
|
|
|
|
res.status(200).json("sukses");
|
|
})
|
|
|
|
// log penghantaran menu
|
|
router.get('/log', async (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/kurir_ui/log.html');
|
|
})
|
|
|
|
export default router; |