Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mikedev75015/mongodb-dynamic-api

Auto generated CRUD API for MongoDB using NestJS 10
https://github.com/mikedev75015/mongodb-dynamic-api

crud-api mongodb nestjs

Last synced: 26 days ago
JSON representation

Auto generated CRUD API for MongoDB using NestJS 10

Awesome Lists containing this project

README

        


[![NPM version](https://img.shields.io/npm/v/mongodb-dynamic-api.svg)](https://www.npmjs.com/package/mongodb-dynamic-api)
![NPM](https://img.shields.io/npm/l/mongodb-dynamic-api?registry_uri=https%3A%2F%2Fregistry.npmjs.com)
![npm](https://img.shields.io/npm/dw/mongodb-dynamic-api)



![GitHub branch checks state](https://img.shields.io/github/checks-status/MikeDev75015/mongodb-dynamic-api/main)
[![CircleCI](https://circleci.com/gh/MikeDev75015/mongodb-dynamic-api.svg?style=shield)](https://app.circleci.com/pipelines/github/MikeDev75015/mongodb-dynamic-api)
![Sonar Quality Gate](https://img.shields.io/sonar/quality_gate/MikeDev75015_mongodb-dynamic-api?server=https%3A%2F%2Fsonarcloud.io)



![Sonar Tests](https://img.shields.io/sonar/tests/MikeDev75015_mongodb-dynamic-api?server=https%3A%2F%2Fsonarcloud.io)
![Sonar Coverage](https://img.shields.io/sonar/coverage/MikeDev75015_mongodb-dynamic-api?server=https%3A%2F%2Fsonarcloud.io)



[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=MikeDev75015_mongodb-dynamic-api&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=MikeDev75015_mongodb-dynamic-api)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=MikeDev75015_mongodb-dynamic-api&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=MikeDev75015_mongodb-dynamic-api)
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=MikeDev75015_mongodb-dynamic-api&metric=security_rating)](https://sonarcloud.io/dashboard?id=MikeDev75015_mongodb-dynamic-api)
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=MikeDev75015_mongodb-dynamic-api&metric=ncloc)](https://sonarcloud.io/dashboard?id=MikeDev75015_mongodb-dynamic-api)
[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=MikeDev75015_mongodb-dynamic-api&metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=MikeDev75015_mongodb-dynamic-api)



![GitHub top language](https://img.shields.io/github/languages/top/MikeDev75015/mongodb-dynamic-api)
![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/MikeDev75015/mongodb-dynamic-api)
![GitHub commit activity](https://img.shields.io/github/commit-activity/w/MikeDev75015/mongodb-dynamic-api)
![GitHub last commit (branch)](https://img.shields.io/github/last-commit/MikeDev75015/mongodb-dynamic-api/main)


---

## mongodb-dynamic-api
```text
npm install --save mongodb-dynamic-api
```

---

# Dynamic API Module
with WebSockets

In summary, DynamicApiModule is a flexible and configurable module using NestJS 10 that provides dynamic API functionality for your contents.

It must be set up at the root level with global settings and then configured for individual features.

It has several optional features such as
[Swagger UI](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/swagger-ui.md),
[Versioning](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/versioning.md),
[Validation](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/validation.md),
[Caching](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/caching.md),
[Authentication](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authentication.md),
[Authorization](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authorization.md) and
[WebSockets](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/websockets.md).

___

### HOW TO ENJOY IT

- Start a new [nest](https://docs.nestjs.com/) project with **typescript** (use the `--strict` option)
```text
nest new --strict your-project-name
```

- Go to your new project root and install the [mongodb-dynamic-api](https://www.npmjs.com/package/mongodb-dynamic-api) package
```text
npm i -S mongodb-dynamic-api
```
**Basic Configuration**

- Add `DynamicApiModule.forRoot` to your `app.module.ts` and pass your **MongoDB connection string** to the method.

```typescript
// src/app.module.ts
import { DynamicApiModule } from 'mongodb-dynamic-api';

@Module({
imports: [
DynamicApiModule.forRoot(
'mongodb-uri', // <- replace by your own MongoDB connection string
),
// ...
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
```
**Basic Usage**

- Ok, now let's add our first content with just 2 files. It will be a simple `User` with a `name` and an `email` field.
- We use the `@Schema` and `@Prop` decorators from the @nestjs/mongoose package to define our MongoDB model.

- You must extend the `BaseEntity` | `SoftDeletableEntity` class from the `mongodb-dynamic-api` package for all your **collection models**.
See more details **[here](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/entities.md)**.

- You can also add the `@DynamicAPISchemaOptions` decorator to pass schema options.
See more details **[here](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/schema-options.md)**.

Just create a new file `user.ts` and add the following code.

```typescript
// src/users/user.ts
import { Prop, Schema } from '@nestjs/mongoose';
import { BaseEntity } from 'mongodb-dynamic-api';

@Schema({ collection: 'users' })
export class User extends BaseEntity { // <- extends BaseEntity
@Prop({ type: String, required: true })
name: string;

@Prop({ type: String, required: true })
email: string;
}
```

- Then we will use the `DynamicApiModule.forFeature` method to add the `User` API to our application.
- We pass the `User` class to the `entity` property and specify the path `users` to the `controllerOptions` property.
- Create a new file `users.module.ts` and add the following code.

```typescript
// src/users/users.module.ts
import { DynamicApiModule } from 'mongodb-dynamic-api';
import { User } from './user';

@Module({
imports: [
DynamicApiModule.forFeature({
entity: User,
controllerOptions: {
path: 'users',
},
}),
],
})
export class UsersModule {}
```

- Last step, add the `UsersModule` to the **imports** in the `app.module.ts` after the `DynamicApiModule.forRoot` method.

```typescript
// src/app.module.ts
import { DynamicApiModule } from 'mongodb-dynamic-api';
import { UsersModule } from './users/users.module';

@Module({
imports: [
DynamicApiModule.forRoot(
'mongodb-uri', // <- replace by your own MongoDB connection string
),
UsersModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
```

**And that's all !** *You now have a fully functional CRUD API for the `User` content at the `/users` path.*

| Endpoint | Body | Param | Query |
|:--------------------------------------------------|:----------------------------------------------:|:------------:|:---------------:|
| GET **/users**
*Get many* | x | x | x |
| GET **/users/:id**
*Get one* | x | `id: string` | x |
| POST **/users/many**
*Create many* | `{ list: [{ name: string; email: string; }] }` | x | x |
| POST **/users**
*Create one* | `{ name: string; email: string; }` | x | x |
| PUT **/users/:id**
*Replace one* | `{ name: string; email: string; }` | `id: string` | x |
| PATCH **/users**
*Update many* | `{ name?: string; email?: string; }` | x | `ids: string[]` |
| PATCH **/users/:id**
*Update one* | `{ name?: string; email?: string; }` | `id: string` | x |
| DELETE **/users**
*Delete many* | x | x | `ids: string[]` |
| DELETE **/users/:id**
*Delete one* | x | `id: string` | x |
| POST **/users/duplicate**
*Duplicate many* | `{ name?: string; email?: string; }` | x | `ids: string[]` |
| POST **/users/duplicate/:id**
*Duplicate one* | `{ name?: string; email?: string; }` | `id: string` | x |

___

Go further with optional features like:
- **[Swagger UI](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/swagger-ui.md)**
- **[Versioning](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/versioning.md)**
- **[Validation](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/validation.md)**
- **[Caching](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/caching.md)**
- **[Authentication](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authentication.md)**
- **[Authorization](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authorization.md)**
- **[WebSockets](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/websockets.md)**