guide openapi generator - wwwsolutions/nestjs-starter-kit GitHub Wiki

Integrations

Example from Rest-Mongoose integration

Openapi Generator

Auto-generate angular types

Install Dependencies

npm i -D @openapitools/openapi-generator-cli
npm i -D @nrwl/angular

Structure

  • libs/shared/api DOMAIN
    • src
      • lib
        • (auto-generated content by openapi-generator)
      • index.ts

Add config files @root

// openapitools.json
{
  "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
  "spaces": 2,
  "generator-cli": {
    "version": "5.2.0"
  }
}
// openapiconfig.json
{
  "serviceSuffix": "ApiService",
  "ngVersion": "12.0.0"
}
GENERATE LIBRARY

Generate shared Angular library to hold auto-generated types

nx generate @nrwl/angular:library --name=api --directory=shared --buildable --standaloneConfig --strict --tags=type:data-access,scope:shared --no-interactive
DELETE MODULE FILE
// libs/shared/api/src/lib/shared-api.module.ts
EDIT BARREL FILE
// libs/shared/api/src/index.ts
export * from './lib';
GENERATE DEMO APPLICATION

Generate demo angular app

nx generate @nrwl/angular:application --name=client-angular --style=css --backendProject=api --e2eTestRunner=none --prefix=demo --skipTests --standaloneConfig --tags=scope:app --no-interactive --dry-run
EDIT proxy.conf.json
{
  "/api": {
    "target": "http://localhost:3000/api",
    "secure": false
  }
}
EDIT .eslintignore
node_modules

**/generated

libs/api/data-access/prisma/src/lib

libs/api/data-access/models/src/lib

libs/shared/data-access-api/src/lib
EXPOSE PUBLIC API
// libs/api/domain/article/feature/src/index.ts

api-domain-article-data-access

Contains domain's data layer and exposes:

  • xxxxxxxxxxxxx
  • xxxxxxxxxxxxx
  • xxxxxxxxxxxxx
GENERATE
nx generate @nrwl/nest:library --name=data-access --directory=api/domain/article --buildable --standaloneConfig --strict --tags=type:data-access,scope:api --no-interactive
EDIT FILES
// libs/api/domain/article/data-access/src/lib/api-domain-article-data-access.module.ts
CREATE FILES
// libs/api/domain/article/data-access/src/lib/article.service.ts
// libs/api/domain/article/data-access/src/lib/models/xxx.model.ts
EXPOSE PUBLIC API
// libs/api/domain/article/data-access/src/index.ts

Register domain

Add feature module name to the domains array.

// libs/api/core/src/lib/registrations/domains.registration.ts 

import { ApiDomainArticleFeatureModule } from '@wwwsolutions/api/domain/article/feature';

export const domains: NestImportsType = [ApiDomainArticleFeatureModule];

Implement PROTECTED|RESTRICTED API

Utilize guards.

// libs/api/domain/users/feature/src/lib/users.resolver.ts
⚠️ **GitHub.com Fallback** ⚠️