guide article domain - wwwsolutions/nestjs-starter-kit GitHub Wiki

Domains | Business logic

Example from Rest-Mongoose integration

Article Domain

Each library has a single responsibility.

Install Dependencies

npm install xxxxxxxxxxxxxx

npm i -D xxxxxxxxxxxxxxxxxxx

Structure

api-domain-article-feature

This is base domain library which holds:

  • xxxxxxxx
  • xxxxxxxx
  • xxxxxxxx
GENERATE
nx generate @nrwl/nest:library --name=feature --directory=api/domain/article --buildable --standaloneConfig --strict --tags=type:feature,scope:api --no-interactive
EDIT FILES
// libs/api/domain/article/feature/src/lib/api-domain-article-feature.module.ts
// libs/api/domain/article/feature/src/lib/guards/gql-auth.guard.ts
// libs/api/domain/article/feature/src/lib/resolvers/auth.resolver.ts
// libs/api/domain/article/feature/src/lib/strategies/xxx.strategy.ts
// libs/api/domain/article/feature/src/lib/strategies/local.strategy.ts
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** ⚠️