Update blog seeding to always sync existing articles with new content
Modify server/seed.ts to update existing articles based on slug, and clean up old manual update operations. Update replit.md to reflect new seed behavior. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 23852c00-4779-460a-9e0c-d09fee4b6c92 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 561c9efd-9a81-4252-9d4d-1da2e39baee2 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/f209e72a-0939-48fa-84fc-57854de71967/23852c00-4779-460a-9e0c-d09fee4b6c92/H1wOZyV Replit-Helium-Checkpoint-Created: true
This commit is contained in:
parent
673cc3eefa
commit
2019c333ee
BIN
attached_assets/image_1772886839911.png
Normal file
BIN
attached_assets/image_1772886839911.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 394 KiB |
@ -26,6 +26,13 @@ The official website for Folx Music Television (folx.tv). Dark-themed bento grid
|
||||
- `articles`: id (serial), title, slug (unique), excerpt, content (HTML), coverImage, category, author, featured, views, publishedAt
|
||||
- `article_views`: id (serial), articleId, ipHash (sha256 truncated to 16 chars), viewedAt — tracks unique IP views per article
|
||||
|
||||
## Seed Behavior
|
||||
- `server/seed.ts` runs on startup and **always syncs** article content from seedArticles array to the database
|
||||
- Existing articles (matched by slug) are **fully updated** with latest title, excerpt, content, coverImage, category, author, featured, publishedAt
|
||||
- New articles are inserted; articles not in seed list are deleted
|
||||
- HTML entity „/“ in title/excerpt are auto-replaced with „/" after seeding
|
||||
- Any changes to article content in seed.ts will be reflected on next deployment
|
||||
|
||||
## API Endpoints
|
||||
- `GET /api/articles` - All articles
|
||||
- `GET /api/articles/featured` - Featured articles
|
||||
|
||||
101
server/seed.ts
101
server/seed.ts
@ -228,8 +228,28 @@ export async function seedDatabase() {
|
||||
}
|
||||
|
||||
let added = 0;
|
||||
let updated = 0;
|
||||
for (const article of seedArticles) {
|
||||
if (existingSlugs.has(article.slug)) continue;
|
||||
if (existingSlugs.has(article.slug)) {
|
||||
await db.execute(
|
||||
sql`UPDATE articles SET
|
||||
title = ${article.title},
|
||||
excerpt = ${article.excerpt},
|
||||
content = ${article.content},
|
||||
cover_image = ${article.coverImage},
|
||||
category = ${article.category},
|
||||
author = ${article.author},
|
||||
featured = ${article.featured}
|
||||
WHERE slug = ${article.slug}`
|
||||
);
|
||||
if (article.publishedAt) {
|
||||
await db.execute(
|
||||
sql`UPDATE articles SET published_at = ${article.publishedAt} WHERE slug = ${article.slug}`
|
||||
);
|
||||
}
|
||||
updated++;
|
||||
continue;
|
||||
}
|
||||
|
||||
await storage.createArticle({
|
||||
title: article.title,
|
||||
@ -253,71 +273,26 @@ export async function seedDatabase() {
|
||||
if (added > 0) {
|
||||
console.log("Database seeded: added " + added + " new articles.");
|
||||
}
|
||||
|
||||
for (const article of seedArticles) {
|
||||
if (article.publishedAt && existingSlugs.has(article.slug)) {
|
||||
await db.execute(
|
||||
sql`UPDATE articles SET published_at = ${article.publishedAt} WHERE slug = ${article.slug}`
|
||||
);
|
||||
}
|
||||
if (updated > 0) {
|
||||
console.log("Database seeded: updated " + updated + " existing articles.");
|
||||
}
|
||||
|
||||
await db.execute(sql`
|
||||
UPDATE articles SET
|
||||
title = REPLACE(REPLACE(title, '„', '„'), '“', '"'),
|
||||
excerpt = REPLACE(REPLACE(excerpt, '„', '„'), '“', '"')
|
||||
WHERE title LIKE '%„%' OR title LIKE '%“%'
|
||||
OR excerpt LIKE '%„%' OR excerpt LIKE '%“%'
|
||||
`);
|
||||
|
||||
await db.execute(sql`
|
||||
UPDATE articles SET
|
||||
title = ${"Melanie Payer präsentiert den Titel \u201eEndlich wieder Gipfelstammtisch\u201c"},
|
||||
excerpt = ${"Melanie Payer stellt ihren Titel \u201eEndlich wieder Gipfelstammtisch\u201c vor \u2013 den offiziellen Titelsong der neuen Staffel der Sendung \u201eGipfelstammtisch\u201c auf Folx TV."},
|
||||
content = ${"<p>Die beliebte S\u00e4ngerin <strong>Melanie Payer</strong> stellt ihren Titel \u201eEndlich wieder Gipfelstammtisch\u201c vor, der eigens als Titelsong f\u00fcr die neue Staffel der Sendung <strong>\u201eGipfelstammtisch\u201c</strong> auf Folx TV geschrieben wurde. Im Zuge der Ver\u00f6ffentlichung wurde auch ein offizielles Musikvideo produziert, das die musikalische Idee und die beteiligten K\u00fcnstler in den Mittelpunkt stellt.</p>\n<p>Die Produktion entstand im renommierten Tonstudio FD-Musics in Gmunden. Komponiert wurde der Titel von <strong>Flo Daxner</strong> und <strong>Hanneliese Krei\u00dfl Wurth</strong>, die auch den Text verfasste. Produktion und Arrangement \u00fcbernahm Flo Daxner. Ver\u00f6ffentlicht wurde der Song unter dem Label mymusic.media und ist auf allen g\u00e4ngigen Plattformen als Download und Stream verf\u00fcgbar.</p>\n<p><strong>Song & Musikvideo:</strong><br><a href=\"https://music.imusician.pro/a/K2P_nWeA\" target=\"_blank\" rel=\"noopener noreferrer\">https://music.imusician.pro/a/K2P_nWeA</a></p>\n<div style=\"position:relative;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%;margin:1.5rem 0;\"><iframe style=\"position:absolute;top:0;left:0;width:100%;height:100%;border:0;border-radius:8px;\" src=\"https://www.youtube.com/embed/38HygQCVFoo\" title=\"Melanie Payer - Endlich wieder Gipfelstammtisch\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe></div>\n<p>Der Titel wurde speziell f\u00fcr die Sendung \u201eGipfelstammtisch\u201c geschrieben, um deren Charakter musikalisch widerzuspiegeln \u2013 Geselligkeit, Tradition und die authentische Volksmusik aus der Region Wilder Kaiser. Im Fokus stehen die Musik und die K\u00fcnstler, die die neue Staffel begleiten.</p>\n<p>Im Musikvideo wirken mit: <strong>Natascha</strong>, <strong>Meli Stein</strong>, <strong>Linda Feller</strong>, <strong>Mark Ed</strong>, <strong>Da Wadltreiber von Amadeus</strong>, <strong>Tauern Echo</strong>, <strong>Melanie Payer</strong>, <strong>Hansi Berger</strong>, <strong>Sanny \u2013 Die Stimme der Berge</strong>, <strong>Julia Raich</strong>, <strong>Spitzbua Markus</strong>, <strong>Meissnitzer Band</strong>, <strong>Brennholz</strong>, <strong>Charly Kaiser</strong>, <strong>Franz Nolf</strong>, <strong>Die Grubertaler</strong>, <strong>Franz Steiner</strong>, <strong>Marlena Martinelli</strong>, <strong>Die 3 Z'widern</strong>, <strong>SUSAL</strong> und <strong>Pfundskerle</strong>. Wijbrand van der Sande ist im Hintergrund zu sehen, w\u00e4hrend der Fokus klar auf dem Titel und den beteiligten K\u00fcnstlern liegt.</p>\n<p>\u201eEndlich wieder Gipfelstammtisch\u201c verbindet die neue Staffel der Sendung mit der Klangwelt der alpenl\u00e4ndischen Volksmusik und unterstreicht die musikalische Identit\u00e4t des Formats.</p>"}
|
||||
WHERE slug = 'melanie-payer-endlich-wieder-gipfelstammtisch'
|
||||
`);
|
||||
|
||||
await db.execute(sql`
|
||||
UPDATE articles SET
|
||||
title = REPLACE(REPLACE(title, '„', '\u201e'), '“', '\u201c'),
|
||||
excerpt = REPLACE(REPLACE(excerpt, '„', '\u201e'), '“', '\u201c')
|
||||
WHERE title LIKE '%„%' OR title LIKE '%“%'
|
||||
OR excerpt LIKE '%„%' OR excerpt LIKE '%“%'
|
||||
`);
|
||||
|
||||
await db.execute(sql`
|
||||
UPDATE articles SET
|
||||
cover_image = REPLACE(cover_image, '.webp', '.jpg')
|
||||
WHERE cover_image LIKE '%.webp'
|
||||
`);
|
||||
|
||||
await db.execute(sql`
|
||||
UPDATE articles SET
|
||||
title = ${"John Prisco \u2013 Die Geschichte eines Musikers"},
|
||||
slug = 'john-prisco-die-geschichte-eines-musikers',
|
||||
excerpt = ${"In der Sendung \u201eDie Geschichte des Liedes\u201c auf FOLX Music Television wird der Musiker John Prisco vorgestellt. In dieser Episode lernen die Zuschauer seinen musikalischen Weg und die Geschichten hinter einigen seiner Lieder kennen."},
|
||||
content = ${"<p>In der Sendung \u201eDie Geschichte des Liedes\u201c auf FOLX Music Television wird der Musiker <strong>John Prisco</strong> vorgestellt. In dieser Episode lernen die Zuschauer seinen musikalischen Weg und die Geschichten hinter einigen seiner Lieder kennen.</p>\n<p><strong>John Prisco</strong>, mit b\u00fcrgerlichem Namen <strong>Albert Koller</strong>, wurde am <strong>25. Januar 1956</strong> geboren. Schon fr\u00fch spielte Musik eine wichtige Rolle in seinem Leben. Im Laufe der Jahre entwickelte er seinen eigenen Stil und wurde als K\u00fcnstler bekannt, der gef\u00fchlvolle Melodien mit pers\u00f6nlichen Geschichten verbindet. Mit seinen Auftritten bei verschiedenen Veranstaltungen und in Fernsehsendungen erreichte er ein treues Publikum.</p>\n<p>Viele seiner Lieder basieren auf pers\u00f6nlichen Erfahrungen und Momenten aus seinem Leben. Gerade diese N\u00e4he zu echten Geschichten machte seine Musik f\u00fcr viele Zuh\u00f6rer besonders authentisch.</p>\n<div style=\"display:flex;justify-content:center;margin:2rem 0;\"><iframe src=\"https://player.mediadelivery.net/embed/476412/ee136953-2573-4f3b-8632-bf177175aa97\" loading=\"lazy\" style=\"border:none;width:100%;aspect-ratio:16/9;\" allow=\"accelerometer;gyroscope;encrypted-media;picture-in-picture;\" allowfullscreen=\"true\"></iframe></div>\n<p>In der Sendung \u201eDie Geschichte des Liedes\u201c spricht John Prisco \u00fcber seine Inspiration, \u00fcber die Entstehung seiner Songs und dar\u00fcber, welche Bedeutung Musik f\u00fcr ihn hatte. Die Sendung gibt damit einen Einblick in seine musikalische Arbeit und seine Gedanken zur Musik.</p>\n<p>Der Musiker <strong>John Prisco</strong> verstarb am <strong>28. August 2025</strong> im Alter von 69 Jahren. Seine Musik und seine Auftritte bleiben jedoch f\u00fcr viele Fans in Erinnerung.</p>\n<p>Die komplette Ausgabe der Sendung \u201eDie Geschichte des Liedes\u201c mit John Prisco k\u00f6nnen Sie in diesem Artikel ansehen.</p>"},
|
||||
cover_image = '/uploads/john-prisco.jpg',
|
||||
published_at = '2026-03-06T12:00:00.000Z'
|
||||
WHERE slug = 'john-prisco-die-geschichte-des-liedes' OR slug = 'john-prisco-die-geschichte-eines-musikers'
|
||||
`);
|
||||
|
||||
const stadl12Seed = seedArticles.find(a => a.slug === 'folx-stadl-sendung-12-musik-humor-und-beste-schlagerunterhaltung');
|
||||
if (stadl12Seed) {
|
||||
await db.execute(sql`
|
||||
UPDATE articles SET
|
||||
title = ${stadl12Seed.title},
|
||||
excerpt = ${stadl12Seed.excerpt},
|
||||
content = ${stadl12Seed.content},
|
||||
cover_image = ${stadl12Seed.coverImage},
|
||||
category = ${stadl12Seed.category},
|
||||
featured = ${stadl12Seed.featured}
|
||||
WHERE slug = 'folx-stadl-sendung-12-musik-humor-und-beste-schlagerunterhaltung'
|
||||
title = REPLACE(REPLACE(title, '„', '„'), '“', '“'),
|
||||
excerpt = REPLACE(REPLACE(excerpt, '„', '„'), '“', '“')
|
||||
WHERE title LIKE '%„%' OR title LIKE '%“%'
|
||||
OR excerpt LIKE '%„%' OR excerpt LIKE '%“%'
|
||||
`);
|
||||
|
||||
await db.execute(sql`
|
||||
UPDATE articles SET
|
||||
slug = 'john-prisco-die-geschichte-eines-musikers'
|
||||
WHERE slug = 'john-prisco-die-geschichte-des-liedes'
|
||||
`);
|
||||
|
||||
await db.execute(sql`
|
||||
DELETE FROM articles WHERE slug = 'folx-stadl-sendung-12'
|
||||
`);
|
||||
}
|
||||
|
||||
await db.execute(sql`
|
||||
DELETE FROM articles WHERE slug = 'folx-stadl-sendung-12'
|
||||
`);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user