ttbkk-mcp-server
Version:
MCP server providing access to Korean tteokbokki restaurant database with search, location-based queries, and brand information
72 lines • 2.36 kB
JavaScript
import { supabase } from '../lib/supabase.js';
/**
* Search for tteokbokki restaurants by query (실제 ttbkk-web usePlaceMap 기반)
* @param query - Search query (location, restaurant name, brand name, etc.)
* @param limit - Maximum number of results to return
* @returns Array of matching restaurants
*/
export async function searchTteokbokkiRestaurants(query, limit = 10) {
try {
// ttbkk-web usePlaceDetail과 동일한 구조로 조회
const { data, error } = await supabase
.from('place')
.select(`
*,
brand (
*,
hashtags:brand_hashtags!brand_id (
hashtag_id
)
),
hashtags:place_hashtags!place_id (
hashtag_id
)
`)
.eq('is_deleted', false)
.or(`name.ilike.%${query}%,address.ilike.%${query}%`)
.limit(limit);
if (error) {
console.error('Supabase error:', error);
throw new Error(`Failed to search restaurants: ${error.message}`);
}
return data || [];
}
catch (error) {
console.error('Error searching restaurants:', error);
throw error;
}
}
/**
* Get all restaurants in a bounding box (ttbkk-web usePlaceMap과 동일)
* @param bottomLeft - Bottom left coordinates
* @param topRight - Top right coordinates
* @param limit - Maximum number of results to return
* @returns Array of restaurants in the area
*/
export async function getRestaurantsInArea(bottomLeft, topRight, limit = 100) {
try {
const { data, error } = await supabase
.from('place')
.select(`
*,
brand (*),
place_hashtags (*)
`)
.eq('is_deleted', false)
.gte('latitude', bottomLeft.latitude)
.lte('latitude', topRight.latitude)
.gte('longitude', bottomLeft.longitude)
.lte('longitude', topRight.longitude)
.limit(limit);
if (error) {
console.error('Supabase error:', error);
throw new Error(`Failed to get restaurants in area: ${error.message}`);
}
return data || [];
}
catch (error) {
console.error('Error getting restaurants in area:', error);
throw error;
}
}
//# sourceMappingURL=restaurant-search.js.map