Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gojob-1337/nest-cloud-datastore
Cloud Datastore module for Nestjs
https://github.com/gojob-1337/nest-cloud-datastore
Last synced: 3 days ago
JSON representation
Cloud Datastore module for Nestjs
- Host: GitHub
- URL: https://github.com/gojob-1337/nest-cloud-datastore
- Owner: gojob-1337
- License: mit
- Created: 2019-05-24T10:08:17.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-03T22:33:54.000Z (almost 2 years ago)
- Last Synced: 2024-05-20T05:23:08.320Z (6 months ago)
- Language: TypeScript
- Size: 1.05 MB
- Stars: 2
- Watchers: 7
- Forks: 0
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Nest Cloud Datastore
Cloud Datastore module for Nestjs
## Getting started
```bash
yarn add @gojob/nest-cloud-datastore
# or
npm install @gojob/nest-cloud-datastore
```## Implementing
### Importing the module
If you use the [default configuration](https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application) of GCP client libraries, just import the module `CloudDatastoreModule` as-is.
Otherwise, the configuration passed to the constructor of [Datastore](https://cloud.google.com/nodejs/docs/reference/datastore/3.1.x/Datastore#constructor_1) can be customized in two ways:
* With the static method `forRoot`:
```typescript
import { CloudDatastoreModule, DatastoreModuleAsyncOptions } from '@gojob/nest-cloud-datastore';const datastoreModule = CloudDatastoreModule.forRoot({ keyFile: configService.get('GCP_KEY_FILE_DATASTORE') });
export default datastoreModule;
```* With the static method `forRootAsync`, for configuration object built dynamically:
```typescript
import { CloudDatastoreModule, DatastoreModuleAsyncOptions } from '@gojob/nest-cloud-datastore';import { ConfigModule } from '../config/config.module';
import { ConfigService } from '../config/config.service';const moduleConfig: DatastoreModuleAsyncOptions = {
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({ keyFile: configService.get('GCP_KEY_FILE_DATASTORE') }),
};const datastoreModule = CloudDatastoreModule.forRootAsync(moduleConfig);
export default datastoreModule;
```### Injecting the service
Once the module imported, `CloudDatastoreService` is made available in the injection scope.
Have a look at `src/cloud-datastore.integration-test.ts` to see the methods available.## Testing
Thanks to the Docker image `google/cloud-sdk` including an emulator, testing the integration of your features with Cloud Datastore is pretty straightforward. Download `docker-compose.yml` from this git repository, then:
```bash
docker-compose up -d # run the emulator
curl localhost:8081 # ensure the emulator is available# run your tests, with the following environment variables:
# DATASTORE_EMULATOR_HOST=localhost:8081
# DATASTORE_PROJECT_ID=datastore-testing
```A helper class `DatastoreEmulator` is provided in this package, in order to easily:
* Remove the data stored by the emulator (`reset`)
* Remove the Datastore-specific property of an entity instantiated by the client library (`removeDatastoreKeyProp`)
* Create entities (`createEntity`, `createEntities`)
* Fetch all entities stored by the emulator (`getAll`)Examples of tests are available `src/cloud-datastore.integration-test.ts`.
## Contributing
```bash
yarn install
```### Build
```bash
yarn build
```### Run tests
```bash
docker-compose up -d # start the Cloud Datastore emulator
yarn integration
docker-compose down
```