diff --git a/Memory.md b/Memory.md index 2c848d9..5eac779 100644 --- a/Memory.md +++ b/Memory.md @@ -79,6 +79,12 @@ - 重构 `` 并将其提升至 Dashboard 首页,实现总资产大盘的全局一键实盘刷新。 ## 修复记录 + +## 修复 Drizzle ORM 的逻辑或语法错误,将错误的链式 .or() 改写为更具扩展性的 inArray() 语法 +- 修复 `app/api/cron/fetch-prices/route.ts` 中 `.where(eq(assets.type, 'STOCK').or(eq(assets.type, 'CRYPTO')))` 的非法链式调用语法。 +- 废弃错误的 `.where(eq(...).or(eq(...)))` 模式,改为使用 `inArray(assets.type, ['STOCK', 'CRYPTO'])`。 +- `inArray` 已从 `drizzle-orm` 引入,同时保留了 `eq` 的导入以兼容其他查询。 +- `inArray` 写法在语义等價且更具扩展性,未来添加新资产类型(如 FUND, BOND)只需在数组中追加枚举值即可。 - 解决了日期选择控件的时区偏移 Bug,确保全球通用:在 `src/libs/utils.ts` 中重写 `formatDateForDatetimeLocal()` 与 `parseDateTimeLocalToUTC_v2()` 函数,采用 `Intl.DateTimeFormat` 动态获取 `Asia/Shanghai` 时区偏移量,确保 UTC 时间到本地时间的双向转换精确无误,修复了用户选 10 点展示为 2 点的问题。修正了前端数据格式化逻辑,在 `src/lib/formatters.ts` 中增加空值/NaN 兜底处理,在 `src/app/dashboard/page.tsx` 中将平均成本与摊薄成本的显示条件从 `.gt(0)` 改为 `.ne(0)`,支持英特尔负成本等极端场景下的精确数字展示。 ## 资产分布图表按市场维度升级 (Task 32) diff --git a/app/api/cron/fetch-prices/route.ts b/app/api/cron/fetch-prices/route.ts index 90b8280..e0a7d9a 100644 --- a/app/api/cron/fetch-prices/route.ts +++ b/app/api/cron/fetch-prices/route.ts @@ -1,7 +1,7 @@ import { NextResponse } from 'next/server'; import { db } from '@/db'; import { assets, assetPricesHistory } from '@/db/schema'; -import { eq } from 'drizzle-orm'; +import { eq, inArray } from 'drizzle-orm'; import { ProxyAgent, setGlobalDispatcher } from 'undici'; export const dynamic = 'force-dynamic'; @@ -92,7 +92,7 @@ export async function GET(req: Request) { const allAssets = await db .select() .from(assets) - .where(eq(assets.type, 'STOCK').or(eq(assets.type, 'CRYPTO'))); + .where(inArray(assets.type, ['STOCK', 'CRYPTO'])); if (allAssets.length === 0) { return NextResponse.json({