diff --git a/backend/src/schema/resolvers/inviteCodes.js b/backend/src/schema/resolvers/inviteCodes.js index 91148a08d..35c8c6ece 100644 --- a/backend/src/schema/resolvers/inviteCodes.js +++ b/backend/src/schema/resolvers/inviteCodes.js @@ -1,5 +1,6 @@ import generateInviteCode from './helpers/generateInviteCode' import Resolver from './helpers/Resolver' +import { validateInviteCode } from './transactions/inviteCodes' const uniqueInviteCode = async (session, code) => { return session.readTransaction(async (txc) => { @@ -36,29 +37,10 @@ export default { }, isValidInviteCode: async (_parent, args, context, _resolveInfo) => { const { code } = args - if (!code) return false const session = context.driver.session() - const readTxResultPromise = session.readTransaction(async (txc) => { - const result = await txc.run( - `MATCH (ic:InviteCode { code: toUpper($code) }) - RETURN - CASE - WHEN ic.expiresAt IS NULL THEN true - WHEN datetime(ic.expiresAt) >= datetime() THEN true - ELSE false END AS result`, - { - code, - }, - ) - return result.records.map((record) => record.get('result')) - }) - try { - const txResult = await readTxResultPromise - return !!txResult[0] - } finally { - session.close() - } - }, + if (!code) return false + return await validateInviteCode(session, code) + } }, Mutation: { GenerateInviteCode: async (_parent, args, context, _resolveInfo) => { diff --git a/backend/src/schema/resolvers/transactions/inviteCodes.js b/backend/src/schema/resolvers/transactions/inviteCodes.js new file mode 100644 index 000000000..0ae2e9ad3 --- /dev/null +++ b/backend/src/schema/resolvers/transactions/inviteCodes.js @@ -0,0 +1,22 @@ +export async function validateInviteCode(session, inviteCode) { + const readTxResultPromise = session.readTransaction(async (txc) => { + const result = await txc.run( + `MATCH (ic:InviteCode { code: toUpper($inviteCode) }) + RETURN + CASE + WHEN ic.expiresAt IS NULL THEN true + WHEN datetime(ic.expiresAt) >= datetime() THEN true + ELSE false END AS result`, + { + inviteCode, + }, + ) + return result.records.map((record) => record.get('result')) + }) + try { + const txResult = await readTxResultPromise + return !!txResult[0] + } finally { + session.close() + } +}