2.3.2 • Published 2 days ago

mongodb-dynamic-api v2.3.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 days ago

NPM version NPM npm

GitHub branch checks state CircleCI Sonar Quality Gate

Sonar Tests Sonar Coverage

Maintainability Rating Reliability Rating Security Rating Lines of Code Duplicated Lines (%)

GitHub top language GitHub code size in bytes GitHub commit activity GitHub last commit (branch)


mongodb-dynamic-api

npm install --save mongodb-dynamic-api

Dynamic API Module

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, Versioning, Validation, Caching, Authentication and Authorization.


HOW TO ENJOY IT

  • Start a new nest project with typescript (use the --strict option)
nest new --strict your-project-name
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.
// 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.

  • You can also add the @DynamicAPISchemaOptions decorator to pass schema options. See more details here.

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

// 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.
// 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.
// 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.

EndpointBodyParamQuery
GET /users Get manyxxx
GET /users/:id Get onexid: stringx
POST /users/many Create many{ list: [{ name: string; email: string; }] }xx
POST /users Create one{ name: string; email: string; }xx
PUT /users/:id Replace one{ name: string; email: string; }id: stringx
PATCH /users Update many{ name?: string; email?: string; }xids: string[]
PATCH /users/:id Update one{ name?: string; email?: string; }id: stringx
DELETE /users Delete manyxxids: string[]
DELETE /users/:id Delete onexid: stringx
POST /users/duplicate Duplicate many{ name?: string; email?: string; }xids: string[]
POST /users/duplicate/:idDuplicate one{ name?: string; email?: string; }id: stringx

Go further with optional features like:

2.3.2

2 days ago

2.3.1

4 days ago

2.3.0

7 days ago

2.2.1

9 days ago

2.2.0

9 days ago

2.1.10

10 days ago

2.1.8

1 month ago

2.1.7

1 month ago

2.1.9

1 month ago

2.1.6

1 month ago

2.1.4

1 month ago

2.1.5

1 month ago

2.1.3

1 month ago

2.1.2

1 month ago

2.1.1

2 months ago

2.1.0

2 months ago

2.0.0

2 months ago

1.4.3

2 months ago

1.4.2

2 months ago

1.4.1

2 months ago

1.4.0

2 months ago

1.3.3

2 months ago

1.3.2

2 months ago

1.3.1

2 months ago

1.3.0

2 months ago

1.2.1

2 months ago

1.1.0

2 months ago

1.6.0

2 months ago

1.2.0

2 months ago

1.2.0-beta.5

2 months ago

1.2.0-beta.7

2 months ago

1.2.0-beta.6

2 months ago

1.2.0-beta.4

2 months ago

1.2.0-beta.3

2 months ago

1.2.0-beta.2

2 months ago