fix(bot): единый источник активности — env SHOP_ACTIVATED приоритет над БД
All checks were successful
Release: multi-arch Docker images / build-push (push) Successful in 20m10s

Рассинхрон: панель Bbox пишет SHOP_ACTIVATED в env, но бот читал активность
из БД site_settings (первично) → даже при true в панели бот отвечал
'Shop is not activated'. Теперь env — единый источник; БД — фоллбэк
(для админки магазина, если env не задан). Кэш 30с сохранён.
Версия v1.0.2.
This commit is contained in:
NW
2026-08-24 21:08:08 +01:00
parent d2324db105
commit 1c17501476
2 changed files with 23 additions and 19 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "telegram-shop-bot",
"version": "1.0.1",
"version": "1.0.2",
"type": "module",
"scripts": {
"test": "vitest run",

View File

@@ -55,7 +55,10 @@ export async function getCommissionWallets() {
/**
* Check if the shop is activated.
* Reads site_settings.shop_activated; falls back to env SHOP_ACTIVATED !== 'false' (default true).
* Приоритет: env SHOP_ACTIVATED (единый источник — панель Bbox) → БД site_settings.
* Раньше БД была первичной, и смена «Магазин активирован» в панели (env) не
* влияла на бота (в БД оставалось старое значение) — рассинхрон «пишет true,
* а бот говорит not activated». Теперь env главный; БД — зеркало-фоллбэк.
* @returns {Promise<boolean>}
*/
export async function getShopActivated() {
@@ -64,25 +67,26 @@ export async function getShopActivated() {
return shopActivatedCache;
}
let activated;
// 1. env (панель Bbox / compose) — единый источник правды
if (process.env.SHOP_ACTIVATED !== undefined) {
activated = process.env.SHOP_ACTIVATED !== 'false';
} else {
// 2. БД site_settings (админка магазина может вести туда же)
try {
const row = await db.getAsync(
"SELECT value FROM site_settings WHERE key = 'shop_activated'"
);
let activated;
if (row) {
activated = row.value !== 'false';
} else {
activated = process.env.SHOP_ACTIVATED !== 'false';
activated = row ? row.value !== 'false' : true;
} catch (err) {
logger.error({ err }, 'Failed to read shop_activated from site_settings');
activated = true;
}
}
shopActivatedCache = activated;
shopActivatedCachedAt = now;
return activated;
} catch (err) {
logger.error({ err }, 'Failed to read shop_activated from site_settings');
return process.env.SHOP_ACTIVATED !== 'false';
}
}
/**