@vlxdisluv/cassandra-driver-adapter

0.0.3 • Public • Published

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

Description

Cassandra Driver Adapter utilities module for NestJS based on the cassandra-driver package.

Installation

$ npm i --save @vlxdisluv/cassandra-driver-adapter
$ yarn add @vlxdisluv/cassandra-driver-adapter

Usage

Import CassandraDriverAdapterModule:

@Module({
  imports: [
    CassandraDriverAdapterModule.forRootAsync({...})
  ],
  providers: [...]
})
export class AppModule {}

Async options

Quite often you might want to asynchronously pass your module options instead of passing them beforehand. In such case, use registerAsync() method, that provides a couple of various ways to deal with async data.

1. Use factory

CassandraDriverAdapterModule.forRootAsync({
  useFactory: () => ({...}),
})

Obviously, our factory behaves like every other one (might be async and is able to inject dependencies through inject).

CassandraDriverAdapterModule.forRootAsync({
  imports: [ConfigModule],
  useFactory: (configService: ConfigService) => configService.getDbConfig(),
  inject: [ConfigService],
});

2. Use class

CassandraDriverAdapterModule.forRootAsync({
  useClass: ConfigService,
});

Above construction will instantiate ConfigService inside CassandraDriverAdapterModule and will leverage it to create options object.

class ConfigService implements CassandraDriverAdapterOptionsFactory {
  createCassandraDriverAdapterOptions(): CassandraDriverAdapterModuleOptions {
    return {...};
  }
}

3. Use existing

CassandraDriverAdapterModule.forRootAsync({
  imports: [ConfigModule],
  useExisting: ConfigService,
});

It works the same as useClass with one critical difference - CassandraDriverAdapterModule will lookup imported modules to reuse already created ConfigService, instead of instantiating it on its own.

ORM Options

import { Entity } from '@vlxdisluv/cassandra-driver-adapter/lib/orm';

@Entity({
  tableName: 'messages',
})
export class Message {
  id: any;
  text: string;
}

Let's have a look at the MessagesModule

import { Module } from '@nestjs/common';
import { CassandraDriverAdapterModule } from '@vlxdisluv/cassandra-driver-adapter';
import { MessagesService } from './messages.service';
import { MessagesController } from './messages.controller';
import { Message } from './message.entity';

@Module({
  imports: [CassandraDriverAdapterModule.forFeature([Message])],
  providers: [MessagesService],
  controllers: [MessagesController],
})
export class MessagesModule {}

Using Repository

import { Module } from '@nestjs/common';
import { CassandraDriverAdapterModule } from '@vlxdisluv/cassandra-driver-adapter';
import { MessagesService } from './messages.service';
import { MessagesController } from './messages.controller';
import { Message } from './message.entity';

@Module({
  imports: [CassandraDriverAdapterModule.forFeature([Message])],
  providers: [MessagesService],
  controllers: [MessagesController],
})
export class MessagesModule {}
import { Injectable } from '@nestjs/common';
import {
  InjectRepository,
  Repository,
} from '@vlxdisluv/cassandra-driver-adapter';
import { Message } from './message.entity';
import { Observable } from 'rxjs';

@Injectable()
export class PersonService {
  constructor(
    @InjectRepository(Message)
    private readonly messagesRepository: Repository<Message>,
  ) {}

  getById(id: id): Promise<PhotoEntity> {
    return this.messagesRepository.findOne({ id });
  }
}

Using Custom Repository

Let's create a repository:

import {
  Repository,
  EntityRepository,
} from '@vlxdisluv/cassandra-driver-adapter';
import { Message } from './message.entity';
import { Observable } from 'rxjs';

@EntityRepository(Message)
export class MessagesRepository extends Repository<Message> {
  findById(id: any): Message {
    return this.findOne({ id: id });
  }
}

Stay in touch

Package Sidebar

Install

npm i @vlxdisluv/cassandra-driver-adapter

Weekly Downloads

0

Version

0.0.3

License

MIT

Unpacked Size

86.8 kB

Total Files

3

Last publish

Collaborators

  • vlxdisluv