Skip to content

SocketSomeone/nestjs-cqrs-extra

Repository files navigation

Nest Logo

A module for that provides additional features for the NestJS CQRS module.

NPM Version NPM License NPM Downloads Last commit

About

Nest CQRS Extra is a module that provides additional features for the NestJS CQRS module. It provides a way to send commands and queries through a message broker (e.g. NATS, Redis, MQTT) to the appropriate handlers in microservices. It also provides a way to create sagas that can be used to handle events.

Features

  • Typings - Provides typings for commands, queries, and events. (Request & Response)
  • Message Broker - Provides a way to send commands and queries to the appropriate handlers in microservices.
  • Saga - Provides a way to create sagas that can be used to handle events.

Installation

$ npm install nestjs-cqrs-extra @nestjs/microservices nats

Usage

Import the module

import { Module } from '@nestjs/common';
import { CqrsModule } from 'nestjs-cqrs-extra';

@Module({
    imports: [
        CqrsModule.forRoot({
            options: { servers: ['nats://localhost:4222'] }
        })
    ]
})
export class AppModule {
}

You can change adapter to redis or mqtt by changing the adapter option.

Create a command

import { BaseCommand } from 'nestjs-cqrs-extra';

export class CreateUserCommand extends BaseCommand<string> {
    constructor(public readonly name: string) {
        super();
    }
}

Create a command handler

import { CommandHandler } from 'nestjs-cqrs-extra';
import { CreateUserCommand } from './create-user.command';
import { Controller } from '@nestjs/common';

@Controller()
export class UserCommandsController {
    @CommandHandler(CreateUserCommand)
    public createUser(command: CreateUserCommand): string {
        return `User ${command.name} created`;
    }
}

Also you can use @QueryHandler and @EventHandler decorators to handle queries and events.

Send a command

import { CommandBus } from 'nestjs-cqrs-extra';
import { Injectable } from '@nestjs/common';

@Injectable()
export class UserService {
    constructor(private readonly commandBus: CommandBus) {
    }

    async createUser(name: string): Promise<string> {
        return this.commandBus.execute(new CreateUserCommand(name));
    }
}

Stay in touch

License

MIT Β© Alexey Filippov

About

πŸš€ Library that provides additional features for the NestJS CQRS module.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published