78 lines
3.1 KiB
JavaScript
78 lines
3.1 KiB
JavaScript
export const normalizeAdminSettings = (raw) => {
|
|
if (!raw) {
|
|
return null;
|
|
}
|
|
return {
|
|
scheduleCron: raw.scheduleCron || '',
|
|
randomDelayMinSeconds: raw.randomDelayMinSeconds ?? '',
|
|
randomDelayMaxSeconds: raw.randomDelayMaxSeconds ?? '',
|
|
initialDelayMinSeconds: raw.initialDelayMinSeconds ?? '',
|
|
initialDelayMaxSeconds: raw.initialDelayMaxSeconds ?? '',
|
|
storePickupCheckDelayMs: raw.storePickupCheckDelayMs ?? '',
|
|
storeWatchCron: raw.storeWatchCron || '',
|
|
storeWatchInitialDelayMinSeconds: raw.storeWatchInitialDelayMinSeconds ?? '',
|
|
storeWatchInitialDelayMaxSeconds: raw.storeWatchInitialDelayMaxSeconds ?? '',
|
|
ignoredSlots: Array.isArray(raw.ignoredSlots)
|
|
? raw.ignoredSlots.map((slot) => ({
|
|
storeId: slot?.storeId ? String(slot.storeId) : '',
|
|
description: slot?.description || ''
|
|
}))
|
|
: [],
|
|
notifications: {
|
|
ntfy: {
|
|
enabled: !!raw.notifications?.ntfy?.enabled,
|
|
serverUrl: raw.notifications?.ntfy?.serverUrl || 'https://ntfy.sh',
|
|
topicPrefix: raw.notifications?.ntfy?.topicPrefix || '',
|
|
username: raw.notifications?.ntfy?.username || '',
|
|
password: raw.notifications?.ntfy?.password || ''
|
|
},
|
|
telegram: {
|
|
enabled: !!raw.notifications?.telegram?.enabled,
|
|
botToken: raw.notifications?.telegram?.botToken || ''
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
const toNumberOrUndefined = (value) => {
|
|
if (value === '' || value === null || value === undefined) {
|
|
return undefined;
|
|
}
|
|
const parsed = Number(value);
|
|
return Number.isFinite(parsed) ? parsed : undefined;
|
|
};
|
|
|
|
export const serializeAdminSettings = (adminSettings) => {
|
|
if (!adminSettings) {
|
|
return null;
|
|
}
|
|
return {
|
|
scheduleCron: adminSettings.scheduleCron,
|
|
randomDelayMinSeconds: toNumberOrUndefined(adminSettings.randomDelayMinSeconds),
|
|
randomDelayMaxSeconds: toNumberOrUndefined(adminSettings.randomDelayMaxSeconds),
|
|
initialDelayMinSeconds: toNumberOrUndefined(adminSettings.initialDelayMinSeconds),
|
|
initialDelayMaxSeconds: toNumberOrUndefined(adminSettings.initialDelayMaxSeconds),
|
|
storePickupCheckDelayMs: toNumberOrUndefined(adminSettings.storePickupCheckDelayMs),
|
|
storeWatchCron: adminSettings.storeWatchCron,
|
|
storeWatchInitialDelayMinSeconds: toNumberOrUndefined(adminSettings.storeWatchInitialDelayMinSeconds),
|
|
storeWatchInitialDelayMaxSeconds: toNumberOrUndefined(adminSettings.storeWatchInitialDelayMaxSeconds),
|
|
ignoredSlots: (adminSettings.ignoredSlots || []).map((slot) => ({
|
|
storeId: slot.storeId || '',
|
|
description: slot.description || ''
|
|
})),
|
|
notifications: {
|
|
ntfy: {
|
|
enabled: !!adminSettings.notifications?.ntfy?.enabled,
|
|
serverUrl: adminSettings.notifications?.ntfy?.serverUrl || '',
|
|
topicPrefix: adminSettings.notifications?.ntfy?.topicPrefix || '',
|
|
username: adminSettings.notifications?.ntfy?.username || '',
|
|
password: adminSettings.notifications?.ntfy?.password || ''
|
|
},
|
|
telegram: {
|
|
enabled: !!adminSettings.notifications?.telegram?.enabled,
|
|
botToken: adminSettings.notifications?.telegram?.botToken || ''
|
|
}
|
|
}
|
|
};
|
|
};
|