@rxdi/neo4j
TypeScript icon, indicating that this package has built-in type declarations

0.7.178 • Public • Published

@rxdi Neo4J Module

Build Status

For questions/issues you can write ticket here
This module is intended to be used with rxdi

With this module by just defining your types and adding them inside types property you will have CRUD operations generated automatically

This module with the help of neo4j-graphql converts GraphqlSchema queries to Cypher Neo4J queries

Why is this so cool ? :)) Because while you are writing your schema you can have also queries and mutations prepared for you to execute inside Neo4J Graph

Installation and basic examples:

To install this module, run:
$ npm install @rxdi/neo4j --save

Consuming @rxdi/neo4j

Simple approach
import { Module, CoreModule } from '@gapi/core';
import { Neo4JModule } from '@rxdi/neo4j';
import { UserType } from './user.type';

@Module({
 imports: [
  CoreModule.forRoot(),
  Neo4JModule.forRoot({
   password: '12345678',
   username: 'neo4j',
   address: 'bolt://localhost:7687',
  }),
 ],
})
export class AppModule {}
More complex Approach
import { Module, CoreModule } from '@gapi/core';
import { Neo4JModule, UtilService } from '@rxdi/neo4j';
import { GraphQLSchema } from 'graphql';

@Module({
 imports: [
  Neo4JModule.forRoot({
   schemaOverride(schema: GraphQLSchema) {
    const neo4JUtils = Container.get(UtilService);
    neo4JUtils.validateSchema(schema);

    const typeDefs = neo4JUtils.generateTypeDefs(schema);

    const neoSchema = new Neo4jGraphQL({
     typeDefs,
     driver,
     assumeValidSDL: true,
    });
    return neoSchema;
   },
  }),
 ],
})
export class AppModule {}
Import inside AppModule or CoreModule
import { Module, CoreModule } from '@gapi/core';
import { VoyagerModule } from '@gapi/voyager';
import { Neo4JModule } from '@rxdi/neo4j';
import { UserContext } from './types/user/user-context.type';
import { User } from './types/user/user.type';
import { Message } from './types/message/message.type';
import { Channel } from './types/channel/channel.type';
import { AttachmentType } from './types/attachment/attachment.type';
import { ToUpperCaseDirective } from './core/directives/toUppercase.directive';

@Module({
 imports: [
  CoreModule.forRoot({
   graphql: { directives: [ToUpperCaseDirective] },
  }),
  Neo4JModule.forRoot({
   username: 'neo4j',
   password: '12345678',
   address: 'bolt://localhost:7687',
  }),
  // Optional voyager but you will not regret to have mind mapping for all your graph api :) npm i @gapi/voyager
  VoyagerModule.forRoot({
   endpointUrl: '/graphql',
   path: '/voyager',
  }),
 ],
})
export class AppModule {}
Graphql Directive
import { GraphQLCustomDirective } from '@gapi/core';
import { DirectiveLocation } from 'graphql';

export const ToUpperCaseDirective = new GraphQLCustomDirective<string>({
 name: 'toUpperCase',
 description: 'change the case of a string to uppercase',
 locations: [DirectiveLocation.FIELD],
 resolve: async (resolve) => (await resolve()).toUpperCase(),
});

TODO: Better documentation...

Enjoy ! :)

Readme

Keywords

none

Package Sidebar

Install

npm i @rxdi/neo4j

Weekly Downloads

336

Version

0.7.178

License

MIT

Unpacked Size

19.2 kB

Total Files

10

Last publish

Collaborators

  • gapi
  • rxdi