108 lines
3.1 KiB
JavaScript
108 lines
3.1 KiB
JavaScript
const express = require('express');
|
|
const { verifyToken } = require('../auth');
|
|
const {
|
|
completeAuthorization,
|
|
createAuthorizationUrl,
|
|
getOlistFrontendRedirect,
|
|
getOlistRunDetails,
|
|
getOlistStatus,
|
|
requestOlistSyncStop,
|
|
startOlistSync
|
|
} = require('../services/olistService');
|
|
const { exportMissingProductionOrderDataCsv, importFinalizedProductionOrderCsv, listProductionOrderImportData } = require('../services/productionOrderCsvImportService');
|
|
|
|
const router = express.Router();
|
|
|
|
router.get('/olist/status', verifyToken, async (req, res, next) => {
|
|
try {
|
|
res.json(await getOlistStatus({
|
|
runsPage: req.query.runsPage,
|
|
runsPageSize: req.query.runsPageSize
|
|
}));
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.post('/olist/authorization-url', verifyToken, async (req, res, next) => {
|
|
try {
|
|
res.json({ url: await createAuthorizationUrl() });
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.post('/olist/sync', verifyToken, async (req, res, next) => {
|
|
try {
|
|
const result = await startOlistSync({
|
|
trigger: 'manual',
|
|
fullSync: req.body?.fullSync === true
|
|
});
|
|
res.status(result.accepted ? 202 : 409).json(result);
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.post('/olist/sync/stop', verifyToken, async (req, res, next) => {
|
|
try {
|
|
res.status(202).json(await requestOlistSyncStop());
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.get('/olist/production-order-imports', verifyToken, async (req, res, next) => {
|
|
try {
|
|
res.json(await listProductionOrderImportData({
|
|
runsPage: req.query.runsPage,
|
|
runsPageSize: req.query.runsPageSize
|
|
}));
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.get('/olist/production-order-imports/pending-csv', verifyToken, async (req, res, next) => {
|
|
try {
|
|
res.json(await exportMissingProductionOrderDataCsv());
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.post('/olist/production-order-imports', verifyToken, async (req, res, next) => {
|
|
try {
|
|
res.status(201).json(await importFinalizedProductionOrderCsv(req.body || {}));
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.get('/olist/runs/:runId', verifyToken, async (req, res, next) => {
|
|
try {
|
|
res.json(await getOlistRunDetails(req.params.runId, {
|
|
eventsPage: req.query.eventsPage,
|
|
productsPage: req.query.productsPage
|
|
}));
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.get('/olist/oauth/callback', async (req, res) => {
|
|
try {
|
|
if (req.query.error || !req.query.code || !req.query.state) {
|
|
res.redirect(getOlistFrontendRedirect('cancelled'));
|
|
return;
|
|
}
|
|
await completeAuthorization({ code: String(req.query.code), state: String(req.query.state) });
|
|
res.redirect(getOlistFrontendRedirect('connected'));
|
|
} catch (error) {
|
|
console.error('Olist OAuth callback failed:', error.message);
|
|
res.redirect(getOlistFrontendRedirect('failed'));
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|