@vlxdisluv/cassandra-driver-adapter v0.0.3
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-adapterUsage
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
- Author - Vladislav Severin