diff --git a/server/storage.ts b/server/storage.ts index bf570d3..165a715 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -24,17 +24,19 @@ export class MemStorage implements IStorage { return this.newsletters.filter( newsletter => newsletter.title.toLowerCase().includes(lowercaseQuery) || - newsletter.description?.toLowerCase().includes(lowercaseQuery) + (newsletter.description?.toLowerCase() || '').includes(lowercaseQuery) ).sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); } async importNewsletters(newsletters: InsertNewsletter[]): Promise { - newsletters.forEach(newsletter => { - this.newsletters.push({ - ...newsletter, - id: this.currentId++ - }); - }); + // Ensure description is null if not provided + const processedNewsletters = newsletters.map(newsletter => ({ + ...newsletter, + description: newsletter.description ?? null, + id: this.currentId++ + })); + + this.newsletters.push(...processedNewsletters); } } diff --git a/server/utils.ts b/server/utils.ts index ccdb4a0..632db93 100644 --- a/server/utils.ts +++ b/server/utils.ts @@ -13,29 +13,38 @@ export async function scrapeNewsletters(): Promise { // The main archive container table $('.archiveTable tr').each((_, element) => { const $element = $(element); - + // Extract newsletter details const title = $element.find('.archiveTitle').text().trim(); const dateText = $element.find('.archiveDate').text().trim(); const url = $element.find('a').attr('href'); - + if (title && dateText && url) { // Parse the date (format: MM/DD/YYYY) - const [month, day, year] = dateText.split('/'); + const [month, day, year] = dateText.split('/').map(num => num.trim()); + if (!month || !day || !year) { + console.warn('Invalid date format:', dateText); + return; + } + const date = `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`; newsletters.push({ title, date, url: `https://app.robly.com${url}`, - description: null + description: null // Explicitly set to null as we don't have descriptions from the archive page }); } }); + if (newsletters.length === 0) { + throw new Error('No newsletters found in the archive'); + } + return newsletters; } catch (error) { console.error('Error scraping newsletters:', error); throw error; } -} +} \ No newline at end of file