addapptables microservice
npm install @addapptables/microservice
Addapptables microservices is a library for nodejs oriented to microservices with pattern design CQRS
- Addapptables microservices is a library for nodejs oriented to microservices,
this library is made to work with nestjs
```
npm i @addapptables/microservice
If you use rabbitmq install
``
npm i amqplib
- Example with rabbitmq
`typescript`
import { MicroserviceModule, ManagerAdapterBus, RabbitMQBusAdapter } from '@addapptables/microservice';
@Module({
imports: [
MicroserviceModule.withConfig({
adapter: ManagerAdapterBus.getInstance(RabbitMQBusAdapter)
.withConfig({
exchange: 'search-service',
host: process.env.BUS_URL
})
.build(),
logger: {
debug: false
}
})
],
controllers: [
...
],
providers: [
...
],
})
export class AppModule {}
- Create commands
`typescript
import { Command } from '@addapptables/microservice';
export class ClassCommandModel implements ICommandDto {
id: string;
}
export class CreateUserCommand extends Command
public readonly action = 'action';
public readonly context = 'context';
constructor(public readonly data: ClassCommandModel) { super(data); }
}
`
- Create command handlers
`typescript
import { ICommandHandler, CommandHandler, ICommand } from '@addapptables/cqrs';
@CommandHandler(CreateUserCommand)
export class CommandHandler implements ICommandHandler
handle(event: ClassCommandModel): any {
console.log(event);
// call your domain service
}
}
// ChildModule
@Module({
imports: [
...
],
controllers: [
...
],
providers: [
CommandHandler // very important
],
})
export class ChildModule {}
`
- Create query
`typescript
export class ClassQueryModel implements IQueryDto {
id: string;
}
export class CreateUserQuery extends Query
public readonly action = 'action';
public readonly context = 'context';
constructor(public readonly data: ClassQueryModel) { super(data); }
}
`
- Create query handlers
`typescript
@QueryHandler(ClassQueryModel)
export class FindOneUserHandler implements IQueryHandler
constructor(private readonly userService: UserDomainService) { }
handle(event: ClassQueryModel): any {
return this.userService.findOneByQuery(event.data);
}
}
// ChildModule
@Module({
imports: [
...
],
controllers: [
...
],
providers: [
FindOneUserHandler // very important
],
})
export class ChildModule {}
`
- Create events
`typescript
export class ClassEventModel implements IEventDto {
id: string;
}
export class UserCreatedEvent extends Command
public readonly action = 'action';
public readonly context = 'context';
constructor(public readonly data: ClassEventModel) { super(data); }
}
`
`typescript
@EventHandler(UserCreatedEvent)
export class ActionHandler implements IEventHandler
handle(event: UserCreatedEvent): any {
console.log(event);
// call your domain service
}
}
// ChildModule
@Module({
imports: [
...
],
controllers: [
...
],
providers: [
ActionHandler // very important
],
})
export class ChildModule {}
``