@downcity/services 0.1.63 → 0.1.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/balance/amount.d.ts +3 -2
- package/bin/balance/amount.d.ts.map +1 -1
- package/bin/balance/amount.js +3 -2
- package/bin/balance/amount.js.map +1 -1
- package/bin/balance/index.d.ts +1 -1
- package/bin/balance/index.d.ts.map +1 -1
- package/bin/balance/index.js.map +1 -1
- package/bin/balance/routes.d.ts.map +1 -1
- package/bin/balance/routes.js +2 -3
- package/bin/balance/routes.js.map +1 -1
- package/bin/balance/schema.d.ts +10 -10
- package/bin/balance/schema.js +5 -5
- package/bin/balance/schema.js.map +1 -1
- package/bin/balance/service.d.ts +10 -10
- package/bin/balance/service.d.ts.map +1 -1
- package/bin/balance/service.js +31 -37
- package/bin/balance/service.js.map +1 -1
- package/bin/balance/types.d.ts +56 -34
- package/bin/balance/types.d.ts.map +1 -1
- package/bin/balance/types.js +3 -3
- package/bin/balance/utils.d.ts +5 -1
- package/bin/balance/utils.d.ts.map +1 -1
- package/bin/balance/utils.js +32 -17
- package/bin/balance/utils.js.map +1 -1
- package/bin/billing/index.d.ts +1 -1
- package/bin/billing/index.d.ts.map +1 -1
- package/bin/billing/service.d.ts +9 -1
- package/bin/billing/service.d.ts.map +1 -1
- package/bin/billing/service.js +39 -4
- package/bin/billing/service.js.map +1 -1
- package/bin/billing/types.d.ts +21 -0
- package/bin/billing/types.d.ts.map +1 -1
- package/bin/index.d.ts +2 -2
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js.map +1 -1
- package/bin/payment/types.d.ts +1 -3
- package/bin/payment/types.d.ts.map +1 -1
- package/bin/payment-creem/creem.d.ts.map +1 -1
- package/bin/payment-creem/creem.js +1 -2
- package/bin/payment-creem/creem.js.map +1 -1
- package/bin/payment-dodo/dodo.d.ts.map +1 -1
- package/bin/payment-dodo/dodo.js +1 -2
- package/bin/payment-dodo/dodo.js.map +1 -1
- package/bin/payment-stripe/stripe.js +1 -1
- package/bin/payment-stripe/stripe.js.map +1 -1
- package/bin/payment-waffo/waffo.d.ts.map +1 -1
- package/bin/payment-waffo/waffo.js +1 -2
- package/bin/payment-waffo/waffo.js.map +1 -1
- package/package.json +2 -2
package/bin/balance/amount.d.ts
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 关键说明(中文)
|
|
5
5
|
* - 金额输入与 `amount` 展示字段使用 credits
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
6
|
+
* - 内部账务与管理端余额字段 `balance` / `balance_after` 使用 microcredits
|
|
7
|
+
* - 用户侧 `/v1/balance/me` 使用 credits 作为主字段,并补充 microcredits
|
|
8
|
+
* - 存储与扣款统一使用 microcredits
|
|
8
9
|
* - 所有转换集中在这里,避免各模块重复处理精度
|
|
9
10
|
*/
|
|
10
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amount.d.ts","sourceRoot":"","sources":["../../src/balance/amount.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"amount.d.ts","sourceRoot":"","sources":["../../src/balance/amount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAWpF;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAW/F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM3E;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMtF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,EAAE,KAAK,SAAW,GAAG,MAAM,CAK3B;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,EAAE,KAAK,SAAW,GAAG,MAAM,CAK3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpD"}
|
package/bin/balance/amount.js
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 关键说明(中文)
|
|
5
5
|
* - 金额输入与 `amount` 展示字段使用 credits
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
6
|
+
* - 内部账务与管理端余额字段 `balance` / `balance_after` 使用 microcredits
|
|
7
|
+
* - 用户侧 `/v1/balance/me` 使用 credits 作为主字段,并补充 microcredits
|
|
8
|
+
* - 存储与扣款统一使用 microcredits
|
|
8
9
|
* - 所有转换集中在这里,避免各模块重复处理精度
|
|
9
10
|
*/
|
|
10
11
|
import { CREDIT_DECIMAL_PLACES, MICROCREDITS_PER_CREDIT, } from "../types/Amount.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amount.js","sourceRoot":"","sources":["../../src/balance/amount.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"amount.js","sourceRoot":"","sources":["../../src/balance/amount.ts"],"names":[],"mappings":"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"}
|
package/bin/balance/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { BalanceService, balanceService } from "./service.js";
|
|
5
5
|
export { balanceAccounts, balanceLedger, balanceRedeemCodes, balanceTopups, } from "./schema.js";
|
|
6
|
-
export type { BalanceAccount, BalanceCreateRedeemCodeInput, BalanceExtra, BalanceHistoryQuery, BalanceLedgerEntry, BalanceLedgerKind, BalanceServiceOptions, BalanceRedeemCode, BalanceRedeemCodeIssueResult, BalanceRedeemCodeQuery, BalanceRedeemCodeRedeemResult, BalanceRedeemCodeStatus, BalanceTopup, BalanceTopupQuery, BalanceTopupStatus, } from "./types.js";
|
|
6
|
+
export type { BalanceAccount, BalanceCreditsConversion, BalanceCreateRedeemCodeInput, BalanceExtra, BalanceHistoryQuery, BalanceLedgerEntry, BalanceLedgerKind, BalanceServiceOptions, BalanceRedeemCode, BalanceRedeemCodeIssueResult, BalanceRedeemCodeQuery, BalanceRedeemCodeRedeemResult, BalanceRedeemCodeStatus, BalanceTopup, BalanceTopupQuery, BalanceTopupStatus, BalanceUserBalance, } from "./types.js";
|
|
7
7
|
export { CREDIT_DECIMAL_PLACES, MICROCREDITS_PER_CREDIT, } from "../types/Amount.js";
|
|
8
8
|
export type { Credits, Microcredits, } from "../types/Amount.js";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,4BAA4B,EAC5B,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,OAAO,EACP,YAAY,GACb,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,4BAA4B,EAC5B,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,OAAO,EACP,YAAY,GACb,MAAM,oBAAoB,CAAC"}
|
package/bin/balance/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,aAAa,CAAC;AAsBrB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/balance/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/balance/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAmEnD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAoK/F"}
|
package/bin/balance/routes.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - 这里只负责把公开 action 映射到 HTTP 路由
|
|
6
6
|
* - 余额读写、充值单和兑换码状态变更仍然收敛在 BalanceService 内部
|
|
7
7
|
*/
|
|
8
|
-
import { normalizeUserId, readRequired } from "./utils.js";
|
|
8
|
+
import { normalizeUserId, readRequired, toBalanceUserView } from "./utils.js";
|
|
9
9
|
/**
|
|
10
10
|
* 注册 Balance 服务的 HTTP 路由。
|
|
11
11
|
*/
|
|
@@ -14,7 +14,7 @@ export function registerBalanceRoutes(service, ctx) {
|
|
|
14
14
|
method: "GET",
|
|
15
15
|
path: "/me",
|
|
16
16
|
auth: ["user"],
|
|
17
|
-
handler: async (c) => c.jsonResponse(await service.read(readUserId(c))),
|
|
17
|
+
handler: async (c) => c.jsonResponse(toBalanceUserView(await service.read(readUserId(c)))),
|
|
18
18
|
});
|
|
19
19
|
ctx.route({
|
|
20
20
|
method: "GET",
|
|
@@ -140,7 +140,6 @@ export function registerBalanceRoutes(service, ctx) {
|
|
|
140
140
|
const body = await c.json();
|
|
141
141
|
return c.jsonResponse(await service.createRedeemCode({
|
|
142
142
|
amount: Number(body.amount),
|
|
143
|
-
amount_microcredits: body.amount_microcredits,
|
|
144
143
|
code: body.code,
|
|
145
144
|
note: body.note,
|
|
146
145
|
ref: body.ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/balance/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/balance/routes.ts"],"names":[],"mappings":"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"}
|
package/bin/balance/schema.d.ts
CHANGED
|
@@ -35,8 +35,8 @@ export declare const balanceAccounts: import("drizzle-orm/sqlite-core").SQLiteTa
|
|
|
35
35
|
}, {}, {
|
|
36
36
|
length: number | undefined;
|
|
37
37
|
}>;
|
|
38
|
-
|
|
39
|
-
name: "
|
|
38
|
+
balance: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
39
|
+
name: "balance";
|
|
40
40
|
tableName: "service_balance_accounts";
|
|
41
41
|
dataType: "number";
|
|
42
42
|
columnType: "SQLiteInteger";
|
|
@@ -157,8 +157,8 @@ export declare const balanceLedger: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
157
157
|
}, {}, {
|
|
158
158
|
length: number | undefined;
|
|
159
159
|
}>;
|
|
160
|
-
|
|
161
|
-
name: "
|
|
160
|
+
amount: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
161
|
+
name: "amount";
|
|
162
162
|
tableName: "service_balance_ledger";
|
|
163
163
|
dataType: "number";
|
|
164
164
|
columnType: "SQLiteInteger";
|
|
@@ -174,8 +174,8 @@ export declare const balanceLedger: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
174
174
|
identity: undefined;
|
|
175
175
|
generated: undefined;
|
|
176
176
|
}, {}, {}>;
|
|
177
|
-
|
|
178
|
-
name: "
|
|
177
|
+
balance_after: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
178
|
+
name: "balance_after";
|
|
179
179
|
tableName: "service_balance_ledger";
|
|
180
180
|
dataType: "number";
|
|
181
181
|
columnType: "SQLiteInteger";
|
|
@@ -315,8 +315,8 @@ export declare const balanceTopups: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
315
315
|
}, {}, {
|
|
316
316
|
length: number | undefined;
|
|
317
317
|
}>;
|
|
318
|
-
|
|
319
|
-
name: "
|
|
318
|
+
amount: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
319
|
+
name: "amount";
|
|
320
320
|
tableName: "service_balance_topups";
|
|
321
321
|
dataType: "number";
|
|
322
322
|
columnType: "SQLiteInteger";
|
|
@@ -513,8 +513,8 @@ export declare const balanceRedeemCodes: import("drizzle-orm/sqlite-core").SQLit
|
|
|
513
513
|
}, {}, {
|
|
514
514
|
length: number | undefined;
|
|
515
515
|
}>;
|
|
516
|
-
|
|
517
|
-
name: "
|
|
516
|
+
amount: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
517
|
+
name: "amount";
|
|
518
518
|
tableName: "service_balance_redeem_codes";
|
|
519
519
|
dataType: "number";
|
|
520
520
|
columnType: "SQLiteInteger";
|
package/bin/balance/schema.js
CHANGED
|
@@ -21,7 +21,7 @@ export const balanceAccounts = sqliteTable(ACCOUNT_TABLE, {
|
|
|
21
21
|
/**
|
|
22
22
|
* 当前余额,单位为 microcredits。
|
|
23
23
|
*/
|
|
24
|
-
|
|
24
|
+
balance: integer("balance").notNull(),
|
|
25
25
|
/**
|
|
26
26
|
* 创建时间。
|
|
27
27
|
*/
|
|
@@ -50,11 +50,11 @@ export const balanceLedger = sqliteTable(LEDGER_TABLE, {
|
|
|
50
50
|
/**
|
|
51
51
|
* 本次金额变动,单位为 microcredits。
|
|
52
52
|
*/
|
|
53
|
-
|
|
53
|
+
amount: integer("amount").notNull(),
|
|
54
54
|
/**
|
|
55
55
|
* 变动后的余额,单位为 microcredits。
|
|
56
56
|
*/
|
|
57
|
-
|
|
57
|
+
balance_after: integer("balance_after").notNull(),
|
|
58
58
|
/**
|
|
59
59
|
* 可读说明。
|
|
60
60
|
*/
|
|
@@ -87,7 +87,7 @@ export const balanceTopups = sqliteTable(TOPUP_TABLE, {
|
|
|
87
87
|
/**
|
|
88
88
|
* 充值金额,单位为 microcredits。
|
|
89
89
|
*/
|
|
90
|
-
|
|
90
|
+
amount: integer("amount").notNull(),
|
|
91
91
|
/**
|
|
92
92
|
* 充值单状态。
|
|
93
93
|
*/
|
|
@@ -132,7 +132,7 @@ export const balanceRedeemCodes = sqliteTable(REDEEM_CODE_TABLE, {
|
|
|
132
132
|
/**
|
|
133
133
|
* 充值金额,单位为 microcredits。
|
|
134
134
|
*/
|
|
135
|
-
|
|
135
|
+
amount: integer("amount").notNull(),
|
|
136
136
|
/**
|
|
137
137
|
* redeem_code 状态。
|
|
138
138
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/balance/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,CAAC,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,wBAAwB,CAAC;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,8BAA8B,CAAC;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,EAAE;IACxD;;OAEG;IACH,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE;IAErC;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/balance/schema.ts"],"names":[],"mappings":"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"}
|
package/bin/balance/service.d.ts
CHANGED
|
@@ -41,8 +41,8 @@ export declare class BalanceService extends InstallableService {
|
|
|
41
41
|
}, {}, {
|
|
42
42
|
length: number | undefined;
|
|
43
43
|
}>;
|
|
44
|
-
|
|
45
|
-
name: "
|
|
44
|
+
balance: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
45
|
+
name: "balance";
|
|
46
46
|
tableName: "service_balance_accounts";
|
|
47
47
|
dataType: "number";
|
|
48
48
|
columnType: "SQLiteInteger";
|
|
@@ -160,8 +160,8 @@ export declare class BalanceService extends InstallableService {
|
|
|
160
160
|
}, {}, {
|
|
161
161
|
length: number | undefined;
|
|
162
162
|
}>;
|
|
163
|
-
|
|
164
|
-
name: "
|
|
163
|
+
amount: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
164
|
+
name: "amount";
|
|
165
165
|
tableName: "service_balance_ledger";
|
|
166
166
|
dataType: "number";
|
|
167
167
|
columnType: "SQLiteInteger";
|
|
@@ -177,8 +177,8 @@ export declare class BalanceService extends InstallableService {
|
|
|
177
177
|
identity: undefined;
|
|
178
178
|
generated: undefined;
|
|
179
179
|
}, {}, {}>;
|
|
180
|
-
|
|
181
|
-
name: "
|
|
180
|
+
balance_after: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
181
|
+
name: "balance_after";
|
|
182
182
|
tableName: "service_balance_ledger";
|
|
183
183
|
dataType: "number";
|
|
184
184
|
columnType: "SQLiteInteger";
|
|
@@ -315,8 +315,8 @@ export declare class BalanceService extends InstallableService {
|
|
|
315
315
|
}, {}, {
|
|
316
316
|
length: number | undefined;
|
|
317
317
|
}>;
|
|
318
|
-
|
|
319
|
-
name: "
|
|
318
|
+
amount: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
319
|
+
name: "amount";
|
|
320
320
|
tableName: "service_balance_topups";
|
|
321
321
|
dataType: "number";
|
|
322
322
|
columnType: "SQLiteInteger";
|
|
@@ -510,8 +510,8 @@ export declare class BalanceService extends InstallableService {
|
|
|
510
510
|
}, {}, {
|
|
511
511
|
length: number | undefined;
|
|
512
512
|
}>;
|
|
513
|
-
|
|
514
|
-
name: "
|
|
513
|
+
amount: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
514
|
+
name: "amount";
|
|
515
515
|
tableName: "service_balance_redeem_codes";
|
|
516
516
|
dataType: "number";
|
|
517
517
|
columnType: "SQLiteInteger";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/balance/service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/balance/service.ts"],"names":[],"mappings":"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"}
|
package/bin/balance/service.js
CHANGED
|
@@ -11,7 +11,7 @@ import { rawAll, rawFirst, rawRun } from "./raw.js";
|
|
|
11
11
|
import { registerBalanceRoutes } from "./routes.js";
|
|
12
12
|
import { ACCOUNT_TABLE, LEDGER_TABLE, REDEEM_CODE_TABLE, TOPUP_TABLE, balanceAccounts, balanceLedger, balanceRedeemCodes, balanceTopups, } from "./schema.js";
|
|
13
13
|
import { generateRedeemCode, hashRedeemCode, maskRedeemCode, mergeMetaJSON, normalizeLimit, normalizeRedeemCode, normalizeRedeemCodeStatus, normalizeText, normalizeUserId, parseAccountRow, parseLedgerRow, parseMetaJSON, parseRedeemCodeRow, parseTopupRow, randomId, readRequired, stringifyMeta, } from "./utils.js";
|
|
14
|
-
import {
|
|
14
|
+
import { microcreditsToUsdCents, readAmountMicrocredits, readNonNegativeAmountMicrocredits, } from "./amount.js";
|
|
15
15
|
/**
|
|
16
16
|
* Balance 服务实例。
|
|
17
17
|
*
|
|
@@ -36,8 +36,8 @@ export class BalanceService extends InstallableService {
|
|
|
36
36
|
}, "init");
|
|
37
37
|
this.instruction = [
|
|
38
38
|
"提供用户级全局余额、余额流水、充值单与 redeem_code 能力。",
|
|
39
|
-
"`balance`
|
|
40
|
-
|
|
39
|
+
"内部账务与管理端的 `balance` / `amount` / `balance_after` 字段均使用 microcredits 整数;用户侧 `/me` 返回 credits 主字段并附带 microcredits。",
|
|
40
|
+
`首次自动开户发放 ${this.initMicrocredits} microcredits。`,
|
|
41
41
|
"推荐在业务 hook 中调用 require/add/sub,把具体计费策略放在业务侧,而不是写死在服务内部。",
|
|
42
42
|
"管理端可查询所有账户、流水、充值单与 redeem_code;用户侧可查询自己的余额、历史记录、充值单,并直接兑换 redeem_code。",
|
|
43
43
|
].join("\n");
|
|
@@ -70,8 +70,8 @@ export class BalanceService extends InstallableService {
|
|
|
70
70
|
const normalizedUserId = normalizeUserId(user_id);
|
|
71
71
|
const normalizedAmount = readAmountMicrocredits({ amount_microcredits });
|
|
72
72
|
const account = await this.read(normalizedUserId);
|
|
73
|
-
if (account.
|
|
74
|
-
throw httpError(402, `insufficient balance: need ${normalizedAmount} microcredits, current ${account.
|
|
73
|
+
if (account.balance < normalizedAmount) {
|
|
74
|
+
throw httpError(402, `insufficient balance: need ${normalizedAmount} microcredits, current ${account.balance} microcredits`);
|
|
75
75
|
}
|
|
76
76
|
return account;
|
|
77
77
|
}
|
|
@@ -130,8 +130,7 @@ export class BalanceService extends InstallableService {
|
|
|
130
130
|
const topup = {
|
|
131
131
|
topup_id: `topup_${randomId()}`,
|
|
132
132
|
user_id: normalizedUserId,
|
|
133
|
-
amount:
|
|
134
|
-
amount_microcredits: normalizedAmount,
|
|
133
|
+
amount: normalizedAmount,
|
|
135
134
|
amount_usd_cents: microcreditsToUsdCents(normalizedAmount),
|
|
136
135
|
status: "pending",
|
|
137
136
|
note: normalizeText(extra.note),
|
|
@@ -142,12 +141,12 @@ export class BalanceService extends InstallableService {
|
|
|
142
141
|
};
|
|
143
142
|
await this.ensureAccount(normalizedUserId);
|
|
144
143
|
await rawRun(this.resolveRaw(), [
|
|
145
|
-
`INSERT INTO ${TOPUP_TABLE} (topup_id, user_id,
|
|
144
|
+
`INSERT INTO ${TOPUP_TABLE} (topup_id, user_id, amount, status, note, ref, metadata_json, created_at, updated_at)`,
|
|
146
145
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
|
147
146
|
].join(" "), [
|
|
148
147
|
topup.topup_id,
|
|
149
148
|
topup.user_id,
|
|
150
|
-
topup.
|
|
149
|
+
topup.amount,
|
|
151
150
|
topup.status,
|
|
152
151
|
topup.note,
|
|
153
152
|
topup.ref,
|
|
@@ -182,7 +181,7 @@ export class BalanceService extends InstallableService {
|
|
|
182
181
|
if (changed === 0) {
|
|
183
182
|
throw httpError(409, "topup is no longer pending");
|
|
184
183
|
}
|
|
185
|
-
await this.applyDelta(current.user_id, current.
|
|
184
|
+
await this.applyDelta(current.user_id, current.amount, "topup", {
|
|
186
185
|
note: normalizeText(extra.note) || current.note || "topup",
|
|
187
186
|
ref: normalizeText(extra.ref) || topup_id,
|
|
188
187
|
meta: {
|
|
@@ -232,8 +231,7 @@ export class BalanceService extends InstallableService {
|
|
|
232
231
|
}
|
|
233
232
|
const redeemCode = {
|
|
234
233
|
redeem_code_id: `rc_${randomId()}`,
|
|
235
|
-
amount
|
|
236
|
-
amount_microcredits: amount,
|
|
234
|
+
amount,
|
|
237
235
|
status: "active",
|
|
238
236
|
code_mask: maskRedeemCode(code),
|
|
239
237
|
note: normalizeText(input.note),
|
|
@@ -245,13 +243,13 @@ export class BalanceService extends InstallableService {
|
|
|
245
243
|
updated_at: now,
|
|
246
244
|
};
|
|
247
245
|
await rawRun(this.resolveRaw(), [
|
|
248
|
-
`INSERT INTO ${REDEEM_CODE_TABLE} (redeem_code_id, code_hash, code_mask,
|
|
246
|
+
`INSERT INTO ${REDEEM_CODE_TABLE} (redeem_code_id, code_hash, code_mask, amount, status, note, ref, metadata_json, redeemed_by_user_id, redeemed_at, created_at, updated_at)`,
|
|
249
247
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
|
250
248
|
].join(" "), [
|
|
251
249
|
redeemCode.redeem_code_id,
|
|
252
250
|
codeHash,
|
|
253
251
|
redeemCode.code_mask,
|
|
254
|
-
redeemCode.
|
|
252
|
+
redeemCode.amount,
|
|
255
253
|
redeemCode.status,
|
|
256
254
|
redeemCode.note,
|
|
257
255
|
redeemCode.ref,
|
|
@@ -300,7 +298,7 @@ export class BalanceService extends InstallableService {
|
|
|
300
298
|
const latest = await this.readRedeemCodeRequired(current.redeem_code_id);
|
|
301
299
|
throw httpError(409, `redeem_code is already ${latest.status}`);
|
|
302
300
|
}
|
|
303
|
-
const account = await this.applyDelta(normalizedUserId, current.
|
|
301
|
+
const account = await this.applyDelta(normalizedUserId, current.amount, "redeem", {
|
|
304
302
|
note: normalizeText(extra.note) || current.note || "redeem_code",
|
|
305
303
|
ref: normalizeText(extra.ref) || current.redeem_code_id,
|
|
306
304
|
meta: {
|
|
@@ -346,7 +344,7 @@ export class BalanceService extends InstallableService {
|
|
|
346
344
|
*/
|
|
347
345
|
async listUsers(limit) {
|
|
348
346
|
const rows = await rawAll(this.resolveRaw(), [
|
|
349
|
-
`SELECT user_id,
|
|
347
|
+
`SELECT user_id, balance, created_at, updated_at FROM ${ACCOUNT_TABLE}`,
|
|
350
348
|
"ORDER BY updated_at DESC",
|
|
351
349
|
"LIMIT ?",
|
|
352
350
|
].join(" "), [normalizeLimit(limit)]);
|
|
@@ -364,7 +362,7 @@ export class BalanceService extends InstallableService {
|
|
|
364
362
|
})()
|
|
365
363
|
: "";
|
|
366
364
|
const rows = await rawAll(this.resolveRaw(), [
|
|
367
|
-
`SELECT entry_id, user_id, kind,
|
|
365
|
+
`SELECT entry_id, user_id, kind, amount, balance_after, note, ref, metadata_json, created_at FROM ${LEDGER_TABLE}`,
|
|
368
366
|
where,
|
|
369
367
|
"ORDER BY created_at DESC, rowid DESC",
|
|
370
368
|
"LIMIT ?",
|
|
@@ -383,7 +381,7 @@ export class BalanceService extends InstallableService {
|
|
|
383
381
|
})()
|
|
384
382
|
: "";
|
|
385
383
|
const rows = await rawAll(this.resolveRaw(), [
|
|
386
|
-
`SELECT topup_id, user_id,
|
|
384
|
+
`SELECT topup_id, user_id, amount, status, note, ref, metadata_json, created_at, updated_at FROM ${TOPUP_TABLE}`,
|
|
387
385
|
where,
|
|
388
386
|
"ORDER BY created_at DESC",
|
|
389
387
|
"LIMIT ?",
|
|
@@ -407,7 +405,7 @@ export class BalanceService extends InstallableService {
|
|
|
407
405
|
}
|
|
408
406
|
const where = clauses.length > 0 ? `WHERE ${clauses.join(" AND ")}` : "";
|
|
409
407
|
const rows = await rawAll(this.resolveRaw(), [
|
|
410
|
-
`SELECT redeem_code_id,
|
|
408
|
+
`SELECT redeem_code_id, amount, status, code_mask, note, ref, metadata_json, redeemed_by_user_id, redeemed_at, created_at, updated_at FROM ${REDEEM_CODE_TABLE}`,
|
|
411
409
|
where,
|
|
412
410
|
"ORDER BY created_at DESC",
|
|
413
411
|
"LIMIT ?",
|
|
@@ -429,7 +427,7 @@ export class BalanceService extends InstallableService {
|
|
|
429
427
|
if (delta > 0) {
|
|
430
428
|
await rawRun(this.resolveRaw(), [
|
|
431
429
|
`UPDATE ${ACCOUNT_TABLE}`,
|
|
432
|
-
"SET
|
|
430
|
+
"SET balance = balance + ?, updated_at = ?",
|
|
433
431
|
"WHERE user_id = ?",
|
|
434
432
|
].join(" "), [delta, now, user_id]);
|
|
435
433
|
}
|
|
@@ -437,12 +435,12 @@ export class BalanceService extends InstallableService {
|
|
|
437
435
|
const spend = Math.abs(delta);
|
|
438
436
|
const changed = await rawRun(this.resolveRaw(), [
|
|
439
437
|
`UPDATE ${ACCOUNT_TABLE}`,
|
|
440
|
-
"SET
|
|
441
|
-
"WHERE user_id = ? AND
|
|
438
|
+
"SET balance = balance - ?, updated_at = ?",
|
|
439
|
+
"WHERE user_id = ? AND balance >= ?",
|
|
442
440
|
].join(" "), [spend, now, user_id, spend]);
|
|
443
441
|
if (changed === 0) {
|
|
444
442
|
const current = await this.readAccountRequired(user_id);
|
|
445
|
-
throw httpError(402, `insufficient balance: need ${spend} microcredits, current ${current.
|
|
443
|
+
throw httpError(402, `insufficient balance: need ${spend} microcredits, current ${current.balance} microcredits`);
|
|
446
444
|
}
|
|
447
445
|
}
|
|
448
446
|
const account = await this.readAccountRequired(user_id);
|
|
@@ -450,10 +448,8 @@ export class BalanceService extends InstallableService {
|
|
|
450
448
|
entry_id: `bal_${randomId()}`,
|
|
451
449
|
user_id,
|
|
452
450
|
kind,
|
|
453
|
-
amount:
|
|
454
|
-
amount_microcredits: delta,
|
|
451
|
+
amount: delta,
|
|
455
452
|
balance_after: account.balance,
|
|
456
|
-
balance_after_microcredits: account.balance_microcredits,
|
|
457
453
|
note: normalizeText(extra.note),
|
|
458
454
|
ref: normalizeText(extra.ref),
|
|
459
455
|
metadata_json: stringifyMeta(extra.meta),
|
|
@@ -467,7 +463,7 @@ export class BalanceService extends InstallableService {
|
|
|
467
463
|
async ensureAccount(user_id) {
|
|
468
464
|
const now = new Date().toISOString();
|
|
469
465
|
const inserted = await rawRun(this.resolveRaw(), [
|
|
470
|
-
`INSERT OR IGNORE INTO ${ACCOUNT_TABLE} (user_id,
|
|
466
|
+
`INSERT OR IGNORE INTO ${ACCOUNT_TABLE} (user_id, balance, created_at, updated_at)`,
|
|
471
467
|
"VALUES (?, ?, ?, ?)",
|
|
472
468
|
].join(" "), [user_id, this.initMicrocredits, now, now]);
|
|
473
469
|
if (inserted > 0 && this.initMicrocredits > 0) {
|
|
@@ -475,10 +471,8 @@ export class BalanceService extends InstallableService {
|
|
|
475
471
|
entry_id: `bal_${randomId()}`,
|
|
476
472
|
user_id,
|
|
477
473
|
kind: "init",
|
|
478
|
-
amount:
|
|
479
|
-
amount_microcredits: this.initMicrocredits,
|
|
474
|
+
amount: this.initMicrocredits,
|
|
480
475
|
balance_after: this.initMicrocredits,
|
|
481
|
-
balance_after_microcredits: this.initMicrocredits,
|
|
482
476
|
note: "initial balance",
|
|
483
477
|
ref: "",
|
|
484
478
|
metadata_json: "{}",
|
|
@@ -491,7 +485,7 @@ export class BalanceService extends InstallableService {
|
|
|
491
485
|
*/
|
|
492
486
|
async readAccountRequired(user_id) {
|
|
493
487
|
const row = await rawFirst(this.resolveRaw(), [
|
|
494
|
-
`SELECT user_id,
|
|
488
|
+
`SELECT user_id, balance, created_at, updated_at FROM ${ACCOUNT_TABLE}`,
|
|
495
489
|
"WHERE user_id = ?",
|
|
496
490
|
].join(" "), [user_id]);
|
|
497
491
|
if (!row) {
|
|
@@ -504,7 +498,7 @@ export class BalanceService extends InstallableService {
|
|
|
504
498
|
*/
|
|
505
499
|
async readTopupRequired(topup_id) {
|
|
506
500
|
const row = await rawFirst(this.resolveRaw(), [
|
|
507
|
-
`SELECT topup_id, user_id,
|
|
501
|
+
`SELECT topup_id, user_id, amount, status, note, ref, metadata_json, created_at, updated_at FROM ${TOPUP_TABLE}`,
|
|
508
502
|
"WHERE topup_id = ?",
|
|
509
503
|
].join(" "), [readRequired(topup_id, "topup_id")]);
|
|
510
504
|
if (!row) {
|
|
@@ -517,7 +511,7 @@ export class BalanceService extends InstallableService {
|
|
|
517
511
|
*/
|
|
518
512
|
async readRedeemCodeRequired(redeem_code_id) {
|
|
519
513
|
const row = await rawFirst(this.resolveRaw(), [
|
|
520
|
-
`SELECT redeem_code_id,
|
|
514
|
+
`SELECT redeem_code_id, amount, status, code_mask, note, ref, metadata_json, redeemed_by_user_id, redeemed_at, created_at, updated_at FROM ${REDEEM_CODE_TABLE}`,
|
|
521
515
|
"WHERE redeem_code_id = ?",
|
|
522
516
|
].join(" "), [readRequired(redeem_code_id, "redeem_code_id")]);
|
|
523
517
|
if (!row) {
|
|
@@ -530,7 +524,7 @@ export class BalanceService extends InstallableService {
|
|
|
530
524
|
*/
|
|
531
525
|
async readRedeemCodeByHash(codeHash) {
|
|
532
526
|
const row = await rawFirst(this.resolveRaw(), [
|
|
533
|
-
`SELECT redeem_code_id, code_hash,
|
|
527
|
+
`SELECT redeem_code_id, code_hash, amount, status, code_mask, note, ref, metadata_json, redeemed_by_user_id, redeemed_at, created_at, updated_at FROM ${REDEEM_CODE_TABLE}`,
|
|
534
528
|
"WHERE code_hash = ?",
|
|
535
529
|
].join(" "), [readRequired(codeHash, "code_hash")]);
|
|
536
530
|
return row
|
|
@@ -545,14 +539,14 @@ export class BalanceService extends InstallableService {
|
|
|
545
539
|
*/
|
|
546
540
|
async insertLedger(entry) {
|
|
547
541
|
await rawRun(this.resolveRaw(), [
|
|
548
|
-
`INSERT INTO ${LEDGER_TABLE} (entry_id, user_id, kind,
|
|
542
|
+
`INSERT INTO ${LEDGER_TABLE} (entry_id, user_id, kind, amount, balance_after, note, ref, metadata_json, created_at)`,
|
|
549
543
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
|
550
544
|
].join(" "), [
|
|
551
545
|
entry.entry_id,
|
|
552
546
|
entry.user_id,
|
|
553
547
|
entry.kind,
|
|
554
|
-
entry.
|
|
555
|
-
entry.
|
|
548
|
+
entry.amount,
|
|
549
|
+
entry.balance_after,
|
|
556
550
|
entry.note,
|
|
557
551
|
entry.ref,
|
|
558
552
|
entry.metadata_json,
|