diff --git a/packages/api-service/app/api/episodes/route.ts b/packages/api-service/app/api/episodes/route.ts index 634fd1f..0288bf1 100644 --- a/packages/api-service/app/api/episodes/route.ts +++ b/packages/api-service/app/api/episodes/route.ts @@ -1029,23 +1029,23 @@ export async function GET(request: Request) { const { searchParams } = new URL(request.url); const id = searchParams.get('id'); - console.log('Fetching episodes, id:', id); + logger.info('Fetching episodes, id', { id }); if (id) { const episode = getEpisodeById(id); if (!episode) { - console.error('Episode not found:', id); + logger.error('Episode not found', { id }); return NextResponse.json( { error: 'Episode not found' }, { status: 404 } ); } - console.log('Found episode:', episode.title); + logger.info('Found episode', { episode.title }); return NextResponse.json(episode); } const episodes = getEpisodes(); - console.log('Returning', episodes.length, 'episodes'); + logger.info('Returning', { value: episodes.length, 'episodes' }); return NextResponse.json({ episodes, total: episodes.length, diff --git a/packages/api-service/app/api/search/route.ts b/packages/api-service/app/api/search/route.ts index 3bdc0f2..3c0f619 100644 --- a/packages/api-service/app/api/search/route.ts +++ b/packages/api-service/app/api/search/route.ts @@ -5,10 +5,10 @@ export async function GET(request: Request) { const { searchParams } = new URL(request.url); const query = searchParams.get('q'); - console.log('Search request received, query:', query); + logger.info('Search request received, query', { query }); if (!query || query.trim() === '') { - console.warn('Empty search query received'); + logger.warn('Empty search query received'); return NextResponse.json( { error: 'Search query is required' }, { status: 400 } @@ -16,7 +16,7 @@ export async function GET(request: Request) { } const results = searchEpisodes(query); - console.log('Search completed, found', results.length, 'results for query:', query); + logger.info('Search completed, found', { value: results.length, 'results for query:', query }); return NextResponse.json({ query, results, diff --git a/packages/api-service/app/api/subscribe/route.ts b/packages/api-service/app/api/subscribe/route.ts index 8fc4814..ff99263 100644 --- a/packages/api-service/app/api/subscribe/route.ts +++ b/packages/api-service/app/api/subscribe/route.ts @@ -2,15 +2,15 @@ import { NextResponse } from 'next/server'; import { subscribe, getPodcastById, getSubscriberCount } from '@/lib/podcast-data'; export async function POST(request: Request) { - console.log('Subscribe request received'); + logger.info('Subscribe request received'); try { const body = await request.json(); const { podcastId, email } = body; - console.log('Processing subscription for podcast:', podcastId, 'email:', email); + logger.info('Processing subscription for podcast', { podcastId, 'email:', email }); if (!podcastId || !email) { - console.warn('Missing required fields - podcastId:', podcastId, 'email:', email); + logger.warn('Missing required fields - podcastId', { podcastId, 'email:', email }); return NextResponse.json( { error: 'podcastId and email are required' }, { status: 400 } @@ -19,7 +19,7 @@ export async function POST(request: Request) { const podcast = getPodcastById(podcastId); if (!podcast) { - console.error('Podcast not found:', podcastId); + logger.error('Podcast not found', { podcastId }); return NextResponse.json( { error: 'Podcast not found' }, { status: 404 } @@ -28,7 +28,7 @@ export async function POST(request: Request) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { - console.warn('Invalid email format:', email); + logger.warn('Invalid email format', { email }); return NextResponse.json( { error: 'Invalid email format' }, { status: 400 } @@ -39,7 +39,7 @@ export async function POST(request: Request) { const subscriberCount = getSubscriberCount(podcastId); if (!isNew) { - console.log('User already subscribed:', email, 'to podcast:', podcastId); + logger.info('User already subscribed', { email, 'to podcast:', podcastId }); return NextResponse.json({ success: true, message: 'Already subscribed', @@ -47,14 +47,14 @@ export async function POST(request: Request) { }); } - console.log('New subscription created - email:', email, 'podcast:', podcast.name, 'total subscribers:', subscriberCount); + logger.info('New subscription created - email', { email, 'podcast:', podcast.name, 'total subscribers:', subscriberCount }); return NextResponse.json({ success: true, message: `Successfully subscribed to ${podcast.name}`, subscriberCount, }); } catch (error) { - console.error('Failed to process subscription:', error); + logger.error('Failed to process subscription', { error }); return NextResponse.json( { error: 'Invalid request body' }, { status: 400 } diff --git a/packages/api-service/lib/podcast-data.ts b/packages/api-service/lib/podcast-data.ts index 6155e0b..330b604 100644 --- a/packages/api-service/lib/podcast-data.ts +++ b/packages/api-service/lib/podcast-data.ts @@ -151,21 +151,21 @@ export const episodes: Episode[] = [ ]; export function getEpisodes(): Episode[] { - console.log('getEpisodes: fetching all episodes'); + logger.info('getEpisodes: fetching all episodes'); return episodes; } export function getEpisodeById(id: string): Episode | undefined { - console.log('getEpisodeById: looking up episode with id:', id); + logger.info('getEpisodeById: looking up episode with id', { id }); const episode = episodes.find((ep) => ep.id === id); if (!episode) { - console.warn('getEpisodeById: episode not found for id:', id); + logger.warn('getEpisodeById: episode not found for id', { id }); } return episode; } export function searchEpisodes(query: string): Episode[] { - console.log('searchEpisodes: searching for query:', query); + logger.info('searchEpisodes: searching for query', { query }); const lowerQuery = query.toLowerCase(); const results = episodes.filter( (ep) => @@ -173,20 +173,20 @@ export function searchEpisodes(query: string): Episode[] { ep.description.toLowerCase().includes(lowerQuery) || ep.podcastName.toLowerCase().includes(lowerQuery) ); - console.log('searchEpisodes: found', results.length, 'matching episodes'); + logger.info('searchEpisodes: found', { value: results.length, 'matching episodes' }); return results; } export function getPodcasts(): Podcast[] { - console.log('getPodcasts: fetching all podcasts'); + logger.info('getPodcasts: fetching all podcasts'); return podcasts; } export function getPodcastById(id: string): Podcast | undefined { - console.log('getPodcastById: looking up podcast with id:', id); + logger.info('getPodcastById: looking up podcast with id', { id }); const podcast = podcasts.find((p) => p.id === id); if (!podcast) { - console.warn('getPodcastById: podcast not found for id:', id); + logger.warn('getPodcastById: podcast not found for id', { id }); } return podcast; } @@ -194,22 +194,22 @@ export function getPodcastById(id: string): Podcast | undefined { const subscribers = new Map>(); export function subscribe(podcastId: string, email: string): boolean { - console.log('subscribe: attempting to subscribe email:', email, 'to podcast:', podcastId); + logger.info('subscribe: attempting to subscribe email', { email, 'to podcast:', podcastId }); if (!subscribers.has(podcastId)) { subscribers.set(podcastId, new Set()); } const podcastSubscribers = subscribers.get(podcastId)!; if (podcastSubscribers.has(email)) { - console.log('subscribe: email already subscribed:', email); + logger.info('subscribe: email already subscribed', { email }); return false; } podcastSubscribers.add(email); - console.log('subscribe: new subscription added, total subscribers:', podcastSubscribers.size); + logger.info('subscribe: new subscription added, total subscribers', { podcastSubscribers.size }); return true; } export function getSubscriberCount(podcastId: string): number { const count = subscribers.get(podcastId)?.size ?? 0; - console.log('getSubscriberCount: podcast', podcastId, 'has', count, 'subscribers'); + logger.info('getSubscriberCount: podcast', { value: podcastId, 'has', count, 'subscribers' }); return count; } diff --git a/packages/web-app/app/actions.ts b/packages/web-app/app/actions.ts index 620b4bc..98523ec 100644 --- a/packages/web-app/app/actions.ts +++ b/packages/web-app/app/actions.ts @@ -27,10 +27,10 @@ interface SubscribeResult { const API_BASE = process.env.API_URL || 'http://localhost:3001'; export async function searchEpisodes(query: string): Promise { - console.log('Server action: searchEpisodes called with query:', query); + logger.info('Server action: searchEpisodes called with query', { query }); if (!query || query.trim() === '') { - console.log('Empty query, returning empty results'); + logger.info('Empty query, returning empty results'); return { query: '', results: [], total: 0 }; } @@ -40,12 +40,12 @@ export async function searchEpisodes(query: string): Promise { ); if (!response.ok) { - console.error('Search API request failed with status:', response.status); + logger.error('Search API request failed with status', { response.status }); throw new Error('Failed to search episodes'); } const data = await response.json(); - console.log('Search completed, found', data.total, 'results'); + logger.info('Search completed, found', { value: data.total, 'results' }); return data; } @@ -53,7 +53,7 @@ export async function subscribeToPostcast( podcastId: string, email: string ): Promise { - console.log('Server action: subscribeToPostcast called for podcast:', podcastId); + logger.info('Server action: subscribeToPostcast called for podcast', { podcastId }); const response = await fetch(`${API_BASE}/api/subscribe`, { method: 'POST', @@ -65,28 +65,28 @@ export async function subscribeToPostcast( if (!response.ok) { const error = await response.json(); - console.error('Subscribe API request failed:', error.error); + logger.error('Subscribe API request failed', { error.error }); throw new Error(error.error || 'Failed to subscribe'); } const data = await response.json(); - console.log('Subscription successful for email:', email); + logger.info('Subscription successful for email', { email }); return data; } export async function getEpisodes(): Promise { - console.log('Server action: getEpisodes called'); + logger.info('Server action: getEpisodes called'); const response = await fetch(`${API_BASE}/api/episodes`, { cache: 'no-store', }); if (!response.ok) { - console.error('Episodes API request failed with status:', response.status); + logger.error('Episodes API request failed with status', { response.status }); throw new Error('Failed to fetch episodes'); } const data = await response.json(); - console.log('Fetched', data.episodes.length, 'episodes from API'); + logger.info('Fetched', { value: data.episodes.length, 'episodes from API' }); return data.episodes; }