apps/server/docs/ai-context/data-model-and-state.md
这套服务端最关键的状态归属如下:
Postgres
Redis
flux-meter.md)如果要判断”改哪个地方才算真的改成功”,大多数场景答案都是 Postgres。Redis Streams 已全部移除,没有”计费事件队列”这层抽象。
usersessionaccountverification来源文件:
src/schemas/accounts.ts说明:
better-auth 直接用这组表pnpm -F @proj-airi/server auth:generate 自动产物,手改会被覆盖characterscharacter_coversavatar_modelcharacter_capabilitiescharacter_i18ncharacter_promptsuser_character_likesuser_character_bookmarks来源文件:
src/schemas/characters.tssrc/schemas/user-character.ts说明:
characters 表上chatschat_membersmessagesmediastickerssticker_packs来源文件:
src/schemas/chats.ts说明:
messages.seq 是会话内顺序字段SELECT ... FOR UPDATE 锁 chat 以串行生成 seqsenderId 是宽松字段,不强制外键user_provider_configssystem_provider_configs来源文件:
src/schemas/providers.ts说明:
config 是 jsonbuser_fluxflux_transaction来源文件:
src/schemas/flux.tssrc/schemas/flux-transaction.ts职责边界:
user_flux
flux_transaction
/api/v1/flux/history 直接读这张表关键约束:
flux_transaction 对 (userId, requestId) WHERE requestId IS NOT NULL 有部分唯一索引idempotencyKey)stripe_customerstripe_checkout_sessionstripe_subscriptionstripe_invoice来源文件:
src/schemas/stripe.ts说明:
billingService 写入 user_flux + flux_transactionfluxCredited 字段用于避免重复入账llm_request_log来源文件:
src/schemas/llm-request-log.ts说明:
createFluxService()负责:
user_flux不负责:
createBillingService()负责:
user_flux → insert flux_transaction ledgerredis.set 更新 Flux 余额缓存这是所有 Flux 写路径应收敛到的中心。
createStripeService()负责:
不负责:
真正入账通过 billingService.creditFluxFromStripeCheckout() 或相关 credit 方法完成。
flux:<userId>写入来源:
fluxService.getFlux() cache miss 后回填billingService 余额事务提交后 best-effort redis.set 直接更新(API 进程内同步)config:<CONFIG_NAME>由 config-kv.ts 管理,支持:
FLUX_PACKAGES JSONchat:broadcast:<userId>billingService 在事务中:
(userId, requestId) 命中 ledger → 命中即返回,跳过余下步骤SELECT user_flux FOR UPDATEuser_flux + 写 flux_transaction ledgerredis.set这保证同一用户余额更新是串行化的,并且 ledger 行与余额变更在同一原子提交里。
主要依赖:
stripe_checkout_session.fluxCreditedstripe_invoice.fluxCreditedflux_transaction(userId, requestId) 唯一约束src/schemas/flux-grant-batch.ts 是已废弃的旧 admin batch 设计 schema,没有被 app.ts 装配也没有 migration 在用,是 dead code,改这块前直接删除。当前 admin 发 FLUX 走 /api/admin/flux-grants 同步路径,不写新表。