修改mergeUser时merge自己的bug

This commit is contained in:
wenjiarui 2023-04-24 19:05:16 +08:00
parent c677499282
commit e0957e5c8f
7 changed files with 51 additions and 27 deletions

View File

@ -202,7 +202,7 @@ createData, user) {
}
return [3 /*break*/, 10];
case 1:
if (currentToken.id === user.id) {
if (currentToken.userId === user.id) {
return [2 /*return*/, currentToken.id];
}
return [4 /*yield*/, (0, user_1.mergeUser)({ from: user.id, to: currentToken.userId }, context, true)];
@ -210,7 +210,7 @@ createData, user) {
_23.sent();
return [2 /*return*/, currentToken.id];
case 3:
(0, assert_1.assert)(currentToken.id !== user.id);
(0, assert_1.assert)(currentToken.userId !== user.id);
return [4 /*yield*/, (0, user_1.mergeUser)({ from: user.id, to: currentToken.userId }, context, true)];
case 4:
_23.sent();
@ -235,7 +235,7 @@ createData, user) {
_23.label = 8;
case 8:
(0, assert_1.assert)(user.refId);
if (user.refId === currentToken.id) {
if (user.refId === currentToken.userId) {
return [2 /*return*/, currentToken.id];
}
// 说明一个用户被其他用户merge了现在还是暂时先merge后面再说
@ -471,10 +471,10 @@ createData, user) {
}
function setupMobile(mobile, env, context) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var result2, _a, mobileRow, user, _b, _c;
var _d;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
var result2, _a, mobileRow, user, _b, userState, ref, _c, _d;
var _e;
return tslib_1.__generator(this, function (_f) {
switch (_f.label) {
case 0: return [4 /*yield*/, context.select('mobile', {
data: {
id: 1,
@ -485,6 +485,11 @@ function setupMobile(mobile, env, context) {
id: 1,
userState: 1,
refId: 1,
ref: {
id: 1,
userState: 1,
refId: 1,
},
wechatUser$user: {
$entity: 'wechatUser',
data: {
@ -506,25 +511,29 @@ function setupMobile(mobile, env, context) {
}
}, { dontCollect: true })];
case 1:
result2 = _e.sent();
if (!(result2.length > 0)) return [3 /*break*/, 3];
result2 = _f.sent();
if (!(result2.length > 0)) return [3 /*break*/, 5];
// 此手机号已经存在
(0, assert_1.assert)(result2.length === 1);
_a = tslib_1.__read(result2, 1), mobileRow = _a[0];
user = mobileRow.user;
return [4 /*yield*/, setUpTokenAndUser(env, context, 'mobile', mobileRow.id, undefined, user)];
case 2: return [2 /*return*/, _e.sent()];
case 3:
_b = setUpTokenAndUser;
_c = [env, context, 'mobile', undefined];
_d = {};
_b = user, userState = _b.userState, ref = _b.ref;
if (!(userState === 'merged')) return [3 /*break*/, 3];
return [4 /*yield*/, setUpTokenAndUser(env, context, 'mobile', mobileRow.id, undefined, ref)];
case 2: return [2 /*return*/, _f.sent()];
case 3: return [4 /*yield*/, setUpTokenAndUser(env, context, 'mobile', mobileRow.id, undefined, user)];
case 4: return [2 /*return*/, _f.sent()];
case 5:
_c = setUpTokenAndUser;
_d = [env, context, 'mobile', undefined];
_e = {};
return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
case 4: return [4 /*yield*/, _b.apply(void 0, _c.concat([(_d.id = _e.sent(),
_d.mobile = mobile,
_d)]))];
case 5:
case 6: return [4 /*yield*/, _c.apply(void 0, _d.concat([(_e.id = _f.sent(),
_e.mobile = mobile,
_e)]))];
case 7:
//此手机号不存在
return [2 /*return*/, _e.sent()];
return [2 /*return*/, _f.sent()];
}
});
});

View File

@ -18,6 +18,7 @@ function mergeUser(params, context, innerLogic) {
from = params.from, to = params.to;
(0, assert_1.default)(from);
(0, assert_1.default)(to);
(0, assert_1.default)(from !== to, '不能merge到相同user');
schema = context.getSchema();
_b = (_a = context).operate;
_c = ['token'];
@ -65,6 +66,7 @@ function mergeUser(params, context, innerLogic) {
_g.action = 'disable',
_g.data = {},
_g.filter = {
ableState: 'enabled',
playerId: from, // todo 这里是playerId, root如果正在扮演该用户待处理
},
_g), { dontCollect: true }]))];

View File

@ -8,7 +8,7 @@ export interface Schema extends EntityShape {
openId?: String<32>;
unionId?: String<32>;
sessionKey?: String<64>;
accessToken?: String<64>;
accessToken?: String<128>;
refreshToken?: String<64>;
scope?: String<64>;
atExpiredAt?: Datetime;

View File

@ -14,7 +14,7 @@ export declare type OpSchema = EntityShape & {
openId?: String<32> | null;
unionId?: String<32> | null;
sessionKey?: String<64> | null;
accessToken?: String<64> | null;
accessToken?: String<128> | null;
refreshToken?: String<64> | null;
scope?: String<64> | null;
atExpiredAt?: Datetime | null;
@ -33,7 +33,7 @@ export declare type Schema = EntityShape & {
openId?: String<32> | null;
unionId?: String<32> | null;
sessionKey?: String<64> | null;
accessToken?: String<64> | null;
accessToken?: String<128> | null;
refreshToken?: String<64> | null;
scope?: String<64> | null;
atExpiredAt?: Datetime | null;

View File

@ -30,7 +30,7 @@ exports.desc = {
accessToken: {
type: "varchar",
params: {
length: 64
length: 128
}
},
refreshToken: {

View File

@ -14,6 +14,7 @@ import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
import { tokenProjection } from '../types/projection';
import { sendSms } from '../utils/sms';
import { mergeUser } from './user';
import { users } from '../data/userRole';
async function makeDistinguishException<ED extends EntityDict, Cxt extends BackendRuntimeContext<ED>>(userId: string, context: Cxt, message?: string) {
const [user] = await context.select('user', {
@ -162,14 +163,14 @@ async function setUpTokenAndUser<ED extends EntityDict, Cxt extends BackendRunti
const { userState } = user;
switch (userState) {
case 'normal': {
if (currentToken.id === user.id) {
if (currentToken.userId === user.id) {
return currentToken.id;
}
await mergeUser<ED, Cxt>({ from: user.id!, to: currentToken.userId! }, context, true);
return currentToken.id;
}
case 'shadow': {
assert(currentToken.id !== user.id);
assert(currentToken.userId !== user.id);
await mergeUser<ED, Cxt>({ from: user.id!, to: currentToken.userId! }, context, true);
await context.operate('user', {
id: await generateNewIdAsync(),
@ -186,7 +187,7 @@ async function setUpTokenAndUser<ED extends EntityDict, Cxt extends BackendRunti
}
case 'merged': {
assert(user.refId);
if (user.refId === currentToken.id) {
if (user.refId === currentToken.userId) {
return currentToken.id;
}
// 说明一个用户被其他用户merge了现在还是暂时先merge后面再说
@ -370,6 +371,11 @@ async function setupMobile<ED extends EntityDict, Cxt extends BackendRuntimeCont
id: 1,
userState: 1,
refId: 1,
ref: {
id: 1,
userState: 1,
refId: 1,
},
wechatUser$user: {
$entity: 'wechatUser',
data: {
@ -395,6 +401,11 @@ async function setupMobile<ED extends EntityDict, Cxt extends BackendRuntimeCont
assert(result2.length === 1);
const [mobileRow] = result2;
const { user } = mobileRow;
const { userState, ref } = user!;
if (userState === 'merged') {
return await setUpTokenAndUser<ED, Cxt>(env, context, 'mobile', mobileRow.id, undefined, ref as Partial<ED['user']['Schema']>);
}
return await setUpTokenAndUser<ED, Cxt>(env, context, 'mobile', mobileRow.id, undefined, user as Partial<ED['user']['Schema']>);
}
else {

View File

@ -12,6 +12,7 @@ export async function mergeUser<ED extends EntityDict & BaseEntityDict, Cxt exte
const { from, to } = params;
assert(from);
assert(to);
assert(from !== to, '不能merge到相同user');
const schema = context.getSchema();
/* for (const entity in schema) {
if (['oper', 'modi', 'operEntity', 'modiEntity', 'userEntityGrant', 'wechatQrCode'].includes(entity)) {
@ -56,6 +57,7 @@ export async function mergeUser<ED extends EntityDict & BaseEntityDict, Cxt exte
action: 'disable',
data: {},
filter: {
ableState: 'enabled',
playerId: from, // todo 这里是playerId, root如果正在扮演该用户待处理
},
}, { dontCollect: true });