WIP main worktree changes before merge
This commit is contained in:
@@ -18,6 +18,7 @@ import type {
|
||||
} from '@/lib/types';
|
||||
import { auth } from '@/lib/auth';
|
||||
import { requireAuthenticatedSession } from '@/lib/server/auth-session';
|
||||
import { getLatestFinancialIngestionSchemaStatus } from '@/lib/server/db/financial-ingestion-schema';
|
||||
import { asErrorMessage, jsonError } from '@/lib/server/http';
|
||||
import { buildPortfolioSummary } from '@/lib/server/portfolio';
|
||||
import {
|
||||
@@ -391,16 +392,36 @@ export const app = new Elysia({ prefix: '/api' })
|
||||
getTaskQueueSnapshot(),
|
||||
checkWorkflowBackend()
|
||||
]);
|
||||
const ingestionSchema = getLatestFinancialIngestionSchemaStatus();
|
||||
const ingestionSchemaPayload = ingestionSchema
|
||||
? {
|
||||
ok: ingestionSchema.ok,
|
||||
mode: ingestionSchema.mode,
|
||||
missingIndexes: ingestionSchema.missingIndexes,
|
||||
duplicateGroups: ingestionSchema.duplicateGroups,
|
||||
lastCheckedAt: ingestionSchema.lastCheckedAt
|
||||
}
|
||||
: {
|
||||
ok: false,
|
||||
mode: 'failed' as const,
|
||||
missingIndexes: [],
|
||||
duplicateGroups: 0,
|
||||
lastCheckedAt: new Date().toISOString()
|
||||
};
|
||||
const schemaHealthy = ingestionSchema?.ok ?? false;
|
||||
|
||||
if (!workflowBackend.ok) {
|
||||
if (!workflowBackend.ok || !schemaHealthy) {
|
||||
return Response.json({
|
||||
status: 'degraded',
|
||||
version: '4.0.0',
|
||||
timestamp: new Date().toISOString(),
|
||||
queue,
|
||||
database: {
|
||||
ingestionSchema: ingestionSchemaPayload
|
||||
},
|
||||
workflow: {
|
||||
ok: false,
|
||||
reason: workflowBackend.reason
|
||||
ok: workflowBackend.ok,
|
||||
...(workflowBackend.ok ? {} : { reason: workflowBackend.reason })
|
||||
}
|
||||
}, { status: 503 });
|
||||
}
|
||||
@@ -410,6 +431,9 @@ export const app = new Elysia({ prefix: '/api' })
|
||||
version: '4.0.0',
|
||||
timestamp: new Date().toISOString(),
|
||||
queue,
|
||||
database: {
|
||||
ingestionSchema: ingestionSchemaPayload
|
||||
},
|
||||
workflow: {
|
||||
ok: true
|
||||
}
|
||||
@@ -1366,12 +1390,13 @@ export const app = new Elysia({ prefix: '/api' })
|
||||
return jsonError('ticker is required');
|
||||
}
|
||||
|
||||
const [filings, holding, watchlistItem, liveQuote, priceHistory, journalPreview, memo, secProfile] = await Promise.all([
|
||||
const [filings, holding, watchlistItem, liveQuote, priceHistory, benchmarkHistory, journalPreview, memo, secProfile] = await Promise.all([
|
||||
listFilingsRecords({ ticker, limit: 40 }),
|
||||
getHoldingByTicker(session.user.id, ticker),
|
||||
getWatchlistItemByTicker(session.user.id, ticker),
|
||||
getQuote(ticker),
|
||||
getPriceHistory(ticker),
|
||||
getPriceHistory('^GSPC'),
|
||||
listResearchJournalEntries(session.user.id, ticker, 6),
|
||||
getResearchMemoByTicker(session.user.id, ticker),
|
||||
getSecCompanyProfile(ticker)
|
||||
@@ -1478,6 +1503,7 @@ export const app = new Elysia({ prefix: '/api' })
|
||||
quote: liveQuote,
|
||||
position: holding,
|
||||
priceHistory,
|
||||
benchmarkHistory,
|
||||
financials,
|
||||
filings: redactedFilings.slice(0, 20),
|
||||
aiReports,
|
||||
|
||||
Reference in New Issue
Block a user