-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathdefaultResolver.js
42 lines (31 loc) · 1.11 KB
/
defaultResolver.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
const { ForbiddenError } = require('apollo-server-express')
const { defaultErrorHandler } = require('./defaultErrorHandler')
const args2request = require('./args2request')
const defaultOptions = {
errorHandler: defaultErrorHandler
}
function defaultResolver(usecase, { errorHandler } = defaultOptions) {
const handleError = errorHandler ?? defaultErrorHandler
return async function resolver(_parent, args, context, _info) {
const uc = usecase()
/* Authorization */
const hasAccess = await uc.authorize(context.user)
if (hasAccess === false) {
// eslint-disable-next-line no-console
console.info(uc.auditTrail)
throw new ForbiddenError()
}
/* Execution */
const request = args2request(args, uc)
const response = await uc.run(request)
/* Audit */
// eslint-disable-next-line no-console
console.info(uc.auditTrail)
/* Response */
if (response.isErr) {
return await handleError(response)
}
return response.ok
}
}
module.exports = defaultResolver