From 850d3ebe29931cee061180492fd78cb66282c998 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 23 Jul 2026 08:26:08 +0000 Subject: [PATCH] =?UTF-8?q?fix(economy):=20=E5=B0=86=20Economy*Row=20?= =?UTF-8?q?=E8=BF=81=E5=9B=9E=20db-server=20domain?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sdk@0990780 精简 contracts 后 db-server 仍从 @sfmc-bds/sdk/contracts 导入已删除的 EconomyAccountRow / EconomyTransactionRow,导致 ootb Build all workspaces 的 tsc --emitDeclarationOnly 失败。 按契约精简意图,业务行类型由经济域自行维护;同步修正 SDK README。 Co-authored-by: Shiroha --- db-server/src/domain/economy.ts | 44 ++++++++++++++++++++++++++++++--- modules/sdk/@sfmc-sdk/README.md | 2 +- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/db-server/src/domain/economy.ts b/db-server/src/domain/economy.ts index bcea7801..e6f4d04c 100644 --- a/db-server/src/domain/economy.ts +++ b/db-server/src/domain/economy.ts @@ -10,7 +10,6 @@ * alreadyInTx=true 时只跑 steps */ -import type { EconomyAccountRow, EconomyTransactionRow } from "@sfmc-bds/sdk/contracts"; import type { DatabaseSync } from "node:sqlite"; import type { SQLStatement } from "sql-template-strings"; import { isValidIdempotencyKey } from "../lib/idempotency.js"; @@ -34,6 +33,47 @@ function newTransactionId(now: number): string { return `E${now.toString(36)}${Math.random().toString(36).slice(2, 8)}`; } +/** + * 经济账户 DB 行(snake_case,对应 sfmc_economy_accounts)。 + * 业务域类型由本模块维护,不再依赖 sdk/contracts。 + */ +export interface EconomyAccountRow { + player_id: string; + player_name_snapshot: string; + balance: number; + version: number; + created_at: number; + updated_at: number; +} + +/** + * 经济交易流水 DB 行(snake_case,对应 sfmc_economy_transactions)。 + * 含历史 JS 侧别名字段,供调用方兼容读取。 + */ +export interface EconomyTransactionRow { + id: string; + transaction_type: string; + actor_id: string; + source_player_id?: string; + target_player_id?: string; + amount: number; + balance_before?: number; + balance_after?: number; + reference_type: string; + reference_id: string; + reason: string; + created_at: number; + idempotency_key: string; + + /** JS-side alias fields used by domain/economy.ts */ + actorId?: string; + type?: string; + referenceType?: string; + referenceId?: string; + sourcePlayerName?: string; + targetPlayerName?: string; +} + export interface EconomyAccountView { playerId: string; playerName: string; @@ -337,8 +377,6 @@ export function applyEconomyTransaction( } } -export type { EconomyAccountRow, EconomyTransactionRow }; - /** 列出日常任务(默认仅 active 且未过期) */ export function listDailyTasks( query: AnyQuery, diff --git a/modules/sdk/@sfmc-sdk/README.md b/modules/sdk/@sfmc-sdk/README.md index 58bf8a51..dd5106dc 100644 --- a/modules/sdk/@sfmc-sdk/README.md +++ b/modules/sdk/@sfmc-sdk/README.md @@ -2,7 +2,7 @@ ScriptsForMinecraftServer 平台 SDK。SAPI/Node umbrella,统一导出: -- **`@sfmc-bds/sdk/contracts`** — 跨模块共享类型契约(land / chat / coop / economy / player / world / 等) +- **`@sfmc-bds/sdk/contracts`** — 平台级共享类型(模块目录 / lock 协议);业务域类型由各模块自行维护 - **`@sfmc-bds/sdk/sapi/runtime`** — SAPI 进程内运行时:`Msg` / `Command` / `Permission` / `MenuNavigator` / `Money` / `debug` - **`@sfmc-bds/sdk/sapi/db`** — 数据库友好 API:`db.defineTable` / `db.tx` / `db.query` / `db.audit` / `db.idempotent` - **`@sfmc-bds/sdk/sapi/config`** — 模块配置:`config.get` / `config.set` / `config.onChange`