@avec-platform/sdk
v2.29.0
Published
Avec Platform SDK for Node.js projects.
Downloads
140
Readme
npm-sdk
Includes
- CacheInterceptor - Cache get requests in redis
- Datesubscriber - Listen to typeorm events, and adds createdAt and updateAt data in request.
- HttpErrorFilter - Catches errors and display then in dev enviroment.
- DataBroker - Communicates with RabbitMQ
- LogBroker - Sends log data to elastic database via RabbitMQ
Development
Clone repository:
$ git clone [email protected]:avecplatform/npm-sdk.git $ cd npm-sdk
Install dependencies:
$ npm install
Tests
Run all tests:
$ npm run test
Run all tests in watch mode:
$ npm run test:watch
NPM Scripts
| Name | Description | | ----------------- | ----------------------------------- | | build | Build production files to 'lib' dir | | deps:check | NPX for npm-check | | sort-package-json | NPX for sort-package-json | | test | Run tests | | test:watch | Run tests in watch mode |
Usage
CacheInterceptor
Is used as a Nestjs APP_INTERCEPTOR
Example:
// src/app.mdoule.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { HttpCacheInterceptor } from '@avec-platform/sdk';
import { DatabaseModule } from './config/database.module';
const cacheProvider = {
provide: APP_INTERCEPTOR,
useClass: HttpCacheInterceptor,
};
const providers = [];
const imports = [
DatabaseModule.orm(),
];
if (process.env.REDIS_URL) {
Logger.log(`Cache enabled`, 'Redis');
imports.push(DatabaseModule.cache());
providers.push(cacheProvider);
}
@Module({
imports,
providers,
controllers: [AppController],
})
export class AppModule {}
HttpErrorFilter
Is used as a Nestjs APP_FILTER
example:
// src/app.mdoule.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { DatabaseModule } from './config/database.module';
import { APP_INTERCEPTOR, APP_FILTER } from '@nestjs/core';
import { HttpErrorFilter } from '@avec-platform/sdk';
const imports = [
DatabaseModule.orm(),
];
const providers = [];
const httpErrorFilter = {
provide: APP_FILTER,
useClass: HttpErrorFilter,
};
providers.push(httpErrorFilter);
@Module({
imports,
providers,
controllers: [AppController],
})
export class AppModule {}
DatesSubscriber
Is used as a Typeorm Subscriber
Example standard Typeorm Config:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { DatesSubscriber } from '@avec-platform/sdk';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
subscribers: [DatesSubscriber],
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
],
})
export class ApplicationModule {}
Example using Database.module.ts created by Andrew for the Config Service.
export function getOrmConfig() {
const config = new ConfigService().read();
const mysqlConfig = parseUri(config.DATABASE_URL);
return {
type: mysqlConfig.scheme || 'mysql',
host: mysqlConfig.host,
port: mysqlConfig.port || 3306,
username: mysqlConfig.user,
password: mysqlConfig.password,
database: mysqlConfig.database,
entities: [
`${path.join(appRootPath.path, '{src,dist}')}/**/*.entity{.ts,.js}`,
],
subscribers: [DatesSubscriber],
synchronize: false,
timezone: 'UTC',
dateStrings: 'TIMESTAMP',
};
}