@vlxdisluv/cassandra-driver-adapter
v0.0.3
Published
Nest - wrapper over cassandra-driver
Downloads
4
Maintainers
Readme
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
- Author - Vladislav Severin