feat: sledování objednávek přes Wolt
CI / Generate TypeScript types (push) Successful in 13s
CI / Server unit tests (push) Successful in 25s
CI / Build server (push) Successful in 28s
CI / Build client (push) Successful in 41s
CI / Playwright E2E tests (push) Successful in 1m47s
CI / Build and push Docker image (push) Successful in 53s
CI / Notify (push) Successful in 2s
CI / Generate TypeScript types (push) Successful in 13s
CI / Server unit tests (push) Successful in 25s
CI / Build server (push) Successful in 28s
CI / Build client (push) Successful in 41s
CI / Playwright E2E tests (push) Successful in 1m47s
CI / Build and push Docker image (push) Successful in 53s
CI / Notify (push) Successful in 2s
Vedle Bolt Food jde nově sledovat i objednávka z Woltu — stačí u objednané skupiny vložit odkaz z track.wolt.com. Logika sledování je zobecněná do registru rozvozových služeb (trackingProviders.ts): každá služba umí vytáhnout kód ze sdílecího odkazu a dotázat se svého API, scheduler i stepper jsou společné. - pole skupiny bolt* přejmenována na tracking* + nové trackingProvider - endpoint /groups/setBoltTracking → /groups/setTracking - Wolt: čas doručení z delivery_eta v časové zóně objednávky, 404 ukončí sledování, stav kurýra odvozen z is_delivering/is_delivering_other_order - DEV simulace zůstává jen pro Bolt Food
This commit is contained in:
@@ -2,9 +2,9 @@ import express, { Request } from "express";
|
||||
import { getLogin } from "../auth";
|
||||
import { parseToken } from "../utils";
|
||||
import { getWebsocket } from "../websocket";
|
||||
import { createGroup, deleteGroup, addGroupMember, removeGroupMember, updateGroupMember, setGroupState, updateGroupTimes, updateGroupFees, setGroupBoltTracking, getOrderDates } from "../groups";
|
||||
import { createGroup, deleteGroup, addGroupMember, removeGroupMember, updateGroupMember, setGroupState, updateGroupTimes, updateGroupFees, setGroupTracking, getOrderDates } from "../groups";
|
||||
import { GroupState } from "../../../types/gen/types.gen";
|
||||
import { checkBoltTracking } from "../boltTracking";
|
||||
import { checkOrderTracking } from "../orderTracking";
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
@@ -161,20 +161,20 @@ router.post("/updateTimes", async (req: Request, res, next) => {
|
||||
} catch (e: any) { next(e); }
|
||||
});
|
||||
|
||||
router.post("/setBoltTracking", async (req: Request, res, next) => {
|
||||
router.post("/setTracking", async (req: Request, res, next) => {
|
||||
const login = getLogin(parseToken(req));
|
||||
const { id, shareUrl } = req.body ?? {};
|
||||
if (!id) return res.status(400).json({ error: 'Nebylo předáno ID skupiny' });
|
||||
if (shareUrl !== undefined && typeof shareUrl !== 'string') {
|
||||
return res.status(400).json({ error: 'Neplatný odkaz na sledování objednávky Bolt' });
|
||||
return res.status(400).json({ error: 'Neplatný odkaz na sledování objednávky' });
|
||||
}
|
||||
try {
|
||||
const data = await setGroupBoltTracking(login, id, shareUrl);
|
||||
const data = await setGroupTracking(login, id, shareUrl);
|
||||
broadcastExtra(data);
|
||||
res.status(200).json(data);
|
||||
// Okamžitý poll, ať uživatel nečeká na další tik scheduleru
|
||||
if (shareUrl) {
|
||||
checkBoltTracking().catch(e => console.error('Bolt tracking: okamžitý poll selhal', e));
|
||||
checkOrderTracking().catch(e => console.error('Sledování objednávek: okamžitý poll selhal', e));
|
||||
}
|
||||
} catch (e: any) { next(e); }
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user