Odstranjeni kozmicni dogodki: stran, scheduler in API

This commit is contained in:
sebastjan 2026-08-15 08:19:44 +02:00
parent b61bfac5d3
commit 7dcee28bf2
3 changed files with 3 additions and 113 deletions

View File

@ -26,7 +26,6 @@ import { InArticleAd, PageSideAds } from "@/components/adsense";
import {
SIGNS,
ELEMENT_COLORS,
ASTRO_EVENTS,
getHoroscope as getStaticHoroscope,
getRating,
getLuckyNumbers,
@ -56,88 +55,6 @@ function StarRating({ count }: { count: number }) {
);
}
function getEventIcon(icon: string) {
switch (icon) {
case "mercury": return <AlertTriangle className="w-5 h-5 text-amber-400" />;
case "moon": return <Moon className="w-5 h-5 text-blue-300" />;
case "venus": return <Heart className="w-5 h-5 text-pink-400" />;
case "sun": return <Sun className="w-5 h-5 text-amber-300" />;
case "saturn": return <Briefcase className="w-5 h-5 text-slate-400" />;
case "newmoon": return <Moon className="w-5 h-5 text-violet-400" />;
default: return <Star className="w-5 h-5 text-primary" />;
}
}
function getEventColor(type: string) {
switch (type) {
case "retrograde": return { bg: "bg-amber-500/10", border: "border-amber-500/20", accent: "text-amber-400" };
case "moon": return { bg: "bg-blue-500/10", border: "border-blue-500/20", accent: "text-blue-400" };
case "transit": return { bg: "bg-pink-500/10", border: "border-pink-500/20", accent: "text-pink-400" };
case "season": return { bg: "bg-emerald-500/10", border: "border-emerald-500/20", accent: "text-emerald-400" };
default: return { bg: "bg-primary/10", border: "border-primary/20", accent: "text-primary" };
}
}
interface CosmicEvent {
title: string;
description: string;
dateRange: string;
icon: string;
type: string;
affectedSigns: string[];
}
function AstroEventsSection() {
const { data: apiEvents = [] } = useQuery<CosmicEvent[]>({
queryKey: ["/api/cosmic-events"],
staleTime: 1000 * 60 * 30,
refetchOnWindowFocus: true,
});
// Use live AI-generated events when available, otherwise fall back to static list.
const events = apiEvents.length > 0 ? apiEvents : ASTRO_EVENTS;
return (
<section className="mb-10" data-testid="section-astro-events">
<h2 className="text-lg font-bold text-foreground flex items-center gap-2 mb-4">
<Sparkles className="w-5 h-5 text-primary" />
Aktuelle kosmische Ereignisse
</h2>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
{events.map((event, i) => {
const ec = getEventColor(event.type);
return (
<div
key={i}
className={`${ec.bg} border ${ec.border} rounded-xl p-4 transition-all hover:scale-[1.02]`}
data-testid={`card-astro-event-${i}`}
>
<div className="flex items-start gap-3 mb-2">
{getEventIcon(event.icon)}
<div className="flex-1 min-w-0">
<h3 className={`font-semibold text-sm ${ec.accent}`}>{event.title}</h3>
<p className="text-[11px] text-muted-foreground">{event.dateRange}</p>
</div>
</div>
<p className="text-xs text-foreground/70 leading-relaxed mb-3">{event.description}</p>
<div className="flex flex-wrap gap-1">
{event.affectedSigns.map((s) => {
const sign = SIGNS.find((x) => x.name === s);
return (
<span key={s} className="text-[10px] bg-white/5 border border-white/10 rounded px-1.5 py-0.5 text-muted-foreground">
{sign?.symbol} {s}
</span>
);
})}
</div>
</div>
);
})}
</div>
</section>
);
}
function SignGrid({ onSelect, selectedIndex, aiHoroscopes }: { onSelect: (i: number) => void; selectedIndex: number | null; aiHoroscopes: AIHoroscope[] }) {
return (
<section className="mb-10" data-testid="section-sign-grid">
@ -481,8 +398,6 @@ export default function HoroscopePage() {
</div>
)}
<AstroEventsSection />
<InArticleAd />
<SignGrid onSelect={handleSelect} selectedIndex={selected} aiHoroscopes={aiHoroscopes} />

View File

@ -3,7 +3,7 @@ import { createServer, type Server } from "http";
import { storage } from "./storage";
import { insertArticleSchema } from "@shared/schema";
import { seedDatabase } from "./seed";
import { generateDailyHoroscopes, getHoroscopesForToday, getOrGenerateHoroscope, getCosmicEventsForToday, generateCosmicEvents, setHoroscopeImages } from "./horoscope-generator";
import { generateDailyHoroscopes, getHoroscopesForToday, getOrGenerateHoroscope, setHoroscopeImages } from "./horoscope-generator";
import { startDailyScheduler } from "./scheduler";
import { analyzeAllArticleImages, getCachedFocalPoints } from "./focal-point";
import { optimizeImage } from "./image-optimizer";
@ -786,26 +786,6 @@ export async function registerRoutes(
}
});
// Cosmic events API
app.get("/api/cosmic-events", async (_req, res) => {
try {
const events = await getCosmicEventsForToday();
res.json(events);
} catch (err: any) {
res.status(500).json({ message: err.message });
}
});
app.post("/api/cosmic-events/generate", async (_req, res) => {
try {
await generateCosmicEvents();
const events = await getCosmicEventsForToday();
res.json({ generated: events.length, events });
} catch (err: any) {
res.status(500).json({ message: err.message });
}
});
function parseRssItems(xml: string, maxAgeDays?: number): { title: string; link: string; source: string; pubDate: string }[] {
const channelTitle = xml.match(/<channel>[\s\S]*?<title>(.*?)<\/title>/)?.[1]?.replace(/<!\[CDATA\[|\]\]>/g, "").trim() || "";
const items: { title: string; link: string; source: string; pubDate: string }[] = [];

View File

@ -1,4 +1,4 @@
import { generateDailyHoroscopes, generateCosmicEvents } from "./horoscope-generator";
import { generateDailyHoroscopes } from "./horoscope-generator";
async function runDailyGeneration() {
try {
@ -6,11 +6,6 @@ async function runDailyGeneration() {
} catch (err: any) {
console.error("[scheduler] Horoscope generation failed:", err.message);
}
try {
await generateCosmicEvents();
} catch (err: any) {
console.error("[scheduler] Cosmic events generation failed:", err.message);
}
}
export function startDailyScheduler() {
@ -24,5 +19,5 @@ export function startDailyScheduler() {
runDailyGeneration();
}, SIX_HOURS);
console.log("[scheduler] Daily horoscope + cosmic events scheduler started.");
console.log("[scheduler] Daily horoscope scheduler started.");
}