Files
ryanwong a07577bffa day 11
2022-02-06 22:15:10 -05:00

49 lines
1.4 KiB
JavaScript
Executable File

const { SchemaDirectiveVisitor, ApolloError } = require('apollo-server-express');
const { defaultFieldResolver } = require('graphql');
const { errorCodes, errors } = require('../core/strings');
const { GraphqlError, AuthenticationError } = require('../services/ErrorService');
class VerifyUser extends SchemaDirectiveVisitor {
visitFieldDefinition(field) {
const resolver = field.resolve || defaultFieldResolver;
let User;
let Credential;
field.resolve = async (root, args, context, info) => {
const { user, credentialId, db, role } = context;
Credential = await db.credential.getByFields({
status: 1,
id: credentialId,
role_id: role.roleId,
});
if (!Credential) {
throw new ApolloError(errors.ACCOUNT_DOES_NOT_EXISTS, errorCodes.account.ACCOUNT_DOES_NOT_EXISTS);
}
User = await db.user.getByFields({
status: 1,
id: user.id,
});
if (!User) {
throw new ApolloError(errors.ACCOUNT_DOES_NOT_EXISTS, errorCodes.account.ACCOUNT_DOES_NOT_EXISTS);
}
return resolver(
root,
args,
{
...context,
directives: {
...(context.directives || {}),
...(User && Credential ? { verifyUser: { user: JSON.parse(JSON.stringify(User)), credential: JSON.parse(JSON.stringify(Credential)) } } : {}),
},
},
info,
);
};
}
}
module.exports = VerifyUser;