0.1.6 • Published 2 years ago
@koakh/nestjs-surrealdb v0.1.6
README
surrealdb nestjs 9 dynamic module wrapper on top of surrealdb.js driver, with DataLoaders, Subscriptions and BaseClasses to generate CRUD from simple DTOs and using Schemaless SurrealDb Scheme.....
Create a new NestJs Application
Setting up a new project is quite simple with the Nest CLI. With npm installed, you can create a new Nest project with the following commands in your OS terminal:
$ nest new surrealdb-graphql
? Which package manager would you ❤️ to use?
npm
❯ yarn
pnpm
Installing the required packages:
$ cd tutorial-graphql
$ yarn add @nestjs/graphql @nestjs/apollo @nestjs/config apollo-server-express graphql graphql-subscriptions graphql-query-complexity @koakh/nestjs-surrealdb
CleanUp non used Files
# remove unused files
$ rm src/app.controller.spec.ts src/app.controller.ts src/app.service.ts
Add .env File
.env
GRAPHQL_SERVER_PORT="3030"
GRAPHQL_AUTO_SCHEMA_FILE='./schema.gql'
SURREALDB_URL="http://127.0.0.1:8000/rpc"
SURREALDB_NAMESPACE="test"
SURREALDB_DATABASE="test"
SURREALDB_USER="root"
SURREALDB_PASS="root"
Change AppModule
configure ConfigModule
, SurrealDbModule
and GraphQLModule
replace src/app.module.ts
with
import { SurrealDbModule } from '@koakh/nestjs-surrealdb';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { GraphQLModule } from '@nestjs/graphql';
import { join } from 'path';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
SurrealDbModule.forRootAsync(SurrealDbModule, {
useFactory: async (configService: ConfigService) => ({
url: configService.get('SURREALDB_URL'),
namespace: configService.get('SURREALDB_NAMESPACE'),
database: configService.get('SURREALDB_DATABASE'),
user: configService.get('SURREALDB_USER'),
pass: configService.get('SURREALDB_PASS'),
}),
imports: [AppModule],
inject: [ConfigService],
}),
GraphQLModule.forRootAsync<ApolloDriverConfig>({
driver: ApolloDriver,
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
autoSchemaFile: join(process.cwd(), configService.get<string>('GRAPHQL_AUTO_SCHEMA_FILE')),
installSubscriptionHandlers: true,
formatError: (err) => {
if (err.extensions.code === 'INTERNAL_SERVER_ERROR') {
return new Error(err.message);
}
return err;
},
}),
}),
],
})
export class AppModule { }
now we can use surrealDb: SurrealDbService
like any other NestJs provider ex
@Injectable()
export class RecipesService extends BaseService<Type<Recipe>, BaseFindAllArgs, CreateRecipeInput, UpdateRecipeInput> {
constructor(protected readonly surrealDb: SurrealDbService) {
super(surrealDb);
this.entityName = Recipe;
}
}
view the full example or tutorial