@webresto/graphql 1.3.6 → 1.3.8
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/.gitattributes +2 -0
- package/.gitlab-ci.yml +18 -0
- package/.vscode/extensions.json +5 -0
- package/docs/actions.md +25 -0
- package/docs/authorization.md +215 -0
- package/docs/captcha.md +71 -0
- package/docs/device-id.md +30 -0
- package/docs/messages.md +10 -0
- package/docs/user.md +54 -0
- package/index.d.ts +0 -1
- package/index.js +6 -2
- package/index.ts +2 -2
- package/lib/afterHook.js +8 -0
- package/lib/afterHook.ts +9 -0
- package/lib/bindTranslations.d.ts +1 -0
- package/lib/bindTranslations.js +40 -0
- package/lib/bindTranslations.ts +39 -0
- package/lib/defaults.d.ts +1 -0
- package/lib/defaults.js +49 -10
- package/lib/defaults.ts +55 -0
- package/lib/eventHelper.d.ts +14 -5
- package/lib/eventHelper.js +28 -9
- package/lib/eventHelper.ts +41 -8
- package/lib/getRecomended.d.ts +1 -0
- package/lib/getRecomended.js +29 -0
- package/lib/getRecomended.ts +31 -0
- package/lib/graphqlHelper.d.ts +3 -4
- package/lib/graphqlHelper.js +184 -73
- package/lib/graphqlHelper.ts +329 -186
- package/lib/jwt.d.ts +10 -0
- package/lib/jwt.js +43 -0
- package/lib/jwt.ts +61 -0
- package/package.json +13 -6
- package/src/additionalResolvers.d.ts +72 -9
- package/src/additionalResolvers.js +93 -24
- package/src/additionalResolvers.ts +105 -34
- package/src/graphql.d.ts +5 -3
- package/src/graphql.js +170 -37
- package/src/graphql.ts +210 -60
- package/src/resolvers/bonusProgram.d.ts +32 -0
- package/src/resolvers/bonusProgram.js +65 -0
- package/src/resolvers/bonusProgram.ts +79 -0
- package/src/resolvers/captcha.d.ts +11 -0
- package/src/resolvers/captcha.js +19 -0
- package/src/resolvers/captcha.ts +16 -0
- package/src/resolvers/checkout.d.ts +43 -14
- package/src/resolvers/checkout.js +172 -122
- package/src/resolvers/checkout.ts +218 -142
- package/src/resolvers/dishAndModifier.js +8 -4
- package/src/resolvers/dishAndModifier.ts +4 -0
- package/src/resolvers/error.d.ts +9 -0
- package/src/resolvers/error.js +21 -0
- package/src/resolvers/error.ts +21 -0
- package/src/resolvers/menu.d.ts +9 -0
- package/src/resolvers/menu.js +12 -0
- package/src/resolvers/menu.ts +10 -0
- package/src/resolvers/order.d.ts +527 -0
- package/src/resolvers/order.js +349 -0
- package/src/resolvers/order.ts +435 -0
- package/src/resolvers/paymentMethod.js +7 -3
- package/src/resolvers/paymentMethod.ts +9 -5
- package/src/resolvers/pickupPoint.d.ts +1 -0
- package/src/resolvers/pickupPoint.js +24 -0
- package/src/resolvers/pickupPoint.ts +23 -0
- package/src/resolvers/recomended.d.ts +13 -0
- package/src/resolvers/recomended.js +80 -0
- package/src/resolvers/recomended.ts +86 -0
- package/src/resolvers/restrictions.d.ts +37 -1
- package/src/resolvers/restrictions.js +100 -15
- package/src/resolvers/restrictions.ts +106 -14
- package/src/resolvers/streets.d.ts +1 -1
- package/src/resolvers/streets.js +1 -4
- package/src/resolvers/streets.ts +1 -3
- package/src/resolvers/subscriptions.d.ts +4 -4
- package/src/resolvers/subscriptions.js +49 -12
- package/src/resolvers/subscriptions.ts +59 -14
- package/src/resolvers/telemetry.d.ts +14 -0
- package/src/resolvers/telemetry.js +25 -0
- package/src/resolvers/telemetry.ts +24 -0
- package/src/resolvers/user.d.ts +82 -0
- package/src/resolvers/user.js +416 -0
- package/src/resolvers/user.ts +621 -0
- package/src/resolvers/userLocation.d.ts +53 -0
- package/src/resolvers/userLocation.js +74 -0
- package/src/resolvers/userLocation.ts +125 -0
- package/src/resolvers/userOTPrequest.d.ts +21 -0
- package/src/resolvers/userOTPrequest.js +57 -0
- package/src/resolvers/userOTPrequest.ts +75 -0
- package/test/e2e_helper.js +157 -0
- package/test/e2e_helper.ts +212 -0
- package/test/fixture/config/i18n.js +7 -20
- package/test/fixture/config/locales/de.json +1 -0
- package/test/fixture/config/locales/en.json +10 -0
- package/test/fixture/config/locales/es.json +3 -0
- package/test/fixture/config/locales/fr.json +1 -0
- package/test/fixture/config/log.js +1 -1
- package/test/fixture/package.json +5 -6
- package/test/fixture/patches/rttc+10.0.1.patch +17 -0
- package/test/integration/captcha.test.js +20 -0
- package/test/integration/captcha.test.ts +25 -0
- package/test/integration/dish.test.js +35 -0
- package/test/integration/dish.test.ts +43 -0
- package/test/integration/graphql.test.js +5 -2
- package/test/integration/graphql.test.ts +2 -4
- package/test/integration/images.test.js +35 -0
- package/test/integration/images.test.ts +40 -0
- package/test/integration/locale.test.js +26 -0
- package/test/integration/locale.test.ts +32 -0
- package/test/integration/order.test.js +56 -43
- package/test/integration/order.test.ts +59 -59
- package/test/integration/subscriptions.test.js +136 -0
- package/test/integration/subscriptions.test.ts +162 -0
- package/test/integration/user.test.js +249 -0
- package/test/integration/user.test.ts +299 -0
- package/test/unit/first.test.js +4 -2
- package/test/unit/first.test.ts +1 -1
- package/test/unit/get-recomended.test.js +56 -0
- package/test/unit/get-recomended.test.ts +63 -0
- package/translations/de.json +2 -0
- package/translations/en.json +3 -0
- package/translations/es.json +3 -0
- package/translations/fr.json +2 -0
- package/translations/ru.json +36 -0
- package/tsconfig.json +20 -5
- package/types/global.d.ts +30 -0
- package/types/global.js +2 -0
- package/types/global.ts +31 -0
- package/types/primitives.d.ts +19 -0
- package/types/references.d.ts +1 -0
- package/types/restoGraphQLConfig.d.ts +13 -0
- package/lib/afterHook.ts___graphql-transport-ws +0 -138
- package/lib/afterHook.ts___graphql-ws +0 -133
- package/lib/errorWrapper.d.ts +0 -4
- package/lib/errorWrapper.js +0 -13
- package/lib/errorWrapper.ts +0 -12
- package/notes.md +0 -1976
- package/src/resolvers/cart.d.ts +0 -343
- package/src/resolvers/cart.js +0 -196
- package/src/resolvers/cart.ts +0 -277
- package/test/fixture/config/connections.js +0 -9
- package/test/integration/sails_not_crash.test.js +0 -3
- package/test/integration/sails_not_crash.test.ts +0 -3
package/lib/jwt.d.ts
ADDED
package/lib/jwt.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JWTAuth = void 0;
|
|
4
|
+
const jwt = require("jsonwebtoken");
|
|
5
|
+
class JWTAuth {
|
|
6
|
+
static sign(authData) {
|
|
7
|
+
return jwt.sign({
|
|
8
|
+
data: authData
|
|
9
|
+
}, process.env.JWT_SECRET, { expiresIn: parseInt(process.env.JWT_TOKEN_EXPIRES_IN) ?? 15 * 24 * 60 * 60 });
|
|
10
|
+
}
|
|
11
|
+
static async verify(token) {
|
|
12
|
+
if (!token) {
|
|
13
|
+
throw `Verify JWT token is: ${token}`;
|
|
14
|
+
}
|
|
15
|
+
let decoded;
|
|
16
|
+
try {
|
|
17
|
+
let jwtData = (jwt.verify(token, process.env.JWT_SECRET));
|
|
18
|
+
decoded = jwtData.data;
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
sails.log.error(`JWT verify error: `, err);
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
if (decoded.userId && decoded.deviceId && decoded.sessionId) {
|
|
25
|
+
if (await User.findOne({ id: decoded.userId })) {
|
|
26
|
+
let device = await UserDevice.findOne({ where: { id: decoded.deviceId, user: decoded.userId, sessionId: decoded.sessionId } });
|
|
27
|
+
if (!device || device.isLogined !== true) {
|
|
28
|
+
throw `Logined device not found`;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return decoded;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
throw `no user with id ${decoded.userId}`;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
throw `JWT decoded user or device not found`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.JWTAuth = JWTAuth;
|
package/lib/jwt.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import User from "@webresto/core/models/User"
|
|
2
|
+
import UserDevice from "@webresto/core/models/UserDevice"
|
|
3
|
+
|
|
4
|
+
import * as jwt from 'jsonwebtoken'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
// GEN SECRET
|
|
9
|
+
type AuthData = {
|
|
10
|
+
userId: string
|
|
11
|
+
deviceId: string
|
|
12
|
+
sessionId: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type JWTData = {
|
|
16
|
+
data: AuthData
|
|
17
|
+
iat: number
|
|
18
|
+
exp: number
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
export class JWTAuth {
|
|
23
|
+
public static sign(authData: AuthData): string {
|
|
24
|
+
return jwt.sign({
|
|
25
|
+
data: authData
|
|
26
|
+
}, process.env.JWT_SECRET, { expiresIn: parseInt(process.env.JWT_TOKEN_EXPIRES_IN) ?? 15 * 24 * 60 * 60 });
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public static async verify(token: string): Promise<AuthData>{
|
|
31
|
+
|
|
32
|
+
if (!token) {
|
|
33
|
+
throw `Verify JWT token is: ${token}`
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
let decoded: AuthData;
|
|
37
|
+
try {
|
|
38
|
+
let jwtData = (jwt.verify(token, process.env.JWT_SECRET)) as JWTData
|
|
39
|
+
decoded = jwtData.data
|
|
40
|
+
} catch(err) {
|
|
41
|
+
sails.log.error(`JWT verify error: `, err)
|
|
42
|
+
throw err
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if(decoded.userId && decoded.deviceId && decoded.sessionId) {
|
|
46
|
+
if (await User.findOne({id: decoded.userId})) {
|
|
47
|
+
|
|
48
|
+
let device = await UserDevice.findOne({where: {id: decoded.deviceId, user: decoded.userId, sessionId: decoded.sessionId}});
|
|
49
|
+
if(!device || device.isLogined !== true) {
|
|
50
|
+
throw `Logined device not found`
|
|
51
|
+
} else {
|
|
52
|
+
return decoded;
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
throw `no user with id ${decoded.userId}`
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
throw `JWT decoded user or device not found`
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
package/package.json
CHANGED
|
@@ -2,29 +2,36 @@
|
|
|
2
2
|
"author": {
|
|
3
3
|
"name": "Webresto"
|
|
4
4
|
},
|
|
5
|
-
"bundleDependencies":
|
|
5
|
+
"bundleDependencies": [],
|
|
6
6
|
"dependencies": {
|
|
7
|
+
"accept-language-parser": "^1.5.0",
|
|
7
8
|
"apollo-fetch": "^0.7.0",
|
|
8
|
-
"apollo-server": "^2.
|
|
9
|
+
"apollo-server": "^2.26.1",
|
|
9
10
|
"dataloader": "^2.0.0",
|
|
11
|
+
"fix-esm": "^1.0.1",
|
|
10
12
|
"graphql": "^15.5.0",
|
|
13
|
+
"jsonwebtoken": "^9.0.0",
|
|
11
14
|
"waterline-criteria": "^2.0.0"
|
|
12
15
|
},
|
|
13
16
|
"devDependencies": {
|
|
14
17
|
"@42pub/typed-sails": "^1.0.0",
|
|
18
|
+
"@apollo/client": "^3.7.3",
|
|
19
|
+
"@types/accept-language-parser": "^1.5.3",
|
|
15
20
|
"@types/bluebird": "^3.5.32",
|
|
16
21
|
"@types/bluebird-global": "^3.5.12",
|
|
17
22
|
"@types/body-parser": "^1.19.0",
|
|
18
23
|
"@types/chai": "^4.2.11",
|
|
19
24
|
"@types/express": "^4.17.7",
|
|
20
25
|
"@types/faker": "^4.1.12",
|
|
26
|
+
"@types/jsonwebtoken": "^9.0.0",
|
|
21
27
|
"@types/lodash": "^4.14.157",
|
|
22
28
|
"@types/mocha": "^8.0.2",
|
|
23
29
|
"@types/node": "^14.14.35",
|
|
24
|
-
"@types/uuid": "^8.0.0",
|
|
25
30
|
"@types/waterline": "^0.13.4",
|
|
26
|
-
"@webresto/core": "^1.
|
|
31
|
+
"@webresto/core": "^1.3.27-alpha",
|
|
27
32
|
"chai": "^4.2.0",
|
|
33
|
+
"cross-fetch": "^3.1.5",
|
|
34
|
+
"crypto-puzzle": "^4.0.0",
|
|
28
35
|
"dotenv": "^16.0.0",
|
|
29
36
|
"faker": "^4.1.0",
|
|
30
37
|
"mocha": "^8.1.1",
|
|
@@ -56,9 +63,9 @@
|
|
|
56
63
|
},
|
|
57
64
|
"scripts": {
|
|
58
65
|
"gendoc": "apidoc -o apidoc/ && apidoc-markdown2 -p apidoc -o docs/api.md",
|
|
59
|
-
"test": "mocha -r ts-node/register test/bootstrap.ts './test/{,!(fixture)/**}/*.test.ts' --exit",
|
|
66
|
+
"test": "mocha -r ts-node/register test/bootstrap.ts './test/{,!(fixture)/**}/*.test.ts' --exit --grep=${PATTERN}",
|
|
60
67
|
"test:js": "mocha test/bootstrap.js './test/{,!(fixture)/**}/*.test.js' --exit",
|
|
61
68
|
"test:init": "cd ./test/fixture && npm i --no-package-lock --prefix ./ && cd -"
|
|
62
69
|
},
|
|
63
|
-
"version": "1.3.
|
|
70
|
+
"version": "1.3.8"
|
|
64
71
|
}
|
|
@@ -1,25 +1,88 @@
|
|
|
1
1
|
export declare const additionalResolver: {
|
|
2
2
|
GroupModifier: {
|
|
3
|
-
|
|
3
|
+
modifierId: (parent: {
|
|
4
|
+
modifierId?: string;
|
|
5
|
+
id?: string; /** here id means rmsID */
|
|
6
|
+
}, args: any, context: {
|
|
7
|
+
dataloaders: WeakMap<object, any>;
|
|
8
|
+
}, info: {
|
|
9
|
+
fieldNodes: any;
|
|
10
|
+
}) => Promise<any>;
|
|
11
|
+
group: (parent: {
|
|
12
|
+
modifierId?: string;
|
|
13
|
+
id?: string; /** here id means rmsID */
|
|
14
|
+
}, args: any, context: {
|
|
15
|
+
dataloaders: WeakMap<object, any>;
|
|
16
|
+
}, info: {
|
|
17
|
+
fieldNodes: any;
|
|
18
|
+
}) => Promise<any>;
|
|
4
19
|
};
|
|
5
20
|
Modifier: {
|
|
6
|
-
|
|
21
|
+
modifierId: (parent: {
|
|
22
|
+
modifierId?: string;
|
|
23
|
+
id?: string; /** here id means rmsID */
|
|
24
|
+
}, args: any, context: {
|
|
25
|
+
dataloaders: WeakMap<object, any>;
|
|
26
|
+
}, info: {
|
|
27
|
+
fieldNodes: any;
|
|
28
|
+
}) => Promise<any>;
|
|
29
|
+
dish: (parent: {
|
|
30
|
+
modifierId?: string;
|
|
31
|
+
id?: string; /** here id means rmsID */
|
|
32
|
+
}, args: any, context: {
|
|
33
|
+
dataloaders: WeakMap<object, any>;
|
|
34
|
+
}, info: {
|
|
35
|
+
fieldNodes: any;
|
|
36
|
+
}) => Promise<any>;
|
|
7
37
|
};
|
|
8
38
|
OrderModifier: {
|
|
9
|
-
dish: (parent:
|
|
10
|
-
|
|
39
|
+
dish: (parent: {
|
|
40
|
+
id: string;
|
|
41
|
+
modifierId: string;
|
|
42
|
+
}, args: any, context: any, info: any) => Promise<any>;
|
|
43
|
+
group: (parent: {
|
|
44
|
+
id: string;
|
|
45
|
+
groupId: string;
|
|
46
|
+
}, args: any) => Promise<any>;
|
|
11
47
|
};
|
|
12
48
|
Dish: {
|
|
13
|
-
parentGroup: (parent:
|
|
14
|
-
|
|
49
|
+
parentGroup: (parent: {
|
|
50
|
+
parentGroup: any;
|
|
51
|
+
}, args: any, context: {
|
|
52
|
+
dataloaders: WeakMap<object, any>;
|
|
53
|
+
}, info: {
|
|
54
|
+
fieldNodes: any;
|
|
55
|
+
}) => Promise<any>;
|
|
56
|
+
images: (parent: {
|
|
57
|
+
id: any;
|
|
58
|
+
}, args: any, context: {
|
|
59
|
+
dataloaders: WeakMap<object, any>;
|
|
60
|
+
}, info: {
|
|
61
|
+
fieldNodes: any;
|
|
62
|
+
}) => Promise<any>;
|
|
15
63
|
};
|
|
16
64
|
Group: {
|
|
17
|
-
parentGroup: (parent:
|
|
65
|
+
parentGroup: (parent: {
|
|
66
|
+
parentGroup: any;
|
|
67
|
+
}, args: any, context: {
|
|
68
|
+
dataloaders: WeakMap<object, any>;
|
|
69
|
+
}, info: {
|
|
70
|
+
fieldNodes: any;
|
|
71
|
+
}) => Promise<any>;
|
|
18
72
|
};
|
|
19
73
|
Order: {
|
|
20
|
-
dishes: (parent:
|
|
74
|
+
dishes: (parent: {
|
|
75
|
+
dishes: any;
|
|
76
|
+
id: any;
|
|
77
|
+
}, args: any, context: any, info: any) => Promise<any>;
|
|
21
78
|
};
|
|
22
79
|
OrderDish: {
|
|
23
|
-
dish: (parent:
|
|
80
|
+
dish: (parent: {
|
|
81
|
+
dish: any;
|
|
82
|
+
}, args: any, context: {
|
|
83
|
+
dataloaders: WeakMap<object, any>;
|
|
84
|
+
}, info: {
|
|
85
|
+
fieldNodes: any;
|
|
86
|
+
}) => Promise<any>;
|
|
24
87
|
};
|
|
25
88
|
};
|
|
@@ -4,8 +4,29 @@ exports.additionalResolver = void 0;
|
|
|
4
4
|
const DataLoader = require('dataloader');
|
|
5
5
|
exports.additionalResolver = {
|
|
6
6
|
GroupModifier: {
|
|
7
|
+
modifierId: async (parent, args, context, info) => {
|
|
8
|
+
if (parent.modifierId)
|
|
9
|
+
return parent.modifierId;
|
|
10
|
+
if (!context.dataloaders)
|
|
11
|
+
context.dataloaders = new WeakMap();
|
|
12
|
+
const dataloaders = context.dataloaders;
|
|
13
|
+
let dl = dataloaders.get(info.fieldNodes);
|
|
14
|
+
if (!dl) {
|
|
15
|
+
dl = new DataLoader(async (id) => {
|
|
16
|
+
const rows = await Group.find({
|
|
17
|
+
rmsId: id, isDeleted: false
|
|
18
|
+
});
|
|
19
|
+
const sortedInIdsOrder = id.map((id) => rows.find(x => {
|
|
20
|
+
return x.rmsId === id;
|
|
21
|
+
}));
|
|
22
|
+
return sortedInIdsOrder;
|
|
23
|
+
});
|
|
24
|
+
dataloaders.set(info.fieldNodes, dl);
|
|
25
|
+
}
|
|
26
|
+
return (await dl.load(parent.id)).id;
|
|
27
|
+
},
|
|
7
28
|
group: async (parent, args, context, info) => {
|
|
8
|
-
if (!parent.modifierId)
|
|
29
|
+
if (!parent.modifierId && !parent.id)
|
|
9
30
|
return;
|
|
10
31
|
if (!context.dataloaders)
|
|
11
32
|
context.dataloaders = new WeakMap();
|
|
@@ -13,43 +34,85 @@ exports.additionalResolver = {
|
|
|
13
34
|
let dl = dataloaders.get(info.fieldNodes);
|
|
14
35
|
if (!dl) {
|
|
15
36
|
dl = new DataLoader(async (ids) => {
|
|
16
|
-
const rows = await Group.find({
|
|
17
|
-
|
|
37
|
+
const rows = await Group.find({
|
|
38
|
+
where: {
|
|
39
|
+
or: [{ id: ids, isDeleted: false }, { rmsId: ids, isDeleted: false }]
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
const sortedInIdsOrder = ids.map((id) => rows.find(x => x.id === id));
|
|
18
43
|
return sortedInIdsOrder;
|
|
19
44
|
});
|
|
20
45
|
dataloaders.set(info.fieldNodes, dl);
|
|
21
46
|
}
|
|
22
|
-
return dl.load(parent.modifierId);
|
|
23
|
-
}
|
|
47
|
+
return await dl.load(parent.modifierId ? parent.modifierId : parent.id);
|
|
48
|
+
}
|
|
24
49
|
},
|
|
25
50
|
Modifier: {
|
|
51
|
+
modifierId: async (parent, args, context, info) => {
|
|
52
|
+
if (parent.modifierId)
|
|
53
|
+
return parent.modifierId;
|
|
54
|
+
if (!context.dataloaders)
|
|
55
|
+
context.dataloaders = new WeakMap();
|
|
56
|
+
const dataloaders = context.dataloaders;
|
|
57
|
+
let dl = dataloaders.get(info.fieldNodes);
|
|
58
|
+
if (!dl) {
|
|
59
|
+
dl = new DataLoader(async (id) => {
|
|
60
|
+
const rows = await Dish.find({
|
|
61
|
+
rmsId: id, balance: { "!=": 0 }, isDeleted: false
|
|
62
|
+
});
|
|
63
|
+
const sortedInIdsOrder = id.map((id) => rows.find(x => {
|
|
64
|
+
return x.rmsId === id;
|
|
65
|
+
}));
|
|
66
|
+
return sortedInIdsOrder;
|
|
67
|
+
});
|
|
68
|
+
dataloaders.set(info.fieldNodes, dl);
|
|
69
|
+
}
|
|
70
|
+
return (await dl.load(parent.id)).id;
|
|
71
|
+
},
|
|
26
72
|
dish: async (parent, args, context, info) => {
|
|
27
|
-
if (!parent.modifierId)
|
|
73
|
+
if (!parent.modifierId && !parent.id)
|
|
28
74
|
return;
|
|
29
75
|
if (!context.dataloaders)
|
|
30
76
|
context.dataloaders = new WeakMap();
|
|
31
77
|
const dataloaders = context.dataloaders;
|
|
32
78
|
let dl = dataloaders.get(info.fieldNodes);
|
|
33
79
|
if (!dl) {
|
|
34
|
-
dl = new DataLoader(async (
|
|
35
|
-
const rows = await Dish.find({
|
|
36
|
-
|
|
80
|
+
dl = new DataLoader(async (id) => {
|
|
81
|
+
const rows = await Dish.find({ where: { or: [
|
|
82
|
+
{ id: id, balance: { "!=": 0 }, isDeleted: false },
|
|
83
|
+
{ rmsId: id, balance: { "!=": 0 }, isDeleted: false }
|
|
84
|
+
] }
|
|
85
|
+
});
|
|
86
|
+
const sortedInIdsOrder = id.map((id) => rows.find(x => {
|
|
87
|
+
return x.id === id ? x.id === id : x.rmsId === id ? x.rmsId === id : false;
|
|
88
|
+
}));
|
|
37
89
|
return sortedInIdsOrder;
|
|
38
90
|
});
|
|
39
|
-
// ложим инстанс дата-лоадера в WeakMap для повторного использования
|
|
40
91
|
dataloaders.set(info.fieldNodes, dl);
|
|
41
92
|
}
|
|
42
|
-
|
|
43
|
-
return dl.load(parent.modifierId);
|
|
44
|
-
// return await Dish.findOne({id: parent.modifierId}).populateAll();
|
|
93
|
+
return await dl.load(parent.modifierId ? parent.modifierId : parent.id);
|
|
45
94
|
}
|
|
46
95
|
},
|
|
47
96
|
OrderModifier: {
|
|
48
97
|
dish: async (parent, args, context, info) => {
|
|
49
|
-
|
|
98
|
+
if (!parent.id && !parent.modifierId)
|
|
99
|
+
return null;
|
|
100
|
+
return (await Dish.find({ where: { or: [
|
|
101
|
+
{ id: parent.id, balance: { "!=": 0 }, isDeleted: false },
|
|
102
|
+
{ rmsId: parent.id, balance: { "!=": 0 }, isDeleted: false }
|
|
103
|
+
] }
|
|
104
|
+
// @ts-ignore //TODO: Deprecated populateAll
|
|
105
|
+
}).populateAll())[0];
|
|
50
106
|
},
|
|
51
107
|
group: async (parent, args) => {
|
|
52
|
-
|
|
108
|
+
if (!parent.id && !parent.groupId)
|
|
109
|
+
return null;
|
|
110
|
+
return (await Group.find({ where: {
|
|
111
|
+
or: [{ id: parent.groupId, isDeleted: false }, { rmsId: parent.id, isDeleted: false }]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// @ts-ignore //TODO: Deprecated populateAll
|
|
115
|
+
).populateAll())[0];
|
|
53
116
|
}
|
|
54
117
|
},
|
|
55
118
|
Dish: {
|
|
@@ -65,14 +128,20 @@ exports.additionalResolver = {
|
|
|
65
128
|
}
|
|
66
129
|
let dl = dataloaders.get(info.fieldNodes);
|
|
67
130
|
if (!dl) {
|
|
68
|
-
dl = new DataLoader(async (
|
|
69
|
-
return
|
|
131
|
+
dl = new DataLoader(async (ids) => {
|
|
132
|
+
// Waterline can return data not by ids array sorting
|
|
133
|
+
return (await Group.find(ids)).sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id));
|
|
70
134
|
});
|
|
71
135
|
dataloaders.set(info.fieldNodes, dl);
|
|
72
136
|
}
|
|
73
137
|
return await dl.load(parent.parentGroup);
|
|
74
138
|
},
|
|
75
139
|
images: async (parent, args, context, info) => {
|
|
140
|
+
const sortImages = (images) => {
|
|
141
|
+
return images.sort((a, b) => {
|
|
142
|
+
return (+new Date(b.uploadDate) - +new Date(a.uploadDate));
|
|
143
|
+
});
|
|
144
|
+
};
|
|
76
145
|
if (!parent.id)
|
|
77
146
|
return;
|
|
78
147
|
if (!context.dataloaders)
|
|
@@ -82,12 +151,12 @@ exports.additionalResolver = {
|
|
|
82
151
|
if (!dl) {
|
|
83
152
|
dl = new DataLoader(async (ids) => {
|
|
84
153
|
const rows = await Dish.find({ id: ids }).populate('images');
|
|
85
|
-
const images = ids.map(id =>
|
|
154
|
+
const images = ids.map((id) => rows.find(x => x.id === id)?.images);
|
|
86
155
|
return images;
|
|
87
156
|
});
|
|
88
157
|
dataloaders.set(info.fieldNodes, dl);
|
|
89
158
|
}
|
|
90
|
-
return await dl.load(parent.id);
|
|
159
|
+
return sortImages(await dl.load(parent.id));
|
|
91
160
|
}
|
|
92
161
|
},
|
|
93
162
|
Group: {
|
|
@@ -103,8 +172,8 @@ exports.additionalResolver = {
|
|
|
103
172
|
}
|
|
104
173
|
let dl = dataloaders.get(info.fieldNodes);
|
|
105
174
|
if (!dl) {
|
|
106
|
-
dl = new DataLoader(async (
|
|
107
|
-
return await Group.find(id);
|
|
175
|
+
dl = new DataLoader(async (ids) => {
|
|
176
|
+
return (await Group.find(ids)).sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id));
|
|
108
177
|
});
|
|
109
178
|
dataloaders.set(info.fieldNodes, dl);
|
|
110
179
|
}
|
|
@@ -131,12 +200,12 @@ exports.additionalResolver = {
|
|
|
131
200
|
}
|
|
132
201
|
let dl = dataloaders.get(info.fieldNodes);
|
|
133
202
|
if (!dl) {
|
|
134
|
-
dl = new DataLoader(async (
|
|
135
|
-
return await Dish.find(
|
|
203
|
+
dl = new DataLoader(async (ids) => {
|
|
204
|
+
return (await Dish.find(ids)).sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id));
|
|
136
205
|
});
|
|
137
206
|
dataloaders.set(info.fieldNodes, dl);
|
|
138
207
|
}
|
|
139
208
|
return await dl.load(parent.dish);
|
|
140
209
|
},
|
|
141
|
-
}
|
|
210
|
+
}
|
|
142
211
|
};
|