136 lines
4.0 KiB
TypeScript
Executable File
136 lines
4.0 KiB
TypeScript
Executable File
// create admin router
|
|
import express from 'express';
|
|
import type { Request, Response } from 'express';
|
|
import type { UploadedFile } from 'express-fileupload';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
import KurirModel from '../models/kurir_model';
|
|
|
|
|
|
const router = express.Router();
|
|
|
|
router.get('/', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/admin_ui/index.html');
|
|
});
|
|
|
|
router.get('/kurir', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/admin_ui/kurir.html');
|
|
})
|
|
|
|
router.get('/kurir/data', (req: Request, res: Response) => {
|
|
KurirModel.find().then((data) => {
|
|
res.json(data);
|
|
});
|
|
})
|
|
|
|
router.get('/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.get('/kurir/:no_telpon', (req: Request, res: Response) => {
|
|
const { no_telpon } = 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
|
|
}
|
|
res.json(data);
|
|
|
|
});
|
|
})
|
|
|
|
router.post('/kurir', async (req: Request, res: Response) => {
|
|
try {
|
|
const { dd_motor, nama, no_telpon, jenis_kelamin } = req.body;
|
|
const { gambar_kurir, gambar_motor } = req.files as {
|
|
gambar_kurir: UploadedFile;
|
|
gambar_motor: UploadedFile;
|
|
};
|
|
|
|
// Check if kurir already exists by no_telpon or dd_motor
|
|
const existing = await KurirModel.findOne({
|
|
$or: [{ no_telpon }, { dd_motor }],
|
|
});
|
|
|
|
if (existing) {
|
|
// await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
res.status(400).json({
|
|
error: 'Nomor telepon atau motor sudah terdaftar.',
|
|
});
|
|
return;
|
|
}
|
|
|
|
const random_5_char = Math.random().toString(36).substring(2, 7);
|
|
|
|
|
|
// Define file paths
|
|
const kurirDir = path.join(__dirname, '../images/kurir');
|
|
const motorDir = path.join(__dirname, '../images/motor');
|
|
const kurirPath = path.join(kurirDir, `${no_telpon}_kurir_${random_5_char}.jpg`);
|
|
const motorPath = path.join(motorDir, `${no_telpon}_motor_${random_5_char}.jpg`);
|
|
|
|
// Ensure dirs exist
|
|
fs.mkdirSync(kurirDir, { recursive: true });
|
|
fs.mkdirSync(motorDir, { recursive: true });
|
|
|
|
// Move files
|
|
await gambar_kurir.mv(kurirPath);
|
|
await gambar_motor.mv(motorPath);
|
|
|
|
// Save to MongoDB
|
|
const newKurir = new KurirModel({
|
|
no_telpon,
|
|
password : no_telpon,
|
|
nama,
|
|
jenis_kelamin,
|
|
dd_motor,
|
|
gambar_kurir: `${no_telpon}_kurir_${random_5_char}.jpg`,
|
|
gambar_motor: `${no_telpon}_motor_${random_5_char}.jpg`,
|
|
});
|
|
|
|
await newKurir.save();
|
|
// await 2 sec
|
|
// await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
|
|
res.status(201).json({ message: 'Kurir berhasil ditambahkan.' });
|
|
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: 'Terjadi kesalahan server.' });
|
|
}
|
|
});
|
|
|
|
|
|
|
|
router.get('/login', (req: Request, res: Response) => {
|
|
res.sendFile(__dirname + '/admin_ui/login.html');
|
|
});
|
|
|
|
|
|
export default router; |