fix bug back navigation

This commit is contained in:
NW 2024-12-15 02:04:43 +00:00
parent 9d9e0e80ad
commit 2cfa37ea86
3 changed files with 30 additions and 11 deletions

View File

@ -125,6 +125,7 @@ export default class UserProductHandler {
const [country, city, district] = callbackQuery.data.replace('shop_district_', '').split('_');
try {
// Получаем информацию о локации
const location = await LocationService.getLocation(country, city, district);
if (!location) {
@ -136,7 +137,7 @@ export default class UserProductHandler {
message_id: messageId,
reply_markup: {
inline_keyboard: [[
{ text: '« Back', callback_data: 'shop_start' }
{ text: '« Back', callback_data: `shop_city_${country}_${city}` }
]]
}
}
@ -144,6 +145,12 @@ export default class UserProductHandler {
return;
}
// Сохраняем текстовое представление локации в состоянии пользователя
userStates.set(chatId, {
location: `${country}_${city}_${district}`
});
// Получаем категории для выбранной локации
const categories = await CategoryService.getCategoriesByLocationId(location.id);
const keyboard = {
@ -201,7 +208,7 @@ export default class UserProductHandler {
{
reply_markup: {
inline_keyboard: [[
{ text: '« Back', callback_data: `shop_district_${locationId}` }
{ text: '« Back', callback_data: `shop_district_${state.location}` }
]]
}
}
@ -221,7 +228,7 @@ export default class UserProductHandler {
// Добавляем кнопку "Назад"
keyboard.inline_keyboard.push([
{ text: '« Back', callback_data: `shop_district_${locationId}` }
{ text: '« Back', callback_data: `shop_district_${state.location}` }
]);
// Отправляем сообщение с товарами

View File

@ -2,10 +2,16 @@ import db from "../config/database.js";
class CategoryService {
static async getCategoriesByLocationId(locationId) {
return await db.allAsync(
'SELECT id, name FROM categories WHERE location_id = ? ORDER BY name',
[locationId]
);
try {
const categories = await db.allAsync(
'SELECT * FROM categories WHERE location_id = ?',
[locationId]
);
return categories;
} catch (error) {
console.error('Error fetching categories by location ID:', error);
throw new Error('Failed to fetch categories');
}
}
static async getSubcategoriesByCategoryId(categoryId) {

View File

@ -20,10 +20,16 @@ class LocationService {
}
static async getLocation(country, city, district) {
return await db.getAsync(
'SELECT id FROM locations WHERE country = ? AND city = ? AND district = ?',
[country, city, district]
);
try {
const location = await db.getAsync(
'SELECT * FROM locations WHERE country = ? AND city = ? AND district = ?',
[country, city, district]
);
return location;
} catch (error) {
console.error('Error fetching location:', error);
throw new Error('Failed to fetch location');
}
}
static async getLocationById(locationId) {