@windrun-huaiin/backend-core 27.0.0 → 28.0.0
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/dist/app/api/ai/route.d.ts +2 -0
- package/dist/app/api/ai/route.d.ts.map +1 -0
- package/dist/app/api/ai/route.js +10 -0
- package/dist/app/api/ai/route.mjs +1 -0
- package/dist/app/api/stripe/checkout/route.js +1 -1
- package/dist/app/api/stripe/checkout/route.mjs +1 -1
- package/dist/app/api/stripe/customer-portal/route.js +1 -1
- package/dist/app/api/stripe/customer-portal/route.mjs +1 -1
- package/dist/app/api/webhook/clerk/user/route.js +1 -1
- package/dist/app/api/webhook/clerk/user/route.mjs +1 -1
- package/dist/auth/auth-utils.js +1 -1
- package/dist/auth/auth-utils.mjs +1 -1
- package/dist/core-prisma/browser.d.ts +40 -0
- package/dist/core-prisma/browser.d.ts.map +1 -0
- package/dist/core-prisma/client.d.ts +57 -0
- package/dist/core-prisma/client.d.ts.map +1 -0
- package/dist/core-prisma/client.js +55 -0
- package/dist/core-prisma/client.mjs +33 -0
- package/dist/core-prisma/commonInputTypes.d.ts +495 -0
- package/dist/core-prisma/commonInputTypes.d.ts.map +1 -0
- package/dist/core-prisma/enums.d.ts +2 -0
- package/dist/core-prisma/enums.d.ts.map +1 -0
- package/dist/core-prisma/internal/class.d.ts +193 -0
- package/dist/core-prisma/internal/class.d.ts.map +1 -0
- package/dist/core-prisma/internal/class.js +108 -0
- package/dist/core-prisma/internal/class.mjs +87 -0
- package/dist/core-prisma/internal/prismaNamespace.d.ts +1180 -0
- package/dist/core-prisma/internal/prismaNamespace.d.ts.map +1 -0
- package/dist/core-prisma/internal/prismaNamespace.js +278 -0
- package/dist/core-prisma/internal/prismaNamespace.mjs +226 -0
- package/dist/core-prisma/internal/prismaNamespaceBrowser.d.ts +233 -0
- package/dist/core-prisma/internal/prismaNamespaceBrowser.d.ts.map +1 -0
- package/dist/core-prisma/models/Apilog.d.ts +1088 -0
- package/dist/core-prisma/models/Apilog.d.ts.map +1 -0
- package/dist/core-prisma/models/Credit.d.ts +1554 -0
- package/dist/core-prisma/models/Credit.d.ts.map +1 -0
- package/dist/core-prisma/models/CreditAuditLog.d.ts +1362 -0
- package/dist/core-prisma/models/CreditAuditLog.d.ts.map +1 -0
- package/dist/core-prisma/models/Subscription.d.ts +1441 -0
- package/dist/core-prisma/models/Subscription.d.ts.map +1 -0
- package/dist/core-prisma/models/Transaction.d.ts +2222 -0
- package/dist/core-prisma/models/Transaction.d.ts.map +1 -0
- package/dist/core-prisma/models/User.d.ts +1775 -0
- package/dist/core-prisma/models/User.d.ts.map +1 -0
- package/dist/core-prisma/models/UserBackup.d.ts +1228 -0
- package/dist/core-prisma/models/UserBackup.d.ts.map +1 -0
- package/dist/core-prisma/models.d.ts +9 -0
- package/dist/core-prisma/models.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.mjs +5 -2
- package/dist/lib/money-price-helper.d.ts.map +1 -1
- package/dist/lib/money-price-helper.js +1 -0
- package/dist/lib/money-price-helper.mjs +2 -1
- package/dist/lib/stripe-config.js +1 -1
- package/dist/lib/stripe-config.mjs +1 -1
- package/dist/prisma/index.d.ts +4 -1
- package/dist/prisma/index.d.ts.map +1 -1
- package/dist/prisma/index.js +6 -0
- package/dist/prisma/index.mjs +4 -1
- package/dist/prisma/prisma-transaction-util.d.ts +1 -1
- package/dist/prisma/prisma-transaction-util.d.ts.map +1 -1
- package/dist/prisma/prisma-transaction-util.js +1 -1
- package/dist/prisma/prisma-transaction-util.mjs +2 -2
- package/dist/prisma/prisma.d.ts +22 -3
- package/dist/prisma/prisma.d.ts.map +1 -1
- package/dist/prisma/prisma.js +83 -20
- package/dist/prisma/prisma.mjs +81 -21
- package/dist/services/aggregate/anonymous.aggregate.service.js +3 -2
- package/dist/services/aggregate/anonymous.aggregate.service.mjs +3 -2
- package/dist/services/aggregate/billing.aggregate.service.js +1 -1
- package/dist/services/aggregate/billing.aggregate.service.mjs +1 -1
- package/dist/services/aggregate/user.aggregate.service.d.ts.map +1 -1
- package/dist/services/aggregate/user.aggregate.service.js +3 -3
- package/dist/services/aggregate/user.aggregate.service.mjs +3 -3
- package/dist/services/context/index.js +1 -0
- package/dist/services/context/index.mjs +1 -1
- package/dist/services/context/user-context-finalizer.d.ts +1 -0
- package/dist/services/context/user-context-finalizer.d.ts.map +1 -1
- package/dist/services/context/user-context-finalizer.js +17 -0
- package/dist/services/context/user-context-finalizer.mjs +17 -1
- package/dist/services/context/user-context-service.js +1 -1
- package/dist/services/context/user-context-service.mjs +1 -1
- package/dist/services/database/apilog.service.js +1 -0
- package/dist/services/database/apilog.service.mjs +1 -0
- package/dist/services/database/credit.service.js +5 -4
- package/dist/services/database/credit.service.mjs +3 -2
- package/dist/services/database/creditAuditLog.service.js +5 -4
- package/dist/services/database/creditAuditLog.service.mjs +3 -2
- package/dist/services/database/prisma-model-type.d.ts +2 -2
- package/dist/services/database/prisma-model-type.d.ts.map +1 -1
- package/dist/services/database/subscription.service.js +1 -0
- package/dist/services/database/subscription.service.mjs +1 -0
- package/dist/services/database/transaction.service.js +5 -4
- package/dist/services/database/transaction.service.mjs +3 -2
- package/dist/services/database/user.service.js +1 -0
- package/dist/services/database/user.service.mjs +1 -0
- package/dist/services/database/userBackup.service.js +1 -0
- package/dist/services/database/userBackup.service.mjs +1 -0
- package/dist/services/stripe/webhook-handler.js +1 -1
- package/dist/services/stripe/webhook-handler.mjs +1 -1
- package/package.json +15 -8
- package/prisma/schema.prisma +3 -1
- package/src/app/api/ai/route.ts +6 -0
- package/src/core-prisma/browser.ts +54 -0
- package/src/core-prisma/client.ts +78 -0
- package/src/core-prisma/commonInputTypes.ts +565 -0
- package/src/core-prisma/enums.ts +15 -0
- package/src/core-prisma/internal/class.ts +293 -0
- package/src/core-prisma/internal/prismaNamespace.ts +1419 -0
- package/src/core-prisma/internal/prismaNamespaceBrowser.ts +259 -0
- package/src/core-prisma/models/Apilog.ts +1244 -0
- package/src/core-prisma/models/Credit.ts +1722 -0
- package/src/core-prisma/models/CreditAuditLog.ts +1536 -0
- package/src/core-prisma/models/Subscription.ts +1610 -0
- package/src/core-prisma/models/Transaction.ts +2398 -0
- package/src/core-prisma/models/User.ts +1982 -0
- package/src/core-prisma/models/UserBackup.ts +1384 -0
- package/src/core-prisma/models.ts +18 -0
- package/src/lib/money-price-helper.ts +3 -0
- package/src/prisma/index.ts +18 -1
- package/src/prisma/prisma-transaction-util.ts +3 -3
- package/src/prisma/prisma.ts +130 -21
- package/src/services/aggregate/user.aggregate.service.ts +2 -1
- package/src/services/context/user-context-finalizer.ts +16 -0
- package/src/services/database/credit.service.ts +2 -2
- package/src/services/database/prisma-model-type.ts +2 -2
- package/src/services/database/userBackup.service.ts +2 -2
|
@@ -4,11 +4,12 @@ var tslib = require('tslib');
|
|
|
4
4
|
var user_service = require('../database/user.service.js');
|
|
5
5
|
var subscription_service = require('../database/subscription.service.js');
|
|
6
6
|
var credit_service = require('../database/credit.service.js');
|
|
7
|
-
|
|
7
|
+
require('../../core-prisma/client.js');
|
|
8
8
|
var constants = require('../database/constants.js');
|
|
9
9
|
require('../../prisma/prisma.js');
|
|
10
10
|
var prismaTransactionUtil = require('../../prisma/prisma-transaction-util.js');
|
|
11
11
|
var creditInit = require('../../lib/credit-init.js');
|
|
12
|
+
var prismaNamespace = require('../../core-prisma/internal/prismaNamespace.js');
|
|
12
13
|
|
|
13
14
|
const ANONYMOUS_INIT_LOCK_NAMESPACE = 92831;
|
|
14
15
|
class AnonymousAggregateService {
|
|
@@ -16,7 +17,7 @@ class AnonymousAggregateService {
|
|
|
16
17
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
17
18
|
yield tx.$executeRaw `
|
|
18
19
|
SELECT pg_advisory_xact_lock(
|
|
19
|
-
${
|
|
20
|
+
${prismaNamespace.raw(String(ANONYMOUS_INIT_LOCK_NAMESPACE))},
|
|
20
21
|
hashtext(${fingerprintId})
|
|
21
22
|
)
|
|
22
23
|
`;
|
|
@@ -2,11 +2,12 @@ import { __awaiter } from 'tslib';
|
|
|
2
2
|
import { userService } from '../database/user.service.mjs';
|
|
3
3
|
import { subscriptionService } from '../database/subscription.service.mjs';
|
|
4
4
|
import { creditService } from '../database/credit.service.mjs';
|
|
5
|
-
import
|
|
5
|
+
import '../../core-prisma/client.mjs';
|
|
6
6
|
import { UserStatus, OperationType, CreditType } from '../database/constants.mjs';
|
|
7
7
|
import '../../prisma/prisma.mjs';
|
|
8
8
|
import { runInTransaction } from '../../prisma/prisma-transaction-util.mjs';
|
|
9
9
|
import { freeAmount } from '../../lib/credit-init.mjs';
|
|
10
|
+
import { raw } from '../../core-prisma/internal/prismaNamespace.mjs';
|
|
10
11
|
|
|
11
12
|
const ANONYMOUS_INIT_LOCK_NAMESPACE = 92831;
|
|
12
13
|
class AnonymousAggregateService {
|
|
@@ -14,7 +15,7 @@ class AnonymousAggregateService {
|
|
|
14
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15
16
|
yield tx.$executeRaw `
|
|
16
17
|
SELECT pg_advisory_xact_lock(
|
|
17
|
-
${
|
|
18
|
+
${raw(String(ANONYMOUS_INIT_LOCK_NAMESPACE))},
|
|
18
19
|
hashtext(${fingerprintId})
|
|
19
20
|
)
|
|
20
21
|
`;
|
|
@@ -4,10 +4,10 @@ var tslib = require('tslib');
|
|
|
4
4
|
var constants = require('../database/constants.js');
|
|
5
5
|
require('../../prisma/prisma.js');
|
|
6
6
|
var prismaTransactionUtil = require('../../prisma/prisma-transaction-util.js');
|
|
7
|
+
require('../../core-prisma/client.js');
|
|
7
8
|
var subscription_service = require('../database/subscription.service.js');
|
|
8
9
|
var credit_service = require('../database/credit.service.js');
|
|
9
10
|
var transaction_service = require('../database/transaction.service.js');
|
|
10
|
-
require('@prisma/client');
|
|
11
11
|
|
|
12
12
|
class BillingAggregateService {
|
|
13
13
|
recordSubscriptionInitPayment(context) {
|
|
@@ -2,10 +2,10 @@ import { __awaiter } from 'tslib';
|
|
|
2
2
|
import { SubscriptionStatus, PaymentStatus, OrderStatus, TransactionType, PaySupplier, OperationType, CreditType } from '../database/constants.mjs';
|
|
3
3
|
import '../../prisma/prisma.mjs';
|
|
4
4
|
import { runInTransaction } from '../../prisma/prisma-transaction-util.mjs';
|
|
5
|
+
import '../../core-prisma/client.mjs';
|
|
5
6
|
import { subscriptionService } from '../database/subscription.service.mjs';
|
|
6
7
|
import { creditService } from '../database/credit.service.mjs';
|
|
7
8
|
import { transactionService } from '../database/transaction.service.mjs';
|
|
8
|
-
import '@prisma/client';
|
|
9
9
|
|
|
10
10
|
class BillingAggregateService {
|
|
11
11
|
recordSubscriptionInitPayment(context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.aggregate.service.d.ts","sourceRoot":"","sources":["../../../src/services/aggregate/user.aggregate.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAKvE,qBAAa,oBAAoB;IAEzB,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;KAAE,GAC/C,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;IA6B9C;;;;;;;;;;;;OAYG;IACG,uBAAuB,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,CAAC,cAAc,GAChC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"user.aggregate.service.d.ts","sourceRoot":"","sources":["../../../src/services/aggregate/user.aggregate.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAKvE,qBAAa,oBAAoB;IAEzB,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;KAAE,GAC/C,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;IA6B9C;;;;;;;;;;;;OAYG;IACG,uBAAuB,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,CAAC,cAAc,GAChC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;IAgCxC,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,UAAU,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;IA+B3C,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAwBzD,qBAAqB;CAcpC;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|
|
@@ -5,7 +5,7 @@ var constants = require('../database/constants.js');
|
|
|
5
5
|
var user_service = require('../database/user.service.js');
|
|
6
6
|
var subscription_service = require('../database/subscription.service.js');
|
|
7
7
|
var credit_service = require('../database/credit.service.js');
|
|
8
|
-
require('
|
|
8
|
+
require('../../core-prisma/client.js');
|
|
9
9
|
require('../../prisma/prisma.js');
|
|
10
10
|
var prismaTransactionUtil = require('../../prisma/prisma-transaction-util.js');
|
|
11
11
|
var creditInit = require('../../lib/credit-init.js');
|
|
@@ -63,7 +63,7 @@ class UserAggregateService {
|
|
|
63
63
|
operationType: constants.OperationType.SYS_GIFT,
|
|
64
64
|
operationReferId: newUser.userId,
|
|
65
65
|
creditsChange: creditInit.freeRegisterAmount,
|
|
66
|
-
});
|
|
66
|
+
}, tx);
|
|
67
67
|
yield subscription_service.subscriptionService.initializeSubscription(newUser.userId, tx);
|
|
68
68
|
return { newUser, credit };
|
|
69
69
|
}));
|
|
@@ -104,7 +104,7 @@ class UserAggregateService {
|
|
|
104
104
|
}
|
|
105
105
|
const userId = user.userId;
|
|
106
106
|
// 更改用户状态,保留user信息尤其是FingerprintId,防止反复注册薅羊毛
|
|
107
|
-
yield user_service.userService.unregister(user.userId);
|
|
107
|
+
yield user_service.userService.unregister(user.userId, tx);
|
|
108
108
|
// 清空积分
|
|
109
109
|
yield credit_service.creditService.purgeCredit(userId, 'soft_delete_user', userId, tx);
|
|
110
110
|
const subscription = yield subscription_service.subscriptionService.getActiveSubscription(userId, tx);
|
|
@@ -3,7 +3,7 @@ import { UserStatus, OperationType, CreditType } from '../database/constants.mjs
|
|
|
3
3
|
import { userService } from '../database/user.service.mjs';
|
|
4
4
|
import { subscriptionService } from '../database/subscription.service.mjs';
|
|
5
5
|
import { creditService } from '../database/credit.service.mjs';
|
|
6
|
-
import '
|
|
6
|
+
import '../../core-prisma/client.mjs';
|
|
7
7
|
import '../../prisma/prisma.mjs';
|
|
8
8
|
import { runInTransaction } from '../../prisma/prisma-transaction-util.mjs';
|
|
9
9
|
import { freeAmount, freeRegisterAmount } from '../../lib/credit-init.mjs';
|
|
@@ -61,7 +61,7 @@ class UserAggregateService {
|
|
|
61
61
|
operationType: OperationType.SYS_GIFT,
|
|
62
62
|
operationReferId: newUser.userId,
|
|
63
63
|
creditsChange: freeRegisterAmount,
|
|
64
|
-
});
|
|
64
|
+
}, tx);
|
|
65
65
|
yield subscriptionService.initializeSubscription(newUser.userId, tx);
|
|
66
66
|
return { newUser, credit };
|
|
67
67
|
}));
|
|
@@ -102,7 +102,7 @@ class UserAggregateService {
|
|
|
102
102
|
}
|
|
103
103
|
const userId = user.userId;
|
|
104
104
|
// 更改用户状态,保留user信息尤其是FingerprintId,防止反复注册薅羊毛
|
|
105
|
-
yield userService.unregister(user.userId);
|
|
105
|
+
yield userService.unregister(user.userId, tx);
|
|
106
106
|
// 清空积分
|
|
107
107
|
yield creditService.purgeCredit(userId, 'soft_delete_user', userId, tx);
|
|
108
108
|
const subscription = yield subscriptionService.getActiveSubscription(userId, tx);
|
|
@@ -11,4 +11,5 @@ exports.fetchUserContextByClerkUserId = userContextService.fetchUserContextByCle
|
|
|
11
11
|
exports.mapCreditToXCredit = userContextService.mapCreditToXCredit;
|
|
12
12
|
exports.mapSubscriptionToXSubscription = userContextService.mapSubscriptionToXSubscription;
|
|
13
13
|
exports.mapUserToXUser = userContextService.mapUserToXUser;
|
|
14
|
+
exports.applyMoneyPriceMockUserDelay = userContextFinalizer.applyMoneyPriceMockUserDelay;
|
|
14
15
|
exports.finalizeUserContext = userContextFinalizer.finalizeUserContext;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { buildInitUserContextFromEntities, fetchLatestUserContextByFingerprintId, fetchUserContextByClerkUserId, mapCreditToXCredit, mapSubscriptionToXSubscription, mapUserToXUser } from './user-context-service.mjs';
|
|
2
|
-
export { finalizeUserContext } from './user-context-finalizer.mjs';
|
|
2
|
+
export { applyMoneyPriceMockUserDelay, finalizeUserContext } from './user-context-finalizer.mjs';
|
|
@@ -3,6 +3,7 @@ type FinalizableUserContext = {
|
|
|
3
3
|
xUser: XUser | null;
|
|
4
4
|
xSubscription: XSubscription | null;
|
|
5
5
|
};
|
|
6
|
+
export declare function applyMoneyPriceMockUserDelay(): Promise<void>;
|
|
6
7
|
/**
|
|
7
8
|
* Output finalizer for user-context payloads.
|
|
8
9
|
* Real data assembly should stay in user-context-service; any optional test-only
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-context-finalizer.d.ts","sourceRoot":"","sources":["../../../src/services/context/user-context-finalizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAEjF,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;CACrC,CAAC;
|
|
1
|
+
{"version":3,"file":"user-context-finalizer.d.ts","sourceRoot":"","sources":["../../../src/services/context/user-context-finalizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAEjF,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;CACrC,CAAC;AAIF,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAYlE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,sBAAsB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAsEnF"}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var tslib = require('tslib');
|
|
3
4
|
var utils = require('@windrun-huaiin/lib/utils');
|
|
4
5
|
|
|
6
|
+
const MAX_MONEY_PRICE_MOCK_DELAY_MS = 10000;
|
|
7
|
+
function applyMoneyPriceMockUserDelay() {
|
|
8
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
9
|
+
var _a;
|
|
10
|
+
if (process.env.MONEY_PRICE_MOCK_USER_ENABLED !== 'true') {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const delaySeconds = Number((_a = process.env.MONEY_PRICE_MOCK_USER_DELAY_SECONDS) !== null && _a !== void 0 ? _a : 0);
|
|
14
|
+
if (!Number.isFinite(delaySeconds) || delaySeconds <= 0) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const delayMs = Math.min(Math.floor(delaySeconds * 1000), MAX_MONEY_PRICE_MOCK_DELAY_MS);
|
|
18
|
+
yield new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
19
|
+
});
|
|
20
|
+
}
|
|
5
21
|
/**
|
|
6
22
|
* Output finalizer for user-context payloads.
|
|
7
23
|
* Real data assembly should stay in user-context-service; any optional test-only
|
|
@@ -71,4 +87,5 @@ function finalizeUserContext(context) {
|
|
|
71
87
|
return context;
|
|
72
88
|
}
|
|
73
89
|
|
|
90
|
+
exports.applyMoneyPriceMockUserDelay = applyMoneyPriceMockUserDelay;
|
|
74
91
|
exports.finalizeUserContext = finalizeUserContext;
|
|
@@ -1,5 +1,21 @@
|
|
|
1
|
+
import { __awaiter } from 'tslib';
|
|
1
2
|
import { viewLocalTime } from '@windrun-huaiin/lib/utils';
|
|
2
3
|
|
|
4
|
+
const MAX_MONEY_PRICE_MOCK_DELAY_MS = 10000;
|
|
5
|
+
function applyMoneyPriceMockUserDelay() {
|
|
6
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
7
|
+
var _a;
|
|
8
|
+
if (process.env.MONEY_PRICE_MOCK_USER_ENABLED !== 'true') {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const delaySeconds = Number((_a = process.env.MONEY_PRICE_MOCK_USER_DELAY_SECONDS) !== null && _a !== void 0 ? _a : 0);
|
|
12
|
+
if (!Number.isFinite(delaySeconds) || delaySeconds <= 0) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const delayMs = Math.min(Math.floor(delaySeconds * 1000), MAX_MONEY_PRICE_MOCK_DELAY_MS);
|
|
16
|
+
yield new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
17
|
+
});
|
|
18
|
+
}
|
|
3
19
|
/**
|
|
4
20
|
* Output finalizer for user-context payloads.
|
|
5
21
|
* Real data assembly should stay in user-context-service; any optional test-only
|
|
@@ -69,4 +85,4 @@ function finalizeUserContext(context) {
|
|
|
69
85
|
return context;
|
|
70
86
|
}
|
|
71
87
|
|
|
72
|
-
export { finalizeUserContext };
|
|
88
|
+
export { applyMoneyPriceMockUserDelay, finalizeUserContext };
|
|
@@ -4,7 +4,7 @@ var tslib = require('tslib');
|
|
|
4
4
|
var user_service = require('../database/user.service.js');
|
|
5
5
|
var subscription_service = require('../database/subscription.service.js');
|
|
6
6
|
var credit_service = require('../database/credit.service.js');
|
|
7
|
-
require('
|
|
7
|
+
require('../../core-prisma/client.js');
|
|
8
8
|
require('../../prisma/prisma.js');
|
|
9
9
|
var utils = require('@windrun-huaiin/lib/utils');
|
|
10
10
|
|
|
@@ -2,7 +2,7 @@ import { __awaiter } from 'tslib';
|
|
|
2
2
|
import { userService } from '../database/user.service.mjs';
|
|
3
3
|
import { subscriptionService } from '../database/subscription.service.mjs';
|
|
4
4
|
import { creditService } from '../database/credit.service.mjs';
|
|
5
|
-
import '
|
|
5
|
+
import '../../core-prisma/client.mjs';
|
|
6
6
|
import '../../prisma/prisma.mjs';
|
|
7
7
|
import { viewLocalTime } from '@windrun-huaiin/lib/utils';
|
|
8
8
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var tslib = require('tslib');
|
|
4
|
-
|
|
4
|
+
require('../../core-prisma/client.js');
|
|
5
5
|
var constants = require('./constants.js');
|
|
6
6
|
var creditInit = require('../../lib/credit-init.js');
|
|
7
7
|
var prisma = require('../../prisma/prisma.js');
|
|
8
8
|
var creditAuditLog_service = require('./creditAuditLog.service.js');
|
|
9
|
+
var prismaNamespace = require('../../core-prisma/internal/prismaNamespace.js');
|
|
9
10
|
|
|
10
11
|
const CREDIT_PURGE_CONFIG = {
|
|
11
12
|
[constants.CreditType.FREE]: {
|
|
@@ -454,13 +455,13 @@ class CreditService {
|
|
|
454
455
|
// Get Users with Low Credit Balance
|
|
455
456
|
getLowBalanceUsers() {
|
|
456
457
|
return tslib.__awaiter(this, arguments, void 0, function* (threshold = 10, tx) {
|
|
457
|
-
const client
|
|
458
|
-
const query =
|
|
458
|
+
const client = prisma.checkAndFallbackWithNonTCClient(tx);
|
|
459
|
+
const query = prismaNamespace.sql `
|
|
459
460
|
SELECT * FROM credits
|
|
460
461
|
WHERE (balance_free + balance_paid + balance_onetime_paid) < ${threshold}
|
|
461
462
|
ORDER BY (balance_free + balance_paid + balance_onetime_paid) ASC
|
|
462
463
|
`;
|
|
463
|
-
return yield client
|
|
464
|
+
return yield client.$queryRaw(query);
|
|
464
465
|
});
|
|
465
466
|
}
|
|
466
467
|
// Get Credit Statistics
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import
|
|
2
|
+
import '../../core-prisma/client.mjs';
|
|
3
3
|
import { CreditType, OperationType } from './constants.mjs';
|
|
4
4
|
import { freeExpiredDays } from '../../lib/credit-init.mjs';
|
|
5
5
|
import { checkAndFallbackWithNonTCClient } from '../../prisma/prisma.mjs';
|
|
6
6
|
import { creditAuditLogService } from './creditAuditLog.service.mjs';
|
|
7
|
+
import { sql } from '../../core-prisma/internal/prismaNamespace.mjs';
|
|
7
8
|
|
|
8
9
|
const CREDIT_PURGE_CONFIG = {
|
|
9
10
|
[CreditType.FREE]: {
|
|
@@ -453,7 +454,7 @@ class CreditService {
|
|
|
453
454
|
getLowBalanceUsers() {
|
|
454
455
|
return __awaiter(this, arguments, void 0, function* (threshold = 10, tx) {
|
|
455
456
|
const client = checkAndFallbackWithNonTCClient(tx);
|
|
456
|
-
const query =
|
|
457
|
+
const query = sql `
|
|
457
458
|
SELECT * FROM credits
|
|
458
459
|
WHERE (balance_free + balance_paid + balance_onetime_paid) < ${threshold}
|
|
459
460
|
ORDER BY (balance_free + balance_paid + balance_onetime_paid) ASC
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var tslib = require('tslib');
|
|
4
|
-
|
|
4
|
+
require('../../core-prisma/client.js');
|
|
5
5
|
var constants = require('./constants.js');
|
|
6
6
|
var prisma = require('../../prisma/prisma.js');
|
|
7
|
+
var prismaNamespace = require('../../core-prisma/internal/prismaNamespace.js');
|
|
7
8
|
|
|
8
9
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
10
|
class CreditAuditLogService {
|
|
@@ -188,9 +189,9 @@ class CreditAuditLogService {
|
|
|
188
189
|
return tslib.__awaiter(this, arguments, void 0, function* (days = 30, userId, tx) {
|
|
189
190
|
const startDate = new Date();
|
|
190
191
|
startDate.setDate(startDate.getDate() - days);
|
|
191
|
-
const client
|
|
192
|
-
const userFilter = userId ?
|
|
193
|
-
const result = yield client
|
|
192
|
+
const client = prisma.checkAndFallbackWithNonTCClient(tx);
|
|
193
|
+
const userFilter = userId ? prismaNamespace.sql `AND user_id = ${userId}` : prismaNamespace.sql ``;
|
|
194
|
+
const result = yield client.$queryRaw `
|
|
194
195
|
SELECT
|
|
195
196
|
DATE(created_at) as date,
|
|
196
197
|
SUM(CASE WHEN operation_type = 'consume' THEN credits_used ELSE 0 END) as consumed,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import
|
|
2
|
+
import '../../core-prisma/client.mjs';
|
|
3
3
|
import { OperationType, CreditType } from './constants.mjs';
|
|
4
4
|
import { checkAndFallbackWithNonTCClient } from '../../prisma/prisma.mjs';
|
|
5
|
+
import { sql } from '../../core-prisma/internal/prismaNamespace.mjs';
|
|
5
6
|
|
|
6
7
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
8
|
class CreditAuditLogService {
|
|
@@ -187,7 +188,7 @@ class CreditAuditLogService {
|
|
|
187
188
|
const startDate = new Date();
|
|
188
189
|
startDate.setDate(startDate.getDate() - days);
|
|
189
190
|
const client = checkAndFallbackWithNonTCClient(tx);
|
|
190
|
-
const userFilter = userId ?
|
|
191
|
+
const userFilter = userId ? sql `AND user_id = ${userId}` : sql ``;
|
|
191
192
|
const result = yield client.$queryRaw `
|
|
192
193
|
SELECT
|
|
193
194
|
DATE(created_at) as date,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { User, Subscription, Credit, CreditAuditLog, Transaction, Apilog, UserBackup, } from '
|
|
2
|
-
export { Prisma } from '
|
|
1
|
+
export type { User, Subscription, Credit, CreditAuditLog, Transaction, Apilog, UserBackup, } from '../../core-prisma/client';
|
|
2
|
+
export { Prisma } from '../../core-prisma/client';
|
|
3
3
|
//# sourceMappingURL=prisma-model-type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-model-type.d.ts","sourceRoot":"","sources":["../../../src/services/database/prisma-model-type.ts"],"names":[],"mappings":"AACA,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,cAAc,EACd,WAAW,EACX,MAAM,EACN,UAAU,GACX,MAAM,
|
|
1
|
+
{"version":3,"file":"prisma-model-type.d.ts","sourceRoot":"","sources":["../../../src/services/database/prisma-model-type.ts"],"names":[],"mappings":"AACA,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,cAAc,EACd,WAAW,EACX,MAAM,EACN,UAAU,GACX,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var tslib = require('tslib');
|
|
4
|
-
|
|
4
|
+
require('../../core-prisma/client.js');
|
|
5
5
|
var constants = require('./constants.js');
|
|
6
6
|
var prisma = require('../../prisma/prisma.js');
|
|
7
|
+
var prismaNamespace = require('../../core-prisma/internal/prismaNamespace.js');
|
|
7
8
|
|
|
8
9
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
10
|
class TransactionService {
|
|
@@ -279,8 +280,8 @@ class TransactionService {
|
|
|
279
280
|
return tslib.__awaiter(this, arguments, void 0, function* (days = 30, tx) {
|
|
280
281
|
const startDate = new Date();
|
|
281
282
|
startDate.setDate(startDate.getDate() - days);
|
|
282
|
-
const client
|
|
283
|
-
const query =
|
|
283
|
+
const client = prisma.checkAndFallbackWithNonTCClient(tx);
|
|
284
|
+
const query = prismaNamespace.sql `
|
|
284
285
|
SELECT
|
|
285
286
|
DATE(paid_at) as date,
|
|
286
287
|
COUNT(*) as transactions,
|
|
@@ -294,7 +295,7 @@ class TransactionService {
|
|
|
294
295
|
GROUP BY DATE(paid_at)
|
|
295
296
|
ORDER BY date DESC
|
|
296
297
|
`;
|
|
297
|
-
const result = yield client
|
|
298
|
+
const result = yield client.$queryRaw(query);
|
|
298
299
|
return result;
|
|
299
300
|
});
|
|
300
301
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import
|
|
2
|
+
import '../../core-prisma/client.mjs';
|
|
3
3
|
import { PaymentStatus, OrderStatus, TransactionType } from './constants.mjs';
|
|
4
4
|
import { checkAndFallbackWithNonTCClient } from '../../prisma/prisma.mjs';
|
|
5
|
+
import { sql } from '../../core-prisma/internal/prismaNamespace.mjs';
|
|
5
6
|
|
|
6
7
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
8
|
class TransactionService {
|
|
@@ -278,7 +279,7 @@ class TransactionService {
|
|
|
278
279
|
const startDate = new Date();
|
|
279
280
|
startDate.setDate(startDate.getDate() - days);
|
|
280
281
|
const client = checkAndFallbackWithNonTCClient(tx);
|
|
281
|
-
const query =
|
|
282
|
+
const query = sql `
|
|
282
283
|
SELECT
|
|
283
284
|
DATE(paid_at) as date,
|
|
284
285
|
COUNT(*) as transactions,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
2
|
import { UserStatus } from './constants.mjs';
|
|
3
3
|
import { checkAndFallbackWithNonTCClient } from '../../prisma/prisma.mjs';
|
|
4
|
+
import '../../core-prisma/client.mjs';
|
|
4
5
|
|
|
5
6
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
7
|
class UserService {
|
|
@@ -4,10 +4,10 @@ var tslib = require('tslib');
|
|
|
4
4
|
var billing_aggregate_service = require('../aggregate/billing.aggregate.service.js');
|
|
5
5
|
var constants = require('../database/constants.js');
|
|
6
6
|
require('../../prisma/prisma.js');
|
|
7
|
+
require('../../core-prisma/client.js');
|
|
7
8
|
var subscription_service = require('../database/subscription.service.js');
|
|
8
9
|
require('../database/credit.service.js');
|
|
9
10
|
var transaction_service = require('../database/transaction.service.js');
|
|
10
|
-
require('@prisma/client');
|
|
11
11
|
var apilog_service = require('../database/apilog.service.js');
|
|
12
12
|
var creditInit = require('../../lib/credit-init.js');
|
|
13
13
|
var moneyPriceConfig = require('../../lib/money-price-config.js');
|
|
@@ -2,10 +2,10 @@ import { __awaiter } from 'tslib';
|
|
|
2
2
|
import { billingAggregateService } from '../aggregate/billing.aggregate.service.mjs';
|
|
3
3
|
import { OrderStatus, TransactionType, PaymentStatus, BillingReason } from '../database/constants.mjs';
|
|
4
4
|
import '../../prisma/prisma.mjs';
|
|
5
|
+
import '../../core-prisma/client.mjs';
|
|
5
6
|
import { subscriptionService } from '../database/subscription.service.mjs';
|
|
6
7
|
import '../database/credit.service.mjs';
|
|
7
8
|
import { transactionService } from '../database/transaction.service.mjs';
|
|
8
|
-
import '@prisma/client';
|
|
9
9
|
import { Apilogger } from '../database/apilog.service.mjs';
|
|
10
10
|
import { oneTimeExpiredDays } from '../../lib/credit-init.mjs';
|
|
11
11
|
import { getCreditsFromPriceId } from '../../lib/money-price-config.mjs';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@windrun-huaiin/backend-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "28.0.0",
|
|
4
4
|
"description": "Shared backend primitives: Prisma schema/client, database services, routing helpers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -42,6 +42,11 @@
|
|
|
42
42
|
"import": "./dist/services/ai/index.mjs",
|
|
43
43
|
"require": "./dist/services/ai/index.js"
|
|
44
44
|
},
|
|
45
|
+
"./app/api/ai/route": {
|
|
46
|
+
"types": "./dist/app/api/ai/route.d.ts",
|
|
47
|
+
"import": "./dist/app/api/ai/route.mjs",
|
|
48
|
+
"require": "./dist/app/api/ai/route.js"
|
|
49
|
+
},
|
|
45
50
|
"./config/fingerprint": {
|
|
46
51
|
"types": "./dist/config/fingerprint.d.ts",
|
|
47
52
|
"import": "./dist/config/fingerprint.mjs",
|
|
@@ -127,6 +132,7 @@
|
|
|
127
132
|
],
|
|
128
133
|
"dependencies": {
|
|
129
134
|
"@clerk/nextjs": "^7.0.5",
|
|
135
|
+
"@prisma/adapter-pg": "^6.19.0",
|
|
130
136
|
"@prisma/client": "^6.19.0",
|
|
131
137
|
"@upstash/redis": "^1.34.0",
|
|
132
138
|
"@upstash/qstash": "^2.7.0",
|
|
@@ -137,9 +143,9 @@
|
|
|
137
143
|
"svix": "^1.86.0",
|
|
138
144
|
"tslib": "^2.8.1",
|
|
139
145
|
"zod": "^4.3.6",
|
|
140
|
-
"@windrun-huaiin/
|
|
141
|
-
"@windrun-huaiin/
|
|
142
|
-
"@windrun-huaiin/
|
|
146
|
+
"@windrun-huaiin/contracts": "^28.0.0",
|
|
147
|
+
"@windrun-huaiin/lib": "^28.0.0",
|
|
148
|
+
"@windrun-huaiin/third-ui": "^28.0.0"
|
|
143
149
|
},
|
|
144
150
|
"devDependencies": {
|
|
145
151
|
"@rollup/plugin-alias": "^5.1.1",
|
|
@@ -163,10 +169,11 @@
|
|
|
163
169
|
"access": "public"
|
|
164
170
|
},
|
|
165
171
|
"scripts": {
|
|
166
|
-
"
|
|
167
|
-
"build:
|
|
168
|
-
"
|
|
172
|
+
"prisma:generate": "rm -rf src/core-prisma && prisma generate --schema prisma/schema.prisma",
|
|
173
|
+
"build": "pnpm prisma:generate && rm -rf dist && rollup -c rollup.config.mjs",
|
|
174
|
+
"build:prod": "pnpm prisma:generate && rm -rf dist && rollup -c rollup.config.mjs",
|
|
175
|
+
"dev": "pnpm prisma:generate && rollup -c rollup.config.mjs --watch",
|
|
169
176
|
"clean": "rm -rf dist",
|
|
170
|
-
"type-check": "tsc --noEmit"
|
|
177
|
+
"type-check": "pnpm prisma:generate && tsc --noEmit"
|
|
171
178
|
}
|
|
172
179
|
}
|
package/prisma/schema.prisma
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
// - generator/datasource 配置仅为示例,合并到宿主时请以宿主的 schema 为准,必要时删除/覆盖本段。
|
|
3
3
|
// - models 定义可直接复用,数据库连接信息应由宿主自行配置。
|
|
4
4
|
generator client {
|
|
5
|
-
provider = "prisma-client
|
|
5
|
+
provider = "prisma-client"
|
|
6
|
+
output = "../src/core-prisma"
|
|
7
|
+
engineType = "client"
|
|
6
8
|
}
|
|
7
9
|
|
|
8
10
|
datasource db {
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
// biome-ignore-all lint: generated file
|
|
5
|
+
// @ts-nocheck
|
|
6
|
+
/*
|
|
7
|
+
* This file should be your main import to use Prisma-related types and utilities in a browser.
|
|
8
|
+
* Use it to get access to models, enums, and input types.
|
|
9
|
+
*
|
|
10
|
+
* This file does not contain a `PrismaClient` class, nor several other helpers that are intended as server-side only.
|
|
11
|
+
* See `client.ts` for the standard, server-side entry point.
|
|
12
|
+
*
|
|
13
|
+
* 🟢 You can import this file directly.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import * as Prisma from './internal/prismaNamespaceBrowser'
|
|
17
|
+
export { Prisma }
|
|
18
|
+
export * as $Enums from './enums'
|
|
19
|
+
export * from './enums';
|
|
20
|
+
/**
|
|
21
|
+
* Model User
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
export type User = Prisma.UserModel
|
|
25
|
+
/**
|
|
26
|
+
* Model Subscription
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
export type Subscription = Prisma.SubscriptionModel
|
|
30
|
+
/**
|
|
31
|
+
* Model Credit
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
export type Credit = Prisma.CreditModel
|
|
35
|
+
/**
|
|
36
|
+
* Model Transaction
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
export type Transaction = Prisma.TransactionModel
|
|
40
|
+
/**
|
|
41
|
+
* Model CreditAuditLog
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
export type CreditAuditLog = Prisma.CreditAuditLogModel
|
|
45
|
+
/**
|
|
46
|
+
* Model UserBackup
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
export type UserBackup = Prisma.UserBackupModel
|
|
50
|
+
/**
|
|
51
|
+
* Model Apilog
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
export type Apilog = Prisma.ApilogModel
|