@bleco/chat-service v1.2.0
chat-service
Overview
Microservice for handling chat between users and user groups.
Installation
npm i @bleco/chat-service
Implementation
Create a new Application using Loopback CLI and add the Component for
ChatService
in application.ts
import {BootMixin} from '@loopback/boot';
import {ApplicationConfig} from '@loopback/core';
import {RepositoryMixin} from '@loopback/repository';
import {RestApplication} from '@loopback/rest';
import {
RestExplorerBindings,
RestExplorerComponent,
} from '@loopback/rest-explorer';
import {ServiceMixin} from '@loopback/service-proxy';
import {ChatServiceComponent} from '@bleco/chat-service';
import path from 'path';
import {MySequence} from './sequence';
export {ApplicationConfig};
export class ChatApplication extends BootMixin(
ServiceMixin(RepositoryMixin(RestApplication)),
) {
constructor(options: ApplicationConfig = {}) {
super(options);
// Set up the custom sequence
this.sequence(MySequence);
// Set up default home page
this.static('/', path.join(__dirname, '../public'));
// Customize @loopback/rest-explorer configuration here
this.configure(RestExplorerBindings.COMPONENT).to({
path: '/explorer',
});
this.component(RestExplorerComponent);
// add Component for ChatService
this.component(ChatServiceComponent);
this.projectRoot = __dirname;
// Customize @loopback/boot Booter Conventions here
this.bootOptions = {
controllers: {
// Customize ControllerBooter Conventions here
dirs: ['controllers'],
extensions: ['.controller.js'],
nested: true,
},
};
}
}
Environment Variables
Name | Required | Default Value | Description |
---|---|---|---|
NODE_ENV | Y | Node environment value, i.e. dev , test , prod | |
LOG_LEVEL | Y | Log level value, i.e. error , warn , info , verbose , debug | |
DB_HOST | Y | Hostname for the database server. | |
DB_PORT | Y | Port for the database server. | |
DB_USER | Y | User for the database. | |
DB_PASSWORD | Y | Password for the database user. | |
DB_DATABASE | Y | Database to connect to on the database server. | |
DB_SCHEMA | Y | Database schema used for the data source. In PostgreSQL, this will be public unless a schema is made explicitly for the service. | |
JWT_SECRET | Y | Symmetric signing key of the JWT token. | |
JWT_ISSUER | Y | Issuer of the JWT token. |
Setting up DataSource
Here is a sample Implementation DataSource
implementation using environment
variables and PostgreSQL as the data source.
import {inject, lifeCycleObserver, LifeCycleObserver} from '@loopback/core';
import {juggler} from '@loopback/repository';
const config = {
name: 'chatDb',
connector: 'postgresql',
url: '',
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
schema: process.env.DB_SCHEMA,
};
@lifeCycleObserver('datasource')
export class ChatDataSource
extends juggler.DataSource
implements LifeCycleObserver
{
static dataSourceName = 'chatDb';
static readonly defaultConfig = config;
constructor(
// You need to set datasource configuration name as 'datasources.config.Chat' otherwise you might get Errors
@inject('datasources.config.Chat', {optional: true})
dsConfig: object = config,
) {
super(dsConfig);
}
}
Migrations
The migrations required for this service are processed during the installation
automatically if you set the CHAT_MIGRATION
or BLECO_MIGRATION
env variable.
The migrations use db-migrate
with
db-migrate-pg
driver for
migrations, so you will have to install these packages to use auto-migration.
Please note that if you are using some pre-existing migrations or database, they
may be effected. In such scenario, it is advised that you copy the migration
files in your project root, using the CHAT_MIGRATION_COPY
or
BLECO_MIGRATION_COPY
env variables. You can customize or cherry-pick the
migrations in the copied files according to your specific requirements and then
apply them to the DB.
API Documentation
Common Headers
Authorization: Bearer where is a JWT token signed using JWT
issuer and secret. Content-Type: application/json
in the response and in
request if the API method is NOT GET
Common Request path Parameters
{version}: Defines the API Version
Common Responses
200: Successful Response. Response body varies w.r.t API 401: Unauthorized: The JWT token is missing or invalid 403: Forbidden : Not allowed to execute the concerned API 404: Entity Not Found 400: Bad Request (Error message varies w.r.t API) 201: No content: Empty Response
API Details
2 years ago