Skip to content
This repository was archived by the owner on Oct 26, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ declare module 'neo4j-graphql-js' {

type Neo4jContext<T = Record<string, any>> = T & {
driver: Driver;
metadata?: { [key: string]: string }
};

/**
Expand Down
89 changes: 54 additions & 35 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ export async function neo4jgraphql(
);
}

const requestId = context?.requestId || context?.metadata?.requestId;
const metadata = { ...context?.metadata, requestId };

let query;
let cypherParams;

Expand Down Expand Up @@ -128,15 +131,21 @@ export async function neo4jgraphql(

try {
if (isMutationOperation) {
result = await session.writeTransaction(async tx => {
const result = await tx.run(query, cypherParams);
return extractQueryResult(result, resolveInfo.returnType);
});
result = await session.writeTransaction(
async tx => {
const result = await tx.run(query, cypherParams);
return extractQueryResult(result, resolveInfo.returnType);
},
{ metadata }
);
} else {
result = await session.readTransaction(async tx => {
const result = await tx.run(query, cypherParams);
return extractQueryResult(result, resolveInfo.returnType);
});
result = await session.readTransaction(
async tx => {
const result = await tx.run(query, cypherParams);
return extractQueryResult(result, resolveInfo.returnType);
},
{ metadata }
);
}
} finally {
await session.close();
Expand Down Expand Up @@ -322,18 +331,23 @@ export const assertSchema = ({
sessionParams = {}
}) => {
const statement = schemaAssert({ schema, dropExisting });
const metadata = sessionParams?.metadata || {};
const executeQuery = driver => {
const session = driver.session(sessionParams);
return session
.writeTransaction(tx =>
tx.run(statement).then(result => {
if (debug === true) {
const recordsJSON = result.records.map(record => record.toObject());
recordsJSON.sort((lhs, rhs) => lhs.label < rhs.label);
console.table(recordsJSON);
}
return result;
})
.writeTransaction(
tx =>
tx.run(statement).then(result => {
if (debug === true) {
const recordsJSON = result.records.map(record =>
record.toObject()
);
recordsJSON.sort((lhs, rhs) => lhs.label < rhs.label);
console.table(recordsJSON);
}
return result;
}),
{ metadata }
)
.finally(() => session.close());
};
Expand All @@ -348,22 +362,25 @@ export const searchSchema = async ({
dropExisting = true
}) => {
const session = driver.session(sessionParams);
const metadata = sessionParams?.metadata || {};
// drop all search indexes, given they cannot be updated via a second CALL to createNodeIndex
const dropStatement = `
CALL db.indexes() YIELD name, provider WHERE provider = "fulltext-1.0"
CALL db.index.fulltext.drop(name)
RETURN TRUE
`;
if (dropExisting) {
const dropResult = await session.writeTransaction(tx =>
tx.run(dropStatement).then(result => {
if (debug === true) {
console.log(
`\n[searchSchema] Search indexes dropped using Cypher:${dropStatement}`
);
}
return true;
})
const dropResult = await session.writeTransaction(
tx =>
tx.run(dropStatement).then(result => {
if (debug === true) {
console.log(
`\n[searchSchema] Search indexes dropped using Cypher:${dropStatement}`
);
}
return true;
}),
{ metadata }
);
if (!dropResult) {
await session.close();
Expand All @@ -374,15 +391,17 @@ export const searchSchema = async ({
const createStatement = schemaSearch({ schema });
if (createStatement) {
return await session
.writeTransaction(tx =>
tx.run(createStatement).then(result => {
if (debug === true) {
console.log(
`[searchSchema] Search indexes created using Cypher:\n${createStatement}\n`
);
}
return true;
})
.writeTransaction(
tx =>
tx.run(createStatement).then(result => {
if (debug === true) {
console.log(
`[searchSchema] Search indexes created using Cypher:\n${createStatement}\n`
);
}
return true;
}),
{ metadata }
)
.finally(() => session.close());
}
Expand Down