99 lines
2.8 KiB
TypeScript
99 lines
2.8 KiB
TypeScript
"use server";
|
|
|
|
/**
|
|
* NOTE: This file contains workarounds for missing backend endpoints.
|
|
* In the future, consider implementing proper API endpoints for these functions:
|
|
* - GET /chats/:chatId/members - To get chat members
|
|
* - GET /users/:userId - To get user information
|
|
*/
|
|
|
|
/**
|
|
* Helper function to make a server-side fetch with proper error handling
|
|
*/
|
|
async function safeFetch(path: string) {
|
|
try {
|
|
// Use absolute URL with the API_URL from environment variable or default to local
|
|
const baseUrl = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3000';
|
|
|
|
// Remove any leading /api/ or api/ to prevent double prefixing
|
|
let cleanPath = path.replace(/^\/?(api\/)+/, '');
|
|
|
|
// Ensure path starts with a / for consistent joining
|
|
if (!cleanPath.startsWith('/')) {
|
|
cleanPath = '/' + cleanPath;
|
|
}
|
|
|
|
// Construct the URL with a single /api prefix
|
|
const url = `${baseUrl}/api${cleanPath}`;
|
|
|
|
console.log(`Server action fetching URL: ${url}`);
|
|
|
|
// For server components, use the fetch API directly
|
|
const response = await fetch(url);
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`API error: ${response.status}`);
|
|
}
|
|
|
|
return await response.json();
|
|
} catch (error) {
|
|
console.error(`Error fetching ${path}:`, error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get chat details and extract members information
|
|
*/
|
|
export async function getChatMembers(chatId: string) {
|
|
try {
|
|
// Use the safeFetch helper with the correct path - avoid any api prefix
|
|
const response = await safeFetch(`chats/${chatId}`);
|
|
|
|
if (response) {
|
|
// Create member objects for buyer and vendor
|
|
const members = [
|
|
{
|
|
_id: response.buyerId,
|
|
isVendor: false,
|
|
telegramUsername: response.telegramUsername || null
|
|
},
|
|
{
|
|
_id: response.vendorId,
|
|
isVendor: true
|
|
}
|
|
];
|
|
|
|
return { members };
|
|
}
|
|
|
|
return { members: [] };
|
|
} catch (error) {
|
|
console.error("Error in getChatMembers:", error);
|
|
return { members: [] };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get user information by ID
|
|
* This function is imported but doesn't appear to be used in the component.
|
|
* Keeping a placeholder implementation for future use.
|
|
*/
|
|
export async function getUserInfoById(userId: string) {
|
|
try {
|
|
// This function isn't actually used currently, but we'll keep a
|
|
// placeholder implementation in case it's needed in the future
|
|
return {
|
|
user: {
|
|
_id: userId,
|
|
name: userId && userId.length > 8
|
|
? `Customer ${userId.slice(-4)}` // For buyers
|
|
: "Vendor", // For vendors
|
|
isVendor: userId && userId.length <= 8
|
|
}
|
|
};
|
|
} catch (error) {
|
|
console.error("Error in getUserInfoById:", error);
|
|
return { user: null };
|
|
}
|
|
}
|