Vitalik
3 years ago
commit
851db77594
28 changed files with 9981 additions and 0 deletions
@ -0,0 +1,25 @@
@@ -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 @@
@@ -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 @@
@@ -0,0 +1,10 @@
|
||||
{ |
||||
"tabWidth": 4, |
||||
"useTabs": true, |
||||
"singleQuote": true, |
||||
"semi": false, |
||||
"printWidth": 100, |
||||
"bracketSpacing": true, |
||||
"trailingComma": "all", |
||||
"arrowParens": "avoid" |
||||
} |
@ -0,0 +1,75 @@
@@ -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 @@
@@ -0,0 +1,4 @@
|
||||
{ |
||||
"collection": "@nestjs/schematics", |
||||
"sourceRoot": "src" |
||||
} |
@ -0,0 +1,71 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -0,0 +1,5 @@
|
||||
import { User } from './user.entity'; |
||||
|
||||
export const USERS_ENTITIES = [User]; |
||||
|
||||
export { User }; |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
import { BaseEntity, Entity, PrimaryGeneratedColumn } from 'typeorm' |
||||
|
||||
@Entity('users') |
||||
export class User extends BaseEntity { |
||||
@PrimaryGeneratedColumn() |
||||
id: number |
||||
} |
@ -0,0 +1,21 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -0,0 +1 @@
|
||||
export * from './get-repository.helper' |
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
export * from './database.module'; |
||||
|
||||
export * from './helpers' |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
import { ConnectionOptions } from 'typeorm'; |
||||
|
||||
export interface IDatabaseAsyncModuleParams { |
||||
imports?: any[]; |
||||
useFactory: (...args: any[]) => Promise<Partial<ConnectionOptions>>; |
||||
inject: any[]; |
||||
} |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
export * from './database-module-params.interfaces'; |
@ -0,0 +1,12 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -0,0 +1,4 @@
|
||||
{ |
||||
"extends": "./tsconfig.json", |
||||
"exclude": ["node_modules", "test", "dist", "**/*spec.ts"] |
||||
} |
@ -0,0 +1,15 @@
@@ -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