Vitalik
3 years ago
commit
851db77594
28 changed files with 9981 additions and 0 deletions
@ -0,0 +1,25 @@ |
|||||||
|
module.exports = { |
||||||
|
parser: '@typescript-eslint/parser', |
||||||
|
parserOptions: { |
||||||
|
project: 'tsconfig.json', |
||||||
|
sourceType: 'module', |
||||||
|
}, |
||||||
|
plugins: ['@typescript-eslint/eslint-plugin'], |
||||||
|
extends: [ |
||||||
|
'plugin:@typescript-eslint/eslint-recommended', |
||||||
|
'plugin:@typescript-eslint/recommended', |
||||||
|
'prettier', |
||||||
|
'prettier/@typescript-eslint', |
||||||
|
], |
||||||
|
root: true, |
||||||
|
env: { |
||||||
|
node: true, |
||||||
|
jest: true, |
||||||
|
}, |
||||||
|
rules: { |
||||||
|
'@typescript-eslint/interface-name-prefix': 'off', |
||||||
|
'@typescript-eslint/explicit-function-return-type': 'off', |
||||||
|
'@typescript-eslint/explicit-module-boundary-types': 'off', |
||||||
|
'@typescript-eslint/no-explicit-any': 'off', |
||||||
|
}, |
||||||
|
}; |
@ -0,0 +1,43 @@ |
|||||||
|
# compiled output |
||||||
|
/dist |
||||||
|
/node_modules |
||||||
|
|
||||||
|
# Logs |
||||||
|
logs |
||||||
|
*.log |
||||||
|
npm-debug.log* |
||||||
|
yarn-debug.log* |
||||||
|
yarn-error.log* |
||||||
|
lerna-debug.log* |
||||||
|
|
||||||
|
# OS |
||||||
|
.DS_Store |
||||||
|
|
||||||
|
# Tests |
||||||
|
/coverage |
||||||
|
/.nyc_output |
||||||
|
|
||||||
|
# IDEs and editors |
||||||
|
/.idea |
||||||
|
.project |
||||||
|
.classpath |
||||||
|
.c9/ |
||||||
|
*.launch |
||||||
|
.settings/ |
||||||
|
*.sublime-workspace |
||||||
|
|
||||||
|
# IDE - VSCode |
||||||
|
.vscode/* |
||||||
|
!.vscode/settings.json |
||||||
|
!.vscode/tasks.json |
||||||
|
!.vscode/launch.json |
||||||
|
!.vscode/extensions.json |
||||||
|
|
||||||
|
|
||||||
|
.env |
||||||
|
|
||||||
|
#minio file storage |
||||||
|
/milord |
||||||
|
./milord |
||||||
|
./milord/* |
||||||
|
.vscode/settings.json |
@ -0,0 +1,10 @@ |
|||||||
|
{ |
||||||
|
"tabWidth": 4, |
||||||
|
"useTabs": true, |
||||||
|
"singleQuote": true, |
||||||
|
"semi": false, |
||||||
|
"printWidth": 100, |
||||||
|
"bracketSpacing": true, |
||||||
|
"trailingComma": "all", |
||||||
|
"arrowParens": "avoid" |
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
<p align="center"> |
||||||
|
<a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo_text.svg" width="320" alt="Nest Logo" /></a> |
||||||
|
</p> |
||||||
|
|
||||||
|
[travis-image]: https://api.travis-ci.org/nestjs/nest.svg?branch=master |
||||||
|
[travis-url]: https://travis-ci.org/nestjs/nest |
||||||
|
[linux-image]: https://img.shields.io/travis/nestjs/nest/master.svg?label=linux |
||||||
|
[linux-url]: https://travis-ci.org/nestjs/nest |
||||||
|
|
||||||
|
<p align="center">A progressive <a href="http://nodejs.org" target="blank">Node.js</a> framework for building efficient and scalable server-side applications, heavily inspired by <a href="https://angular.io" target="blank">Angular</a>.</p> |
||||||
|
<p align="center"> |
||||||
|
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a> |
||||||
|
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a> |
||||||
|
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/dm/@nestjs/core.svg" alt="NPM Downloads" /></a> |
||||||
|
<a href="https://travis-ci.org/nestjs/nest"><img src="https://api.travis-ci.org/nestjs/nest.svg?branch=master" alt="Travis" /></a> |
||||||
|
<a href="https://travis-ci.org/nestjs/nest"><img src="https://img.shields.io/travis/nestjs/nest/master.svg?label=linux" alt="Linux" /></a> |
||||||
|
<a href="https://coveralls.io/github/nestjs/nest?branch=master"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#5" alt="Coverage" /></a> |
||||||
|
<a href="https://gitter.im/nestjs/nestjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge"><img src="https://badges.gitter.im/nestjs/nestjs.svg" alt="Gitter" /></a> |
||||||
|
<a href="https://opencollective.com/nest#backer"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a> |
||||||
|
<a href="https://opencollective.com/nest#sponsor"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a> |
||||||
|
<a href="https://paypal.me/kamilmysliwiec"><img src="https://img.shields.io/badge/Donate-PayPal-dc3d53.svg"/></a> |
||||||
|
<a href="https://twitter.com/nestframework"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow"></a> |
||||||
|
</p> |
||||||
|
<!--[![Backers on Open Collective](https://opencollective.com/nest/backers/badge.svg)](https://opencollective.com/nest#backer) |
||||||
|
[![Sponsors on Open Collective](https://opencollective.com/nest/sponsors/badge.svg)](https://opencollective.com/nest#sponsor)--> |
||||||
|
|
||||||
|
## Description |
||||||
|
|
||||||
|
[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. |
||||||
|
|
||||||
|
## Installation |
||||||
|
|
||||||
|
```bash |
||||||
|
$ npm install |
||||||
|
``` |
||||||
|
|
||||||
|
## Running the app |
||||||
|
|
||||||
|
```bash |
||||||
|
# development |
||||||
|
$ npm run start |
||||||
|
|
||||||
|
# watch mode |
||||||
|
$ npm run start:dev |
||||||
|
|
||||||
|
# production mode |
||||||
|
$ npm run start:prod |
||||||
|
``` |
||||||
|
|
||||||
|
## Test |
||||||
|
|
||||||
|
```bash |
||||||
|
# unit tests |
||||||
|
$ npm run test |
||||||
|
|
||||||
|
# e2e tests |
||||||
|
$ npm run test:e2e |
||||||
|
|
||||||
|
# test coverage |
||||||
|
$ npm run test:cov |
||||||
|
``` |
||||||
|
|
||||||
|
## Support |
||||||
|
|
||||||
|
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). |
||||||
|
|
||||||
|
## Stay in touch |
||||||
|
|
||||||
|
- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) |
||||||
|
- Website - [https://nestjs.com](https://nestjs.com/) |
||||||
|
- Twitter - [@nestframework](https://twitter.com/nestframework) |
||||||
|
|
||||||
|
## License |
||||||
|
|
||||||
|
Nest is [MIT licensed](LICENSE). |
@ -0,0 +1,4 @@ |
|||||||
|
{ |
||||||
|
"collection": "@nestjs/schematics", |
||||||
|
"sourceRoot": "src" |
||||||
|
} |
@ -0,0 +1,71 @@ |
|||||||
|
{ |
||||||
|
"name": "api-taskme", |
||||||
|
"version": "0.0.1", |
||||||
|
"description": "", |
||||||
|
"author": "", |
||||||
|
"private": true, |
||||||
|
"license": "UNLICENSED", |
||||||
|
"scripts": { |
||||||
|
"prebuild": "rimraf dist", |
||||||
|
"build": "nest build", |
||||||
|
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", |
||||||
|
"start": "nest start", |
||||||
|
"start:dev": "nest start --watch", |
||||||
|
"start:debug": "nest start --debug --watch", |
||||||
|
"start:prod": "node dist/main", |
||||||
|
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", |
||||||
|
"test": "jest", |
||||||
|
"test:watch": "jest --watch", |
||||||
|
"test:cov": "jest --coverage", |
||||||
|
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", |
||||||
|
"test:e2e": "jest --config ./test/jest-e2e.json" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"@nestjs/common": "^7.0.0", |
||||||
|
"@nestjs/core": "^7.0.0", |
||||||
|
"@nestjs/platform-express": "^7.0.0", |
||||||
|
"@nestjs/typeorm": "^8.0.1", |
||||||
|
"dotenv": "^10.0.0", |
||||||
|
"postgres": "^1.0.2", |
||||||
|
"reflect-metadata": "^0.1.13", |
||||||
|
"rimraf": "^3.0.2", |
||||||
|
"rxjs": "^6.5.4", |
||||||
|
"typeorm": "^0.2.36" |
||||||
|
}, |
||||||
|
"devDependencies": { |
||||||
|
"@nestjs/cli": "^7.0.0", |
||||||
|
"@nestjs/schematics": "^7.0.0", |
||||||
|
"@nestjs/testing": "^7.0.0", |
||||||
|
"@types/express": "^4.17.3", |
||||||
|
"@types/jest": "26.0.10", |
||||||
|
"@types/node": "^13.9.1", |
||||||
|
"@types/supertest": "^2.0.8", |
||||||
|
"@typescript-eslint/eslint-plugin": "3.9.1", |
||||||
|
"@typescript-eslint/parser": "3.9.1", |
||||||
|
"eslint": "7.7.0", |
||||||
|
"eslint-config-prettier": "^6.10.0", |
||||||
|
"eslint-plugin-import": "^2.20.1", |
||||||
|
"jest": "26.4.2", |
||||||
|
"prettier": "^1.19.1", |
||||||
|
"supertest": "^4.0.2", |
||||||
|
"ts-jest": "26.2.0", |
||||||
|
"ts-loader": "^6.2.1", |
||||||
|
"ts-node": "9.0.0", |
||||||
|
"tsconfig-paths": "^3.9.0", |
||||||
|
"typescript": "^3.7.4" |
||||||
|
}, |
||||||
|
"jest": { |
||||||
|
"moduleFileExtensions": [ |
||||||
|
"js", |
||||||
|
"json", |
||||||
|
"ts" |
||||||
|
], |
||||||
|
"rootDir": "src", |
||||||
|
"testRegex": ".spec.ts$", |
||||||
|
"transform": { |
||||||
|
"^.+\\.(t|j)s$": "ts-jest" |
||||||
|
}, |
||||||
|
"coverageDirectory": "../coverage", |
||||||
|
"testEnvironment": "node" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
import { Module } from '@nestjs/common'; |
||||||
|
import { $config } from './config'; |
||||||
|
import { UsersModule } from './domain/users/users.module'; |
||||||
|
import { DatabaseModule } from './libs'; |
||||||
|
|
||||||
|
const imports = [ |
||||||
|
UsersModule.forRoot('some'), |
||||||
|
DatabaseModule.forRoot(...$config.getDatabaseConfig()), |
||||||
|
]; |
||||||
|
|
||||||
|
@Module({ imports }) |
||||||
|
export class AppModule {} |
@ -0,0 +1,20 @@ |
|||||||
|
import { DatabaseModule } from 'src/libs'; |
||||||
|
|
||||||
|
const getDatabaseConfig = (): Parameters<typeof DatabaseModule['forRoot']> => { |
||||||
|
return [ |
||||||
|
{ |
||||||
|
type: process.env.DATABASE_TYPE as 'postgres', |
||||||
|
host: process.env.DATABASE_HOST, |
||||||
|
port: Number(process.env.DATABASE_PORT), |
||||||
|
username: process.env.DATABASE_USER, |
||||||
|
password: process.env.DATABASE_PASS, |
||||||
|
database: process.env.DATABASE_DB, |
||||||
|
synchronize: true, |
||||||
|
}, |
||||||
|
[], |
||||||
|
]; |
||||||
|
}; |
||||||
|
|
||||||
|
export const $config = { |
||||||
|
getDatabaseConfig, |
||||||
|
}; |
@ -0,0 +1,5 @@ |
|||||||
|
import { User } from './user.entity'; |
||||||
|
|
||||||
|
export const USERS_ENTITIES = [User]; |
||||||
|
|
||||||
|
export { User }; |
@ -0,0 +1,7 @@ |
|||||||
|
import { BaseEntity, Entity, PrimaryGeneratedColumn } from 'typeorm' |
||||||
|
|
||||||
|
@Entity('users') |
||||||
|
export class User extends BaseEntity { |
||||||
|
@PrimaryGeneratedColumn() |
||||||
|
id: number |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
import { DynamicModule, Module } from '@nestjs/common'; |
||||||
|
|
||||||
|
@Module({}) |
||||||
|
export class UsersModule { |
||||||
|
static options: any; |
||||||
|
|
||||||
|
static forRoot(options: any): DynamicModule { |
||||||
|
UsersModule.options = options; |
||||||
|
|
||||||
|
return { |
||||||
|
module: UsersModule, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
static forFeature(): DynamicModule { |
||||||
|
console.log(UsersModule.options); |
||||||
|
return { |
||||||
|
module: UsersModule, |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
import { DynamicModule, Global, Module } from '@nestjs/common'; |
||||||
|
import { UsersModule } from 'src/domain/users/users.module'; |
||||||
|
import { ConnectionOptions, createConnection, EntitySchema } from 'typeorm'; |
||||||
|
|
||||||
|
@Global() |
||||||
|
@Module({}) |
||||||
|
export class DatabaseModule { |
||||||
|
static forRoot( |
||||||
|
options: Partial<ConnectionOptions>, |
||||||
|
entities: EntitySchema[], |
||||||
|
): DynamicModule { |
||||||
|
return { |
||||||
|
module: DatabaseModule, |
||||||
|
imports: [UsersModule.forFeature()], |
||||||
|
providers: [ |
||||||
|
{ |
||||||
|
provide: 'DATABASE_CONNECTION', |
||||||
|
useFactory: async () => { |
||||||
|
return await createConnection({ |
||||||
|
...options, |
||||||
|
entities, |
||||||
|
} as ConnectionOptions); |
||||||
|
}, |
||||||
|
}, |
||||||
|
], |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
import { Connection } from 'typeorm' |
||||||
|
|
||||||
|
export const getRepositoryHelper = (name, entity) => { |
||||||
|
return { |
||||||
|
provide: name, |
||||||
|
useFactory: (connection: Connection) => connection.getRepository(entity), |
||||||
|
inject: ['DATABASE_CONNECTION'], |
||||||
|
} |
||||||
|
} |
@ -0,0 +1 @@ |
|||||||
|
export * from './get-repository.helper' |
@ -0,0 +1,3 @@ |
|||||||
|
export * from './database.module'; |
||||||
|
|
||||||
|
export * from './helpers' |
@ -0,0 +1,7 @@ |
|||||||
|
import { ConnectionOptions } from 'typeorm'; |
||||||
|
|
||||||
|
export interface IDatabaseAsyncModuleParams { |
||||||
|
imports?: any[]; |
||||||
|
useFactory: (...args: any[]) => Promise<Partial<ConnectionOptions>>; |
||||||
|
inject: any[]; |
||||||
|
} |
@ -0,0 +1 @@ |
|||||||
|
export * from './database-module-params.interfaces'; |
@ -0,0 +1,12 @@ |
|||||||
|
import { NestFactory } from '@nestjs/core'; |
||||||
|
import { AppModule } from './app.module'; |
||||||
|
|
||||||
|
import * as dotenv from 'dotenv'; |
||||||
|
|
||||||
|
dotenv.config(); |
||||||
|
|
||||||
|
async function bootstrap() { |
||||||
|
const app = await NestFactory.create(AppModule); |
||||||
|
await app.listen(3000); |
||||||
|
} |
||||||
|
bootstrap(); |
@ -0,0 +1,24 @@ |
|||||||
|
import { Test, TestingModule } from '@nestjs/testing'; |
||||||
|
import { INestApplication } from '@nestjs/common'; |
||||||
|
import * as request from 'supertest'; |
||||||
|
import { AppModule } from './../src/app.module'; |
||||||
|
|
||||||
|
describe('AppController (e2e)', () => { |
||||||
|
let app: INestApplication; |
||||||
|
|
||||||
|
beforeEach(async () => { |
||||||
|
const moduleFixture: TestingModule = await Test.createTestingModule({ |
||||||
|
imports: [AppModule], |
||||||
|
}).compile(); |
||||||
|
|
||||||
|
app = moduleFixture.createNestApplication(); |
||||||
|
await app.init(); |
||||||
|
}); |
||||||
|
|
||||||
|
it('/ (GET)', () => { |
||||||
|
return request(app.getHttpServer()) |
||||||
|
.get('/') |
||||||
|
.expect(200) |
||||||
|
.expect('Hello World!'); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,9 @@ |
|||||||
|
{ |
||||||
|
"moduleFileExtensions": ["js", "json", "ts"], |
||||||
|
"rootDir": ".", |
||||||
|
"testEnvironment": "node", |
||||||
|
"testRegex": ".e2e-spec.ts$", |
||||||
|
"transform": { |
||||||
|
"^.+\\.(t|j)s$": "ts-jest" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,4 @@ |
|||||||
|
{ |
||||||
|
"extends": "./tsconfig.json", |
||||||
|
"exclude": ["node_modules", "test", "dist", "**/*spec.ts"] |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
{ |
||||||
|
"compilerOptions": { |
||||||
|
"module": "commonjs", |
||||||
|
"declaration": true, |
||||||
|
"removeComments": true, |
||||||
|
"emitDecoratorMetadata": true, |
||||||
|
"experimentalDecorators": true, |
||||||
|
"allowSyntheticDefaultImports": true, |
||||||
|
"target": "es2017", |
||||||
|
"sourceMap": true, |
||||||
|
"outDir": "./dist", |
||||||
|
"baseUrl": "./", |
||||||
|
"incremental": true |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue