diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..29f8afa --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/graphql-server-for-polaris.iml b/.idea/graphql-server-for-polaris.iml index 24643cc..d16780b 100644 --- a/.idea/graphql-server-for-polaris.iml +++ b/.idea/graphql-server-for-polaris.iml @@ -8,5 +8,8 @@ + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 4281815..1c4acc9 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,6 +3,9 @@ + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..f66dd4f 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,8 @@ - + + + \ No newline at end of file diff --git a/context-builder.ts b/context-builder.ts index 2067ecd..6aaf587 100644 --- a/context-builder.ts +++ b/context-builder.ts @@ -1,13 +1,13 @@ import {GraphQLLogger, PolarisGraphQLLogger} from "@enigmatis/polaris-graphql-logger"; -import {DeltaMiddlewareContext} from '@enigmatis/polaris-delta-middleware'; -import { PolarisConnection } from "@enigmatis/polaris-typeorm/src/connections/connection"; - -export interface PolarisContext extends DeltaMiddlewareContext { +import {PolarisBaseContext} from "@enigmatis/polaris-common" +import { Connection } from "@enigmatis/polaris-typeorm"; +export interface PolarisContext extends PolarisBaseContext{ } export class ContextBuilder { private _logger: GraphQLLogger; + private _res: any; private _dataVersion: number; private _realityId: number; private _includeLinkedOper: boolean; @@ -40,21 +40,25 @@ export class ContextBuilder { this._includeLinkedOper = includeLinkedOper == "false"? false: true; } + res(res){ + this._res = res; + } + build(): PolarisContext { - return {logger: this._logger, dataVersion: this._dataVersion}; + return {logger: this._logger, dataVersion: this._dataVersion, res: this._res}; } } export class ContextInitializer { private readonly logger: GraphQLLogger; - private readonly polarisConnection: PolarisConnection; + private readonly polarisConnection: Connection; - constructor(logger: GraphQLLogger, polarisConnection: PolarisConnection) { + constructor(logger: GraphQLLogger, polarisConnection: Connection) { this.logger = logger; this.polarisConnection = polarisConnection; } - async initializeContextForRequest({req}) { + async initializeContextForRequest({req, res}) { const contextBuilder = new ContextBuilder(); let dataVersionHeader = req.headers['data-version']; let realityIdHeader = req.headers['reality-id']; @@ -69,8 +73,10 @@ export class ContextInitializer { contextBuilder.includeLinkedOper(includeLinkedOper); } contextBuilder.realityId(realityIdHeader); + contextBuilder.res(res); let context: PolarisContext = contextBuilder.build(); + res.locals.irrelevantEntities = {}; this.polarisConnection.manager.queryRunner.data.context = context; return context; } -} \ No newline at end of file +} diff --git a/index.ts b/index.ts index bf3ef1a..2e682fa 100644 --- a/index.ts +++ b/index.ts @@ -5,15 +5,16 @@ import {applyMiddleware} from 'graphql-middleware'; import { dataVersionMiddleware, softDeletedMiddleware, - ExtensionsPlugin -} from '../polaris-delta-middleware'; -import {realitiesMiddleware} from '../polaris-realities-middleware' + ExtensionsPlugin, + realitiesMiddleware, + irrelevantEntitiesMiddleware +} from '@enigmatis/polaris-middlewares'; import { repositoryEntityTypeDefs, scalarsResolvers, scalarsTypeDefs -} from '../polaris-schema'; -import {ContextInitializer} from "./context-builder"; +} from '@enigmatis/polaris-schema'; +import {ContextInitializer, PolarisContext} from "./context-builder"; import {Book} from "./dal/book"; import { CommonModel, @@ -21,6 +22,7 @@ import { createPolarisConnection, ConnectionOptions } from '../polaris-typeorm'; +import {Like} from '@enigmatis/polaris-typeorm' import {PolarisGraphQLLogger} from '@enigmatis/polaris-graphql-logger'; import "reflect-metadata"; @@ -41,11 +43,7 @@ const books = [ let connectionOptions: ConnectionOptions = { type: "postgres", - host: "localhost", - port: 5432, - username: "postgres", - password: "Aa123456", - database: "postgres", + url:"postgres://dbgazwwm:2ZIUE9vCEh-u-yHNENAhxbgrVJchkg8d@manny.db.elephantsql.com:5432/dbgazwwm", entities: [ __dirname + '/dal/*.ts', CommonModel, @@ -63,22 +61,32 @@ const applicationLogProperties = { version: '1' }; -const polarisGraphQLLogger = new PolarisGraphQLLogger(applicationLogProperties, { +const polarisGraphQLLogger = new PolarisGraphQLLogger(applicationLogProperties, { loggerLevel: 'debug', writeToConsole: true, writeFullMessageToConsole: false }); const play = async () => { - const connection = await createPolarisConnection(connectionOptions,{}); + // @ts-ignore + const connection = await createPolarisConnection(connectionOptions, polarisGraphQLLogger); let initDb = async () => { - await connection.dropDatabase(); + const tables = ['user', 'profile', 'book', 'author', 'library', 'dataVersion']; + for (const table of tables) { + if (connection.manager) { + try { + await connection.manager.getRepository(table).query('DELETE FROM "' + table + '";'); + }catch (e) { + + } + } + } await connection.synchronize(); let bookRepo = connection.getRepository(Book); let book1 = new Book('Harry Potter and the Chamber of Secrets', 'J.K. Rowling'); let book2 = new Book('Jurassic Park', 'Michael Crichton'); - // await bookRepo.save([book1, book2]); + await bookRepo.save([book1, book2]); }; const typeDefs = gql` @@ -103,6 +111,7 @@ const play = async () => { # (A "Mutation" type will be covered later on.) type Query { books: [Book] + booksStartWith(startWith: String!): [Book] bla: String } type Mutation { @@ -118,6 +127,11 @@ const play = async () => { let books = await bookRepo.find(); return books; }, + booksStartWith: async (root, args, context, info) => { + const bookRepo = connection.getRepository(Book); + let books = await bookRepo.find({where:{title: Like(`${args.startWith}%`)}}); + return books; + }, bla: () => "bla" }, Mutation: { @@ -141,10 +155,10 @@ const play = async () => { resolvers: [resolvers, scalarsResolvers] }); - const executableSchema = applyMiddleware(schema, dataVersionMiddleware, softDeletedMiddleware, realitiesMiddleware); + const executableSchema = applyMiddleware(schema, dataVersionMiddleware, softDeletedMiddleware, realitiesMiddleware, irrelevantEntitiesMiddleware); const config: ApolloServerExpressConfig = { schema: executableSchema, - context: ({req}) => new ContextInitializer(polarisGraphQLLogger, connection).initializeContextForRequest({req}), + context: ({req,res}) => new ContextInitializer(polarisGraphQLLogger, connection).initializeContextForRequest({req, res}), plugins: [() => new ExtensionsPlugin(connection.getRepository(DataVersion))], }; diff --git a/package.json b/package.json index f20cf63..1d2a392 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "main": "index.js", "scripts": { - "link": "npm link @enigmatis/polaris-schema && npm link @enigmatis/polaris-delta-middleware && npm link @enigmatis/polaris-realities-middleware && npm link @enigmatis/polaris-graphql-logger && npm link @enigmatis/polaris-typeorm", + "link": "npm link @enigmatis/polaris-schema && npm link @enigmatis/polaris-middlewares && npm link @enigmatis/polaris-graphql-logger && npm link @enigmatis/polaris-typeorm && npm link @enigmatis/polaris-common", "test": "echo \"Error: no test specified\" && exit 1", "start": "tsc & ts-node index.ts" },