https://github.com/bryopsida/nest-couchdb
CouchDB module for NestJS
https://github.com/bryopsida/nest-couchdb
Last synced: about 1 year ago
JSON representation
CouchDB module for NestJS
- Host: GitHub
- URL: https://github.com/bryopsida/nest-couchdb
- Owner: bryopsida
- License: mit
- Created: 2023-06-04T16:04:55.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-02-28T09:37:29.000Z (over 1 year ago)
- Last Synced: 2025-02-28T16:33:11.979Z (over 1 year ago)
- Language: TypeScript
- Homepage:
- Size: 919 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NestJS CouchDB
[](https://sonarcloud.io/summary/new_code?id=bryopsida_nest-couchdb) [](https://sonarcloud.io/summary/new_code?id=bryopsida_nest-couchdb) [](https://sonarcloud.io/summary/new_code?id=bryopsida_nest-couchdb) [](https://sonarcloud.io/summary/new_code?id=bryopsida_nest-couchdb) [](https://sonarcloud.io/summary/new_code?id=bryopsida_nest-couchdb) [](https://sonarcloud.io/summary/new_code?id=bryopsida_nest-couchdb)
## Installation
```bash
$ npm i @bryopsida/nest-couchdb nano
```
## Usage
`@bryopsida/nest-couchdb` uses [nano](https://www.npmjs.com/package/nano) as a data provider for CouchDB and the `Repository` pattern to handle all documents related operations.
First, let's create an `Entity`:
```typescript
import { Entity, CouchDbEntity } from '@bryopsida/nest-couchdb'
@Entity('cats')
export class Cat extends CouchDbEntity {
name: string
}
```
Where `cats` is the CouchDB database name.
The `CouchDbEntity` is a base class which has some common properties:
```typescript
class CouchDbEntity {
_id: string
_rev: string
}
```
Then, we need to import `CouchDbModule` in our `ApplicationModule`:
```typescript
import { Module } from '@nestjs/common'
import { CouchDbModule } from '@bryopsida/nest-couchdb'
@Module({
imports: [
CouchDbModule.forRoot({
url: 'http://localhost:5984',
username: 'couchdb',
userpass: 'password',
requestDefaults: { jar: true },
}),
],
})
export class ApplicationModule {}
```
In our `CatsModule` we need to initiate repository for our `Cat` entity:
```typescript
import { Module } from '@nestjs/common'
import { CouchDbModule } from '@bryopsida/nest-couchdb'
import { CatsService } from './cats.service'
import { CatsController } from './cats.controller'
import { Cat } from './cat.entity'
@Module({
imports: [CouchDbModule.forFeature([Cat])],
providers: [CatsService],
controllers: [CatsController],
})
export class CatsModule {}
```
And here is the usage of the repository in the service:
```typescript
import { DocumentListResponse } from 'nano';
import { Injectable } from '@nestjs/common';
import { InjectRepository, Repository } from '@bryopsida/nest-couchdb';
import { Cat } from './cat.entity';
@Injectable()
export class CatsService {
constructor(
@InjectRepository(Cat)
private readonly catsRepository: Repository,
) {}
findAll(): Promise {
return this.catsRepository.list();
}
}
```
## Test
```bash
$ docker-compose up -d
$ npm test
```
## License
[MIT](LICENSE)
## Credits
Created by [@zMotivat0r](https://github.com/zMotivat0r) @ [Scalio](https://scal.io/)