From 191b9abb6dc6a80239ff1306939bb7129b42d1c1 Mon Sep 17 00:00:00 2001 From: Paul Sutter Date: Thu, 28 Dec 2023 10:39:20 +0100 Subject: [PATCH] DB: add parseLoyaltyCard utility function Co-Authored-By: Jannis R --- p/db/loyalty-cards.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/p/db/loyalty-cards.js b/p/db/loyalty-cards.js index a727bb87..753d425d 100644 --- a/p/db/loyalty-cards.js +++ b/p/db/loyalty-cards.js @@ -1,3 +1,5 @@ +import {deepStrictEqual as eql} from 'node:assert'; + // todo: generate from https://reiseauskunft.bahn.de/addons/fachkonfig-utf8.cfg ? const c = { NONE: Symbol('no loyalty card'), @@ -45,7 +47,37 @@ const formatLoyaltyCard = (data) => { return 0; }; +const parseLoyaltyCard = (cardId) => { + switch (cardId) { + case 1: + case 2: return {type: c.BAHNCARD, discount: 25, class: cardId === 1 ? 1 : 2}; + case 3: + case 4: return {type: c.BAHNCARD, discount: 50, class: cardId === 3 ? 1 : 2}; + case 9: return {type: c.VORTEILSCARD}; + case 10: + case 11: return {type: c.HALBTAXABO, railplus: cardId === 10}; + case 12: + case 13: return {type: c.VOORDEELURENABO, railplus: cardId === 12}; + case 14: return {type: c.SHCARD}; + case 15: return {type: c.GENERALABONNEMENT}; + default: return {type: c.NONE}; + } +}; + +const bcFirst50 = { + type: c.BAHNCARD, + class: 1, + discount: 50, +}; +eql(parseLoyaltyCard(formatLoyaltyCard(bcFirst50)), bcFirst50); +const halbtaxRailplus = { + type: c.HALBTAXABO, + railplus: true, +}; +eql(parseLoyaltyCard(formatLoyaltyCard(halbtaxRailplus)), halbtaxRailplus); + export { c as data, formatLoyaltyCard, + parseLoyaltyCard, };