diff --git a/apps/frontend/src/api/placementInstructions.ts b/apps/frontend/src/api/placementInstructions.ts
new file mode 100644
index 0000000..cdfee8e
--- /dev/null
+++ b/apps/frontend/src/api/placementInstructions.ts
@@ -0,0 +1,9 @@
+import { publicSettingsDbRemote } from '@/api/dbs'
+import type { QRCodeDocument } from '@hereconnect/types'
+
+export const getPlacementInstructions = async (placement: QRCodeDocument['placement']) => {
+ const { value } = await publicSettingsDbRemote.get(
+ `public_settings:placement_instructions_${placement}`,
+ )
+ return value
+}
diff --git a/apps/frontend/src/components/manage/ManagePlacementInstructions.vue b/apps/frontend/src/components/manage/ManagePlacementInstructions.vue
index 6662463..42a3ef1 100644
--- a/apps/frontend/src/components/manage/ManagePlacementInstructions.vue
+++ b/apps/frontend/src/components/manage/ManagePlacementInstructions.vue
@@ -4,10 +4,10 @@
- Ошибка загрузки инструкции.
-
+
Инструкция для этого типа размещения отсутствует.
+ Ошибка загрузки инструкции.
@@ -16,23 +16,18 @@ import { computed } from 'vue'
import { VueMarkdownIt } from '@f3ve/vue-markdown-it'
import { useQuery } from '@tanstack/vue-query'
import { type QRCodeDocument } from '@hereconnect/types'
+import { getPlacementInstructions } from '@/api/placementInstructions'
-// Импортируем все инструкции из директории
-const importInstructions = import.meta.glob('/src/content/placementInstructions/*.md', {
- query: '?raw',
- import: 'default',
-}) as unknown as Record Promise>
-
-const { placement } = defineProps<{ placement: QRCodeDocument['placement'] }>()
+const props = defineProps<{ placement: QRCodeDocument['placement'] }>()
// Хук для загрузки инструкции
async function fetchInstructions(): Promise {
- return importInstructions[`/src/content/placementInstructions/${placement}.md`]?.()
+ return getPlacementInstructions(props.placement)
}
// Используем vue-query для управления запросом
-const { isLoading, isError, data } = useQuery({
- queryKey: ['placementInstructions', computed(() => placement)],
+const { isLoading, isError, error, data } = useQuery({
+ queryKey: ['placementInstructions', computed(() => props.placement)],
queryFn: fetchInstructions,
})
diff --git a/apps/frontend/src/content/placementInstructions/car.md b/apps/frontend/src/content/placementInstructions/car.md
deleted file mode 100644
index b8d0c03..0000000
--- a/apps/frontend/src/content/placementInstructions/car.md
+++ /dev/null
@@ -1,22 +0,0 @@
-### Инструкции по размещению на автомобиль:
-
-**Где размещать:**
-- На боковом или заднем стекле автомобиля.
-
-**Как разместить:**
-1. Найдите видимое место на стекле, которое будет хорошо видно прохожим, например, в углу заднего или бокового окна.
-2. Очистите поверхность стекла от пыли и грязи с помощью сухой или слегка влажной ткани.
-3. Если вы используете наклейку:
- - Убедитесь, что материал устойчив к влаге и выцветанию.
- - Аккуратно приклейте наклейку на стекло, разглаживая её от центра к краям, чтобы избежать появления пузырьков воздуха.
-4. Если вы используете пластину или рамку:
- - Проверьте, что крепление не повредит стекло.
- - Убедитесь, что QR-код надёжно зафиксирован и не шатается.
-5. Если QR-код нанесён с помощью трафарета или гравировки:
- - Проверьте, что код выполнен без дефектов и легко сканируется.
- - Очистите стекло от остатков краски или мусора.
-
-**Важно:**
-- Убедитесь, что QR-код не блокирует обзор водителю.
-- Проверьте, что код можно легко сканировать снаружи автомобиля в любое время суток.
-- Если QR-код размещён внутри, убедитесь, что стекло чистое и не бликует.
diff --git a/apps/frontend/src/content/placementInstructions/door.md b/apps/frontend/src/content/placementInstructions/door.md
deleted file mode 100644
index a4e1a0b..0000000
--- a/apps/frontend/src/content/placementInstructions/door.md
+++ /dev/null
@@ -1,14 +0,0 @@
-### Инструкции по размещению на входную дверь дома или квартиры:
-**Где размещать:**
-- На входной двери или рядом с домофоном.
-- На двери или рядом с дверным звонком.
-
-**Как разместить:**
-1. Найдите место рядом с дверным звонком или на самой двери, которое будет заметно для гостей.
-2. Очистите поверхность от пыли и грязи, чтобы QR-код держался крепче.
-3. Приклейте QR-код на дверь с помощью двустороннего скотча или водостойкого клея.
-4. Если вы не хотите приклеивать код, используйте рамку или подставку и разместите её на полке или возле двери.
-
-**Важно:**
-- Проверьте, что QR-код не блокирует другие элементы двери.
-- Убедитесь, что его легко заметить и сканировать при любом освещении.
\ No newline at end of file
diff --git a/apps/frontend/src/content/placementInstructions/other.md b/apps/frontend/src/content/placementInstructions/other.md
deleted file mode 100644
index cd24245..0000000
--- a/apps/frontend/src/content/placementInstructions/other.md
+++ /dev/null
@@ -1,12 +0,0 @@
-### Инструкции по размещению:
-**Где размещать:**
-- В зависимости от ситуации, на любом удобном и видимом месте.
-
-**Как разместить:**
-1. Подберите место, где QR-код будет защищён от повреждений и виден окружающим.
-2. Используйте подходящие материалы для крепления: двусторонний скотч, рамку, подставку или брелок.
-3. Убедитесь, что QR-код хорошо заметен и его легко сканировать.
-
-**Важно:**
-- Адаптируйте место размещения под конкретную задачу.
-- Проверьте, чтобы QR-код не был скрыт другими предметами.
diff --git a/apps/frontend/src/content/placementInstructions/pet.md b/apps/frontend/src/content/placementInstructions/pet.md
deleted file mode 100644
index f5b6690..0000000
--- a/apps/frontend/src/content/placementInstructions/pet.md
+++ /dev/null
@@ -1,13 +0,0 @@
-### Инструкции по размещению на питомца:
-**Где размещать:**
-- На ошейнике питомца.
-
-**Как разместить:**
-1. Выберите удобный ошейник с креплением для QR-кода. Лучше всего подойдут ошейники с кольцом или специальным держателем.
-2. Используйте прочный и водостойкий брелок или пластиковую подложку для QR-кода.
-3. Закрепите QR-код на ошейнике так, чтобы он не мешал вашему питомцу, но был легко доступен для сканирования.
-4. Проверьте, чтобы QR-код был хорошо зафиксирован и не потерялся во время прогулки.
-
-**Важно:**
-- Используйте материалы, которые не вызовут аллергии или раздражения у питомца.
-- Проверьте, что QR-код можно легко сканировать в любом положении.
\ No newline at end of file
diff --git a/apps/frontend/src/content/placementInstructions/restaurant_table.md b/apps/frontend/src/content/placementInstructions/restaurant_table.md
deleted file mode 100644
index 0b1fca1..0000000
--- a/apps/frontend/src/content/placementInstructions/restaurant_table.md
+++ /dev/null
@@ -1,18 +0,0 @@
-### Инструкции по размещению на стол в кафе или ресторане:
-**Где размещать:**
-- На столе, в меню или на подставке.
-
-**Как разместить:**
-1. Если QR-код размещается на столе:
- - Используйте небольшой деревянный держатель или подставку.
- - Поставьте подставку в центр стола или сбоку, чтобы гости могли легко заметить код.
-2. Если QR-код размещается в меню:
- - Вставьте QR-код на видное место, например, на первую или последнюю страницу меню.
- - Используйте плотный ламинированный материал, чтобы код не повредился при использовании меню.
-3. Если QR-код размещается на подставке:
- - Поставьте подставку на уровне глаз сидящих гостей.
- - Проверьте, чтобы подставка была устойчива и не падала.
-
-**Важно:**
-- Защищайте QR-код от влаги, например, от пролитых напитков.
-- Проверьте, что его можно легко сканировать, сидя за столом.
\ No newline at end of file
diff --git a/apps/frontend/src/content/placementInstructions/store.md b/apps/frontend/src/content/placementInstructions/store.md
deleted file mode 100644
index fb341cc..0000000
--- a/apps/frontend/src/content/placementInstructions/store.md
+++ /dev/null
@@ -1,21 +0,0 @@
-### Инструкции по размещению в магазине
-
-**Где размещать:**
-- На витрине, входной двери, кассе или информационной стойке.
-
-**Как разместить:**
-1. **Если QR-код размещается на витрине или входной двери:**
- - Найдите видное место на стекле, чтобы QR-код был хорошо заметен прохожим.
- - Очистите стекло от пыли и загрязнений.
- - Приклейте QR-код на внутреннюю сторону стекла, чтобы защитить его от погодных условий.
-2. **Если QR-код размещается на кассе:**
- - Используйте подставку или рамку, чтобы QR-код был на уровне глаз клиента.
- - Убедитесь, что он не мешает работе кассира.
-3. **Если QR-код размещается на информационной стойке:**
- - Прикрепите QR-код к стойке с помощью двустороннего скотча.
- - Либо используйте рамку, чтобы код выглядел аккуратно и профессионально.
-
-**Важно:**
-- Убедитесь, что QR-код можно легко сканировать, даже при ярком свете или бликах.
-- Если QR-код находится на улице, используйте стойкие к погодным условиям материалы.
-- Разместите код так, чтобы он не мешал и не мог быть случайно повреждён.
diff --git a/services/tg-bot/src/bot/conversations/newQRCodeConversation.ts b/services/tg-bot/src/bot/conversations/newQRCodeConversation.ts
index e1ca82d..7e51cdc 100644
--- a/services/tg-bot/src/bot/conversations/newQRCodeConversation.ts
+++ b/services/tg-bot/src/bot/conversations/newQRCodeConversation.ts
@@ -12,6 +12,7 @@ import { generateQRCodeImage } from "../../services/qrGenerator";
import { selectMultipleActions } from "./selectMultipleActions";
import { defaultMessages } from "@hereconnect/constants";
import { selectPredefinedMessages } from "./selectPredefinedMessages";
+import { publicSettingsDb } from "../../dbs";
export async function newQRCodeConversation(
conversation: Conversation,
@@ -134,8 +135,16 @@ export async function newQRCodeConversation(
new InputFile(new Uint8Array(pngBuffer.buffer), "qr.png"),
);
+ const { value: instruction } = await publicSettingsDb
+ .get(`public_settings:placement_instructions_${typedPlacement}`)
+ .catch((error) => {
+ console.error(error);
+ return { value: "Разместите этот код на вашем объекте." };
+ });
+
await ctx.reply(
- `Разместите этот код на вашем объекте. При сканировании по адресу ${url} посетители смогут взаимодействовать с вами.`,
+ `${instruction}\n\nПри сканировании по адресу ${url} посетители смогут взаимодействовать с вами.`.trim(),
+ { parse_mode: "Markdown" },
);
// Завершаем разговор