Files
simple-kurir/routes/kurir_router.ts

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;