73 lines
2.3 KiB
JavaScript
73 lines
2.3 KiB
JavaScript
const InvoiceService = require('../../services/invoice/InvoiceService');
|
|
const service = new InvoiceService();
|
|
|
|
module.exports = {
|
|
async listMine(req, res) {
|
|
try {
|
|
const data = await service.listMine(req.user.id, {
|
|
status: req.query.status,
|
|
limit: Number(req.query.limit || 50),
|
|
offset: Number(req.query.offset || 0),
|
|
});
|
|
return res.json({ success: true, data });
|
|
} catch (e) {
|
|
console.error('[INVOICE LIST MINE]', e);
|
|
return res.status(400).json({ success: false, message: e.message });
|
|
}
|
|
},
|
|
|
|
async adminList(req, res) {
|
|
try {
|
|
const data = await service.adminList({
|
|
status: req.query.status,
|
|
limit: Number(req.query.limit || 200),
|
|
offset: Number(req.query.offset || 0),
|
|
});
|
|
return res.json({ success: true, data });
|
|
} catch (e) {
|
|
console.error('[INVOICE ADMIN LIST]', e);
|
|
return res.status(403).json({ success: false, message: e.message });
|
|
}
|
|
},
|
|
|
|
async pay(req, res) {
|
|
try {
|
|
const data = await service.markPaid(req.params.id, {
|
|
payment_method: req.body.payment_method,
|
|
transaction_id: req.body.transaction_id,
|
|
amount: req.body.amount,
|
|
paid_at: req.body.paid_at ? new Date(req.body.paid_at) : undefined,
|
|
details: req.body.details,
|
|
});
|
|
return res.json({ success: true, data });
|
|
} catch (e) {
|
|
console.error('[INVOICE PAY]', e);
|
|
return res.status(400).json({ success: false, message: e.message });
|
|
}
|
|
},
|
|
|
|
async updateStatus(req, res) {
|
|
try {
|
|
const { status } = req.body;
|
|
if (!status) return res.status(400).json({ success: false, message: 'status is required' });
|
|
const data = await service.updateStatus(req.params.id, status);
|
|
const poolResult = data?._poolResult ?? null;
|
|
if (data?._poolResult) delete data._poolResult;
|
|
return res.json({ success: true, data, poolResult });
|
|
} catch (e) {
|
|
console.error('[INVOICE UPDATE STATUS]', e);
|
|
return res.status(400).json({ success: false, message: e.message });
|
|
}
|
|
},
|
|
|
|
async getDetail(req, res) {
|
|
try {
|
|
const data = await service.getInvoiceDetail(req.params.id);
|
|
return res.json({ success: true, data });
|
|
} catch (e) {
|
|
console.error('[INVOICE DETAIL]', e);
|
|
return res.status(400).json({ success: false, message: e.message });
|
|
}
|
|
},
|
|
};
|