revert Update Detailed Product Viev
This commit is contained in:
NW 2024-12-14 12:54:50 +00:00
parent 057d1536bb
commit eea5d9b9e7
3 changed files with 124 additions and 62 deletions

View File

@ -821,51 +821,82 @@ export default class AdminProductHandler {
}
static async handleViewProduct(callbackQuery) {
if (!this.isAdmin(callbackQuery.from.id)) {
return;
}
const chatId = callbackQuery.message.chat.id;
const messageId = callbackQuery.message.message_id;
const productId = callbackQuery.data.replace('view_product_', '');
try {
const product = await ProductService.getDetailedProductById(productId);
const product = await ProductService.getDetailedProductById(productId)
if (!product) {
throw new Error('Product not found');
}
const location = await LocationService.getLocationById(product.location_id);
if (!location) {
throw new Error('Location not found');
}
const message = `
📦 Product Details:
Name: ${product.name}
Price: $${product.price}
Description: ${product.description}
Stock: ${product.quantity_in_stock}
Location: ${product.country}, ${product.city}, ${product.district}
Category: ${product.category_name}
🔒 Private Information:
${product.private_data}
Hidden Location: ${product.hidden_description}
Coordinates: ${product.hidden_coordinates}
`;
📦 Product Details:
Name: ${product.name}
Price: $${product.price}
Description: ${product.description}
Stock: ${product.quantity_in_stock}
Location: ${location.country}, ${location.city}, ${location.district}
Category: ${product.category_name}
Subcategory: ${product.subcategory_name}
🔒 Private Information:
${product.private_data}
Hidden Location: ${product.hidden_description}
Coordinates: ${product.hidden_coordinates}
`;
const keyboard = {
inline_keyboard: [
[
{ text: '✏️ Edit', callback_data: `edit_product_${productId}` },
{ text: '❌ Delete', callback_data: `delete_product_${productId}` }
{text: '✏️ Edit', callback_data: `edit_product_${productId}`},
{text: '❌ Delete', callback_data: `delete_product_${productId}`}
],
[{ text: '« Back', callback_data: `prod_category_${product.location_id}_${product.category_id}` }]
[{
text: '« Back',
callback_data: `prod_subcategory_${product.location_id}_${product.category_id}_${product.subcategory_id}`
}]
]
};
await bot.editMessageText(
message,
{
chat_id: chatId,
message_id: callbackQuery.message.message_id,
reply_markup: keyboard,
parse_mode: 'HTML'
let photoMessage;
let hiddenPhotoMessage;
// Send product photos
if (product.photo_url) {
try {
photoMessage = await bot.sendPhoto(chatId, product.photo_url, {caption: 'Public photo'});
} catch (e) {
photoMessage = await bot.sendPhoto(chatId, "./corrupt-photo.jpg", {caption: 'Public photo'})
}
);
}
if (product.hidden_photo_url) {
try {
hiddenPhotoMessage = await bot.sendPhoto(chatId, product.hidden_photo_url, {caption: 'Hidden photo'});
} catch (e) {
hiddenPhotoMessage = await bot.sendPhoto(chatId, "./corrupt-photo.jpg", {caption: 'Hidden photo'})
}
}
userStates.set(chatId, {
msgToDelete: [photoMessage.message_id, hiddenPhotoMessage.message_id]
})
await bot.deleteMessage(chatId, messageId);
await bot.sendMessage(chatId, message, {reply_markup: keyboard});
} catch (error) {
console.error('Error in handleViewProduct:', error);
await bot.sendMessage(chatId, 'Error loading product details. Please try again.');

View File

@ -291,46 +291,78 @@ export default class UserProductHandler {
static async handleProductSelection(callbackQuery) {
const chatId = callbackQuery.message.chat.id;
const messageId = callbackQuery.message.message_id;
const productId = callbackQuery.data.replace('shop_product_', '');
try {
const product = await ProductService.getDetailedProductById(productId);
if (!product) {
throw new Error('Product not found');
}
// Delete the previous message
await bot.deleteMessage(chatId, messageId);
const message = `
📦 Product Details:
Name: ${product.name}
Price: $${product.price}
Description: ${product.description}
Stock: ${product.quantity_in_stock}
Location: ${product.country}, ${product.city}, ${product.district}
Category: ${product.category_name}
🔒 Private Information:
${product.private_data}
Hidden Location: ${product.hidden_description}
Coordinates: ${product.hidden_coordinates}
`;
📦 ${product.name}
💰 Price: $${product.price}
📝 Description: ${product.description}
📦 Available: ${product.quantity_in_stock} pcs
Category: ${product.category_name}
Subcategory: ${product.subcategory_name}
`;
let photoMessageId = null;
// First send the photo if it exists
let photoMessage;
if (product.photo_url) {
try {
photoMessage = await bot.sendPhoto(chatId, product.photo_url, {caption: 'Public photo'});
} catch (e) {
photoMessage = await bot.sendPhoto(chatId, "./corrupt-photo.jpg", {caption: 'Public photo'})
}
}
const keyboard = {
inline_keyboard: [
[{ text: '« Back', callback_data: `shop_category_${product.location_id}_${product.category_id}` }]
[{text: '🛒 Buy Now', callback_data: `buy_product_${productId}`}],
[
{
text: '',
callback_data: `decrease_quantity_${productId}`,
callback_game: {} // Initially disabled as quantity starts at 1
},
{text: '1', callback_data: 'current_quantity'},
{
text: '',
callback_data: `increase_quantity_${productId}`,
callback_game: product.quantity_in_stock <= 1 ? {} : null // Disabled if stock is 1 or less
}
],
[{
text: `« Back to ${product.subcategory_name}`,
callback_data: `shop_subcategory_${product.location_id}_${product.category_id}_${product.subcategory_id}_${photoMessageId}`
}]
]
};
await bot.editMessageText(
message,
{
chat_id: chatId,
message_id: callbackQuery.message.message_id,
reply_markup: keyboard,
parse_mode: 'HTML'
}
);
// Then send the message with controls
await bot.sendMessage(chatId, message, {
reply_markup: keyboard,
parse_mode: 'HTML'
});
// Store the current quantity and photo message ID in user state
userStates.set(chatId, {
action: 'buying_product',
productId,
quantity: 1,
photoMessageId
});
} catch (error) {
console.error('Error in handleProductSelection:', error);
await bot.sendMessage(chatId, 'Error loading product details. Please try again.');

View File

@ -12,10 +12,9 @@ class ProductService {
static async getDetailedProductById(productId) {
return await db.getAsync(
`SELECT p.*, c.name as category_name, l.country, l.city, l.district
`SELECT p.*, c.name as category_name
FROM products p
JOIN categories c ON p.category_id = c.id
JOIN locations l ON p.location_id = l.id
WHERE p.id = ?`,
[productId]
);