Fix briefs API to use JSON file storage

This commit is contained in:
Horus
2026-02-27 22:43:46 +01:00
parent 4dce0b1ffb
commit 9981d2a9d2
4 changed files with 85 additions and 54 deletions
+42 -26
View File
@@ -1,9 +1,32 @@
import { NextRequest, NextResponse } from "next/server"; import { NextRequest, NextResponse } from "next/server";
import { supabase } from "@/lib/supabase"; import fs from "fs";
import path from "path";
const STORAGE_FILE = path.join(process.cwd(), "data", "eod_briefs.json");
const DISCORD_BOT_TOKEN = process.env.DISCORD_BOT_TOKEN || "MTQ3MTk4OTUzNjE1MzQwMzU5Nw.Ghtj4n.g-tl-Ijhfn9cg6zUCUIVd94EdwL32KmlVgRoSc"; const DISCORD_BOT_TOKEN = process.env.DISCORD_BOT_TOKEN || "MTQ3MTk4OTUzNjE1MzQwMzU5Nw.Ghtj4n.g-tl-Ijhfn9cg6zUCUIVd94EdwL32KmlVgRoSc";
const EOD_CHANNEL = "1476344633406656785"; const EOD_CHANNEL = "1476344633406656785";
function ensureStorage() {
const dir = path.dirname(STORAGE_FILE);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
if (!fs.existsSync(STORAGE_FILE)) {
fs.writeFileSync(STORAGE_FILE, "[]");
}
}
function getBriefs() {
ensureStorage();
return JSON.parse(fs.readFileSync(STORAGE_FILE, "utf-8"));
}
function saveBriefs(data: any[]) {
ensureStorage();
fs.writeFileSync(STORAGE_FILE, JSON.stringify(data, null, 2));
}
function formatEODBrief(data: any): string { function formatEODBrief(data: any): string {
return `🌙 END OF DAY - ${data.date || new Date().toISOString().split('T')[0]} return `🌙 END OF DAY - ${data.date || new Date().toISOString().split('T')[0]}
@@ -21,37 +44,29 @@ ${(data.tomorrow || []).map((t: string) => `- ${t}`).join('\n')}`;
} }
export async function GET() { export async function GET() {
const { data, error } = await supabase const briefs = getBriefs();
.from("eod_briefs") return NextResponse.json(briefs);
.select("*")
.order("created_at", { ascending: false })
.limit(20);
if (error) {
return NextResponse.json({ error: error.message }, { status: 500 });
}
return NextResponse.json(data || []);
} }
export async function POST(request: NextRequest) { export async function POST(request: NextRequest) {
try { try {
const body = await request.json(); const body = await request.json();
const { data: insertData, error } = await supabase const brief = {
.from("eod_briefs") id: `eod-${Date.now()}`,
.insert([{ date: body.date || new Date().toISOString().split('T')[0],
date: body.date || new Date().toISOString().split('T')[0], completed: body.completed || [],
completed: body.completed, progress: body.progress || {},
progress: body.progress, council: body.council || {},
council: body.council, tomorrow: body.tomorrow || [],
tomorrow: body.tomorrow created_at: new Date().toISOString()
}]); };
if (error) { const briefs = getBriefs();
console.error("Supabase error:", error); briefs.unshift(brief);
return NextResponse.json({ error: error.message }, { status: 500 }); saveBriefs(briefs);
}
// Send to Discord
const discordMessage = formatEODBrief(body); const discordMessage = formatEODBrief(body);
await fetch(`https://discord.com/api/v10/channels/${EOD_CHANNEL}/messages`, { await fetch(`https://discord.com/api/v10/channels/${EOD_CHANNEL}/messages`, {
method: "POST", method: "POST",
@@ -62,8 +77,9 @@ export async function POST(request: NextRequest) {
body: JSON.stringify({ content: discordMessage }), body: JSON.stringify({ content: discordMessage }),
}); });
return NextResponse.json({ success: true, message: "EOD brief saved and sent to Discord" }); return NextResponse.json({ success: true, brief });
} catch (error) { } catch (error) {
return NextResponse.json({ error: "Failed" }, { status: 500 }); console.error("EOD brief error:", error);
return NextResponse.json({ error: "Failed to save brief" }, { status: 500 });
} }
} }
+41 -28
View File
@@ -1,9 +1,32 @@
import { NextRequest, NextResponse } from "next/server"; import { NextRequest, NextResponse } from "next/server";
import { supabase } from "@/lib/supabase"; import fs from "fs";
import path from "path";
const STORAGE_FILE = path.join(process.cwd(), "data", "morning_briefs.json");
const DISCORD_BOT_TOKEN = process.env.DISCORD_BOT_TOKEN || "MTQ3MTk4OTUzNjE1MzQwMzU5Nw.Ghtj4n.g-tl-Ijhfn9cg6zUCUIVd94EdwL32KmlVgRoSc"; const DISCORD_BOT_TOKEN = process.env.DISCORD_BOT_TOKEN || "MTQ3MTk4OTUzNjE1MzQwMzU5Nw.Ghtj4n.g-tl-Ijhfn9cg6zUCUIVd94EdwL32KmlVgRoSc";
const MORNING_CHANNEL = "1476344610493042698"; const MORNING_CHANNEL = "1476344610493042698";
function ensureStorage() {
const dir = path.dirname(STORAGE_FILE);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
if (!fs.existsSync(STORAGE_FILE)) {
fs.writeFileSync(STORAGE_FILE, "[]");
}
}
function getBriefs() {
ensureStorage();
return JSON.parse(fs.readFileSync(STORAGE_FILE, "utf-8"));
}
function saveBriefs(data: any[]) {
ensureStorage();
fs.writeFileSync(STORAGE_FILE, JSON.stringify(data, null, 2));
}
function formatMorningBrief(data: any): string { function formatMorningBrief(data: any): string {
return `☀️ MORNING BRIEF - ${data.date || new Date().toISOString().split('T')[0]} return `☀️ MORNING BRIEF - ${data.date || new Date().toISOString().split('T')[0]}
@@ -25,38 +48,28 @@ ${(data.leads || []).map((l: string) => `- ${l}`).join('\n')}`;
} }
export async function GET() { export async function GET() {
const { data, error } = await supabase const briefs = getBriefs();
.from("morning_briefs") return NextResponse.json(briefs);
.select("*")
.order("created_at", { ascending: false })
.limit(20);
if (error) {
return NextResponse.json({ error: error.message }, { status: 500 });
}
return NextResponse.json(data || []);
} }
export async function POST(request: NextRequest) { export async function POST(request: NextRequest) {
try { try {
const body = await request.json(); const body = await request.json();
// Save to Supabase const brief = {
const { data, error } = await supabase id: `morning-${Date.now()}`,
.from("morning_briefs") date: body.date || new Date().toISOString().split('T')[0],
.insert([{ weather: body.weather,
date: body.date || new Date().toISOString().split('T')[0], market: body.market,
weather: body.weather, priorities: body.priorities || [],
market: body.market, goal: body.goal,
priorities: body.priorities, leads: body.leads || [],
goal: body.goal, created_at: new Date().toISOString()
leads: body.leads };
}]);
if (error) { const briefs = getBriefs();
console.error("Supabase error:", error); briefs.unshift(brief);
return NextResponse.json({ error: error.message }, { status: 500 }); saveBriefs(briefs);
}
// Send to Discord // Send to Discord
const discordMessage = formatMorningBrief(body); const discordMessage = formatMorningBrief(body);
@@ -69,9 +82,9 @@ export async function POST(request: NextRequest) {
body: JSON.stringify({ content: discordMessage }), body: JSON.stringify({ content: discordMessage }),
}); });
return NextResponse.json({ success: true, message: "Morning brief saved and sent to Discord" }); return NextResponse.json({ success: true, brief });
} catch (error) { } catch (error) {
console.error("Error:", error); console.error("Morning brief error:", error);
return NextResponse.json({ error: "Failed to save brief" }, { status: 500 }); return NextResponse.json({ error: "Failed to save brief" }, { status: 500 });
} }
} }
+1
View File
@@ -0,0 +1 @@
[]
+1
View File
@@ -0,0 +1 @@
[]