Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions packages/api-service/app/api/episodes/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
6 changes: 3 additions & 3 deletions packages/api-service/app/api/search/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ 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 }
);
}

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,
Expand Down
16 changes: 8 additions & 8 deletions packages/api-service/app/api/subscribe/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
Expand All @@ -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 }
Expand All @@ -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 }
Expand All @@ -39,22 +39,22 @@ 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',
subscriberCount,
});
}

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 }
Expand Down
24 changes: 12 additions & 12 deletions packages/api-service/lib/podcast-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,65 +151,65 @@ 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) =>
ep.title.toLowerCase().includes(lowerQuery) ||
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;
}

const subscribers = new Map<string, Set<string>>();

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;
}
20 changes: 10 additions & 10 deletions packages/web-app/app/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ interface SubscribeResult {
const API_BASE = process.env.API_URL || 'http://localhost:3001';

export async function searchEpisodes(query: string): Promise<SearchResult> {
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 };
}

Expand All @@ -40,20 +40,20 @@ export async function searchEpisodes(query: string): Promise<SearchResult> {
);

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;
}

export async function subscribeToPostcast(
podcastId: string,
email: string
): Promise<SubscribeResult> {
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',
Expand All @@ -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<Episode[]> {
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;
}