diff --git a/app/routes/analyze.ticker.tsx b/app/routes/analyze.ticker.tsx
index d4c364d..cf7b6b5 100644
--- a/app/routes/analyze.ticker.tsx
+++ b/app/routes/analyze.ticker.tsx
@@ -116,6 +116,15 @@ export default function StockDetail() {
setDecision(null);
try {
+ // Ensure ticker is saved in DB before analysis
+ try {
+ const fd = new FormData();
+ fd.append("ticker", ticker);
+ await fetch("/api/stocks", { method: "POST", body: fd });
+ } catch (e) {
+ console.warn("Failed to ensure ticker saved:", e);
+ }
+
const res = await fetch("/api/analyze", {
method: "POST",
headers: { "Content-Type": "application/json" },
@@ -134,6 +143,18 @@ export default function StockDetail() {
setAnalystReports(reports);
setDebateRounds(debates);
setDecision(data);
+
+ // Save last decision/explanation to DB
+ try {
+ const fd2 = new FormData();
+ fd2.append("ticker", ticker);
+ fd2.append("lastDecision", data.action ?? "");
+ fd2.append("lastExplanation", data.reasoning ?? "");
+ if (data.executionPlan) fd2.append("lastExecutionPlan", JSON.stringify(data.executionPlan));
+ await fetch("/api/stocks", { method: "POST", body: fd2 });
+ } catch (e) {
+ console.warn("Failed to save decision to DB:", e);
+ }
// Cache the results
sessionStorage.setItem(cacheKey, JSON.stringify({
@@ -375,6 +396,23 @@ export default function StockDetail() {
Note: {decision.executionPlan.note}
)}
+
+ {/* Order suggestion summary */}
+
+
Order Suggestion
+
+
+ {decision.action.toUpperCase()}
+ {decision.executionPlan.amount} shares
+ {decision.executionPlan.takeProfit != null && (
+ — Take profit: ${decision.executionPlan.takeProfit}
+ )}
+
+ {decision.executionPlan.riskManagement?.maxLossPercent != null && (
+
Risk: {decision.executionPlan.riskManagement.maxLossPercent}% max loss
+ )}
+
+
)}
diff --git a/app/routes/api/stocks/index.ts b/app/routes/api/stocks/index.ts
index f2d58e6..b31fac3 100644
--- a/app/routes/api/stocks/index.ts
+++ b/app/routes/api/stocks/index.ts
@@ -23,8 +23,26 @@ export async function action({ request }: { request: Request }) {
return Response.json({ success: true });
}
- const stock = await db.stock.create({
- data: { ticker },
+ // Optional fields to save/update
+ const lastDecision = formData.get("lastDecision")?.toString();
+ const lastExplanation = formData.get("lastExplanation")?.toString();
+ const lastExecutionPlan = formData.get("lastExecutionPlan")?.toString();
+
+ // Upsert the stock record so ticker is ensured and optional fields are saved
+ const stock = await db.stock.upsert({
+ where: { ticker },
+ update: {
+ lastDecision: lastDecision ?? undefined,
+ lastExplanation: lastExplanation ?? undefined,
+ lastExecutionPlan: lastExecutionPlan ?? undefined,
+ },
+ create: {
+ ticker,
+ lastDecision: lastDecision ?? undefined,
+ lastExplanation: lastExplanation ?? undefined,
+ lastExecutionPlan: lastExecutionPlan ?? undefined,
+ },
});
+
return Response.json(stock);
}
\ No newline at end of file
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 5a0496f..47d80c6 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -9,9 +9,12 @@ datasource db {
}
model Stock {
- id String @id @default(cuid())
- ticker String @unique
- notes String?
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
+ id String @id @default(cuid())
+ ticker String @unique
+ notes String?
+ lastDecision String?
+ lastExplanation String?
+ lastExecutionPlan String?
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
}