Domain-Driven Design example using Nest framework. Persistence layer is implemented using TypeORM with MySQL Database. Object Mapping is based on AutoMapper TypeScript.
$ npm i -g @nestjs/cli
$ nest --version
$ npm i --save typeorm reflect-metadata mysql2
$ npm i --save @nestjs/typeorm @nestjs/cqrs
$ npm i --save typescript-result moment-timezone node-sql-reader
$ npm i @automapper/core @automapper/classes @automapper/nestjs @automapper/types
$ npm i --save-dev ts-node @types/node npm-run-all
Add typeorm command under scripts section in package.json
"scripts": {
...
"typeorm": "typeorm-ts-node-commonjs"
}
$ nest g resource customers
BANKING_DDD_NEST_MYSQL=mysql://{user}:{password}@{host}:{port}/{database}
BANKING_DDD_NEST_MYSQL=mysql://root:root@localhost:3306/banking-ddd-nest
ENVIRONMENT=local
ENVIRONMENT=prod
Note: Password must be URL encoded, %25 is the url encoding of %.
Client does not support authentication protocol requested by server; consider upgrading MySQL client. To fix it, run the following command changing the values with your credentials:
ALTER USER '{user}'@'{host}' IDENTIFIED WITH mysql_native_password BY '{password}'
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'
FLUSH PRIVILEGES;
$ npm run typeorm migration:create ./src/common/infrastructure/migrations/InitialSchema
$ npm run typeorm migration:create ./src/common/infrastructure/migrations/MasterData
$ npm run typeorm migration:create ./src/common/infrastructure/migrations/UserEmailUpdate
$ npm run typeorm migration:create ./src/common/infrastructure/migrations/UserEmailReupdate