8032-devToTest_2440 #3009
|
@ -2,23 +2,20 @@ const UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('loginApp', {
|
Self.remoteMethodCtx('loginApp', {
|
||||||
description: 'Login a user with username/email and password',
|
description: 'Login a user with username and password for app',
|
||||||
accepts: [
|
accepts: [
|
||||||
{
|
{
|
||||||
arg: 'user',
|
arg: 'user',
|
||||||
type: 'String',
|
type: 'String',
|
||||||
description: 'The user name or email',
|
description: 'The user name',
|
||||||
required: true
|
required: true
|
||||||
}, {
|
}, {
|
||||||
arg: 'password',
|
arg: 'password',
|
||||||
type: 'String',
|
type: 'String',
|
||||||
|
required: true,
|
||||||
description: 'The password'
|
description: 'The password'
|
||||||
}, {
|
}, {
|
||||||
arg: 'deviceId',
|
arg: 'androidId',
|
||||||
type: 'String',
|
|
||||||
description: 'Device id'
|
|
||||||
}, {
|
|
||||||
arg: 'android_id',
|
|
||||||
type: 'String',
|
type: 'String',
|
||||||
description: 'Android id'
|
description: 'Android id'
|
||||||
}, {
|
}, {
|
||||||
|
@ -29,11 +26,7 @@ module.exports = Self => {
|
||||||
arg: 'nameApp',
|
arg: 'nameApp',
|
||||||
type: 'String',
|
type: 'String',
|
||||||
description: 'Version app'
|
description: 'Version app'
|
||||||
}, {
|
},
|
||||||
arg: 'serialNumber',
|
|
||||||
type: 'String',
|
|
||||||
description: 'Serial number'
|
|
||||||
}
|
|
||||||
|
|
||||||
],
|
],
|
||||||
returns: {
|
returns: {
|
||||||
|
@ -46,7 +39,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.loginApp = async(ctx, user, password, deviceId, android_id, versionApp, nameApp, options) => {
|
Self.loginApp = async(ctx, user, password, android_id, versionApp, nameApp, options) => {
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
const myOptions = {};
|
const myOptions = {};
|
||||||
if (typeof options == 'object')
|
if (typeof options == 'object')
|
||||||
|
@ -54,14 +47,16 @@ module.exports = Self => {
|
||||||
|
|
||||||
const login = await models.Account.login(ctx, user, password, myOptions);
|
const login = await models.Account.login(ctx, user, password, myOptions);
|
||||||
|
|
||||||
const userId = ctx.req.accessToken.userId;
|
const {id: userId} = await models.VnUser.findOne({
|
||||||
|
where: {
|
||||||
|
name: user
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const resultCheckLogin =
|
const [[{vIsAuthorized, vMessage}]] =
|
||||||
await Self.rawSql('CALL vn.device_checkLogin(?, ?);',
|
await Self.rawSql('CALL vn.device_checkLogin(?, ?);',
|
||||||
[userId, android_id], myOptions);
|
[userId, android_id], myOptions);
|
||||||
|
|
||||||
const [{vIsAuthorized, vMessage}] = resultCheckLogin[0];
|
|
||||||
|
|
||||||
if (!vIsAuthorized)
|
if (!vIsAuthorized)
|
||||||
throw new UserError('Not authorized');
|
throw new UserError('Not authorized');
|
||||||
|
|
||||||
|
@ -69,25 +64,14 @@ module.exports = Self => {
|
||||||
where: {
|
where: {
|
||||||
workerFk: userId
|
workerFk: userId
|
||||||
}
|
}
|
||||||
});
|
}, myOptions);
|
||||||
|
|
||||||
if (!isUserInOperator){
|
if (!isUserInOperator)
|
||||||
await models.Operator.create({ 'workerFk': userId });
|
await models.Operator.create({'workerFk': userId});
|
||||||
|
|
||||||
const getDataUser = await models.Operator.findOne({
|
const serialNumber = (await models.DeviceProduction.findOne({
|
||||||
where: {
|
where: {android_id: android_id}
|
||||||
workerFk: userId
|
}, myOptions))?.serialNumber ?? '';
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const resultDevice = await models.DeviceProduction.findOne({
|
|
||||||
where: {
|
|
||||||
android_id: android_id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (resultDevice)
|
|
||||||
serialNumber = resultDevice.serialNumber ?? '';
|
|
||||||
|
|
||||||
await models.DeviceLog.create({
|
await models.DeviceLog.create({
|
||||||
'android_id': android_id,
|
'android_id': android_id,
|
||||||
|
@ -95,32 +79,45 @@ module.exports = Self => {
|
||||||
'nameApp': nameApp,
|
'nameApp': nameApp,
|
||||||
'versionApp': versionApp,
|
'versionApp': versionApp,
|
||||||
'serialNumber': serialNumber
|
'serialNumber': serialNumber
|
||||||
});
|
}, myOptions);
|
||||||
|
ctx.req.accessToken = {userId};
|
||||||
|
const getDataUser = await models.VnUser.getCurrentUserData(ctx);
|
||||||
|
|
||||||
|
const getDataOperator = await models.Operator.findOne({
|
||||||
|
where: {workerFk: userId},
|
||||||
|
fields: ['numberOfWagons', 'warehouseFk', 'itemPackingTypeFk', 'sectorFk', 'sector',
|
||||||
|
'trainFk', 'train', 'labelerFk', 'printer'],
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
relation: 'sector',
|
||||||
|
scope: {
|
||||||
|
fields: ['warehouseFk', 'description'],
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
relation: 'printer',
|
||||||
|
scope: {
|
||||||
|
fields: ['name'],
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
relation: 'train',
|
||||||
|
scope: {
|
||||||
|
fields: ['name'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
}, myOptions);
|
||||||
|
|
||||||
console.log(vIsAuthorized);
|
const getVersion = await models.MobileAppVersionControl.getVersion(ctx, nameApp);
|
||||||
console.log(vMessage);
|
|
||||||
// const insertDeviceLog = await models.DeviceLog.create(
|
|
||||||
// {
|
|
||||||
// 'android_id': android_id,
|
|
||||||
// 'userFk': userId,
|
|
||||||
// 'versionApp': versionApp,
|
|
||||||
// 'nameApp': nameApp,
|
|
||||||
// 'serialNumber': [serialNumber]
|
|
||||||
// },
|
|
||||||
// options
|
|
||||||
// );
|
|
||||||
|
|
||||||
// const queryDeviceCheck =
|
const combinedResult = {
|
||||||
// `CALL device_checkLogin(?, ?)`;
|
...login,
|
||||||
|
...getDataOperator.__data,
|
||||||
// const [queryDeviceCheckLogin] = await Self.rawSql(queryDeviceCheck, [userId, android_id], options);
|
...getDataUser.__data,
|
||||||
|
...getVersion,
|
||||||
// if (!queryDeviceCheckLogin.vIsAuthorized)
|
message: vMessage,
|
||||||
// throw new UserError('User not authorized');
|
serialNumber,
|
||||||
|
};
|
||||||
// return insertDeviceLog;
|
return combinedResult;
|
||||||
return [];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
const {models} = require('vn-loopback/server/server');
|
||||||
|
|
||||||
|
describe('Account loginApp()', () => {
|
||||||
|
fit('should throw an error when user/password is wrong', async() => {
|
||||||
|
let req = models.Account.loginApp('user', 'pass');
|
||||||
|
|
||||||
|
await expectAsync(req).toBeRejected();
|
||||||
|
});
|
||||||
|
|
||||||
|
fit('should return data from user', async() => {
|
||||||
|
let user = 'employee';
|
||||||
|
let password = 'nightmare';
|
||||||
|
let androidId = 'androidid11234567890';
|
||||||
|
let nameApp = 'warehouse';
|
||||||
|
let versionApp = '10';
|
||||||
|
|
||||||
|
let req = models.Account.loginApp(user, password, androidId, nameApp, versionApp);
|
||||||
|
await expectAsync(req).toBeResolved();
|
||||||
|
});
|
||||||
|
});
|
|
@ -31,6 +31,13 @@
|
||||||
"principalId": "$everyone",
|
"principalId": "$everyone",
|
||||||
"permission": "ALLOW"
|
"permission": "ALLOW"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"property": "loginApp",
|
||||||
|
"accessType": "EXECUTE",
|
||||||
|
"principalType": "ROLE",
|
||||||
|
"principalId": "$everyone",
|
||||||
|
"permission": "ALLOW"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"property": "logout",
|
"property": "logout",
|
||||||
"accessType": "EXECUTE",
|
"accessType": "EXECUTE",
|
||||||
|
|
Loading…
Reference in New Issue