0.0.3 • Published 3 years ago

@vlxdisluv/cassandra-driver-adapter v0.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

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