typescript-express-starter 6.0.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.kr.md +133 -52
  2. package/README.md +134 -54
  3. package/bin/cli.js +4 -3
  4. package/lib/default/.swcrc +41 -0
  5. package/lib/default/Dockerfile +1 -1
  6. package/lib/default/ecosystem.config.js +40 -24
  7. package/lib/default/nodemon.json +2 -2
  8. package/lib/default/package.json +15 -8
  9. package/lib/default/src/app.ts +1 -2
  10. package/lib/default/src/http/auth.http +12 -15
  11. package/lib/default/src/http/users.http +12 -16
  12. package/lib/default/src/index.ts +1 -0
  13. package/lib/default/src/middlewares/auth.middleware.ts +3 -3
  14. package/lib/default/src/models/users.model.ts +5 -5
  15. package/lib/default/src/server.ts +1 -2
  16. package/lib/default/src/services/auth.service.ts +5 -5
  17. package/lib/default/src/services/users.service.ts +3 -3
  18. package/lib/default/src/tests/auth.test.ts +4 -4
  19. package/lib/default/src/tests/users.test.ts +4 -4
  20. package/lib/default/src/utils/logger.ts +5 -5
  21. package/lib/default/src/utils/util.ts +1 -1
  22. package/lib/default/tsconfig.json +2 -2
  23. package/lib/knex/.swcrc +39 -0
  24. package/lib/knex/Dockerfile +1 -1
  25. package/lib/knex/ecosystem.config.js +57 -43
  26. package/lib/knex/knexfile.ts +6 -6
  27. package/lib/knex/nodemon.json +2 -2
  28. package/lib/knex/package.json +14 -8
  29. package/lib/knex/src/app.ts +2 -3
  30. package/lib/knex/src/databases/index.ts +6 -6
  31. package/lib/knex/src/http/auth.http +12 -15
  32. package/lib/knex/src/http/users.http +12 -16
  33. package/lib/knex/src/index.ts +1 -0
  34. package/lib/knex/src/middlewares/auth.middleware.ts +4 -4
  35. package/lib/knex/src/server.ts +1 -2
  36. package/lib/knex/src/services/auth.service.ts +5 -5
  37. package/lib/knex/src/services/users.service.ts +3 -3
  38. package/lib/knex/src/tests/auth.test.ts +2 -2
  39. package/lib/knex/src/tests/index.test.ts +1 -1
  40. package/lib/knex/src/tests/users.test.ts +2 -2
  41. package/lib/knex/src/utils/logger.ts +5 -5
  42. package/lib/knex/src/utils/util.ts +1 -1
  43. package/lib/knex/tsconfig.json +2 -2
  44. package/lib/mongoose/.swcrc +39 -0
  45. package/lib/mongoose/Dockerfile +1 -1
  46. package/lib/mongoose/docker-compose.yml +0 -4
  47. package/lib/mongoose/ecosystem.config.js +42 -27
  48. package/lib/mongoose/nodemon.json +2 -2
  49. package/lib/mongoose/package.json +15 -8
  50. package/lib/mongoose/src/app.ts +2 -3
  51. package/lib/mongoose/src/configs/development.json +1 -1
  52. package/lib/mongoose/src/configs/production.json +1 -1
  53. package/lib/mongoose/src/configs/test.json +1 -1
  54. package/lib/mongoose/src/http/auth.http +32 -0
  55. package/lib/mongoose/src/http/users.http +34 -0
  56. package/lib/mongoose/src/index.ts +1 -0
  57. package/lib/mongoose/src/middlewares/auth.middleware.ts +3 -3
  58. package/lib/mongoose/src/server.ts +1 -2
  59. package/lib/mongoose/src/services/auth.service.ts +5 -5
  60. package/lib/mongoose/src/services/users.service.ts +3 -3
  61. package/lib/mongoose/src/utils/logger.ts +5 -5
  62. package/lib/mongoose/src/utils/util.ts +1 -1
  63. package/lib/mongoose/tsconfig.json +2 -2
  64. package/lib/prisma/.env +1 -1
  65. package/lib/prisma/.swcrc +37 -0
  66. package/lib/prisma/Dockerfile +1 -1
  67. package/lib/prisma/docker-compose.yml +1 -6
  68. package/lib/prisma/ecosystem.config.js +40 -24
  69. package/lib/prisma/nodemon.json +2 -2
  70. package/lib/prisma/package.json +17 -10
  71. package/lib/prisma/src/app.ts +2 -3
  72. package/lib/prisma/src/http/auth.http +12 -15
  73. package/lib/prisma/src/http/users.http +12 -16
  74. package/lib/prisma/src/index.ts +1 -0
  75. package/lib/prisma/src/middlewares/auth.middleware.ts +4 -4
  76. package/lib/prisma/src/server.ts +1 -2
  77. package/lib/prisma/src/services/auth.service.ts +5 -5
  78. package/lib/prisma/src/services/users.service.ts +3 -3
  79. package/lib/prisma/src/utils/logger.ts +5 -5
  80. package/lib/prisma/src/utils/util.ts +1 -1
  81. package/lib/prisma/tsconfig.json +2 -2
  82. package/lib/routing-controllers/.swcrc +37 -0
  83. package/lib/routing-controllers/Dockerfile +1 -1
  84. package/lib/routing-controllers/ecosystem.config.js +40 -24
  85. package/lib/routing-controllers/nodemon.json +2 -2
  86. package/lib/routing-controllers/package.json +18 -11
  87. package/lib/routing-controllers/src/app.ts +33 -6
  88. package/lib/routing-controllers/src/http/auth.http +12 -15
  89. package/lib/routing-controllers/src/http/users.http +12 -16
  90. package/lib/routing-controllers/src/index.ts +1 -0
  91. package/lib/routing-controllers/src/middlewares/auth.middleware.ts +3 -3
  92. package/lib/routing-controllers/src/middlewares/validation.middleware.ts +10 -2
  93. package/lib/routing-controllers/src/models/users.model.ts +5 -5
  94. package/lib/routing-controllers/src/server.ts +1 -3
  95. package/lib/routing-controllers/src/services/auth.service.ts +5 -5
  96. package/lib/routing-controllers/src/services/users.service.ts +3 -3
  97. package/lib/routing-controllers/src/utils/logger.ts +5 -5
  98. package/lib/routing-controllers/src/utils/util.ts +1 -1
  99. package/lib/routing-controllers/tsconfig.json +2 -2
  100. package/lib/sequelize/.swcrc +39 -0
  101. package/lib/sequelize/Dockerfile +1 -1
  102. package/lib/sequelize/docker-compose.yml +1 -6
  103. package/lib/sequelize/ecosystem.config.js +42 -27
  104. package/lib/sequelize/nodemon.json +2 -2
  105. package/lib/sequelize/package.json +15 -8
  106. package/lib/sequelize/src/app.ts +1 -2
  107. package/lib/sequelize/src/configs/development.json +2 -2
  108. package/lib/sequelize/src/configs/production.json +1 -1
  109. package/lib/sequelize/src/configs/test.json +1 -1
  110. package/lib/sequelize/src/http/auth.http +32 -0
  111. package/lib/sequelize/src/http/users.http +34 -0
  112. package/lib/sequelize/src/index.ts +1 -0
  113. package/lib/sequelize/src/middlewares/auth.middleware.ts +4 -4
  114. package/lib/sequelize/src/server.ts +1 -2
  115. package/lib/sequelize/src/services/auth.service.ts +5 -5
  116. package/lib/sequelize/src/services/users.service.ts +3 -3
  117. package/lib/sequelize/src/utils/logger.ts +5 -5
  118. package/lib/sequelize/src/utils/util.ts +1 -1
  119. package/lib/sequelize/tsconfig.json +2 -2
  120. package/lib/starter.js +8 -12
  121. package/lib/typeorm/.swcrc +39 -0
  122. package/lib/typeorm/Dockerfile +1 -1
  123. package/lib/typeorm/docker-compose.yml +1 -1
  124. package/lib/typeorm/ecosystem.config.js +42 -27
  125. package/lib/typeorm/nodemon.json +2 -2
  126. package/lib/typeorm/package.json +15 -8
  127. package/lib/typeorm/src/app.ts +1 -2
  128. package/lib/typeorm/src/configs/development.json +1 -1
  129. package/lib/typeorm/src/configs/production.json +1 -1
  130. package/lib/typeorm/src/configs/test.json +1 -1
  131. package/lib/typeorm/src/databases/index.ts +5 -5
  132. package/lib/typeorm/src/{entity → entities}/users.entity.ts +3 -3
  133. package/lib/typeorm/src/http/auth.http +12 -15
  134. package/lib/typeorm/src/http/users.http +12 -16
  135. package/lib/typeorm/src/index.ts +1 -0
  136. package/lib/typeorm/src/middlewares/auth.middleware.ts +5 -9
  137. package/lib/typeorm/src/server.ts +1 -2
  138. package/lib/typeorm/src/services/auth.service.ts +13 -17
  139. package/lib/typeorm/src/services/users.service.ts +16 -22
  140. package/lib/typeorm/src/utils/logger.ts +5 -5
  141. package/lib/typeorm/src/utils/util.ts +1 -1
  142. package/lib/typeorm/tsconfig.json +3 -3
  143. package/package.json +12 -4
@@ -0,0 +1,41 @@
1
+ {
2
+ "jsc": {
3
+ "parser": {
4
+ "syntax": "typescript",
5
+ "tsx": false,
6
+ "dynamicImport": true,
7
+ "decorators": true
8
+ },
9
+ "transform": {
10
+ "legacyDecorator": true,
11
+ "decoratorMetadata": true
12
+ },
13
+ "target": "es2017",
14
+ "externalHelpers": false,
15
+ "keepClassNames": true,
16
+ "loose": false,
17
+ "minify": {
18
+ "compress": false,
19
+ "mangle": false
20
+ },
21
+ "baseUrl": "src",
22
+ "paths": {
23
+ "@/*": ["*"],
24
+ "@controllers/*": ["controllers/*"],
25
+ "@dtos/*": ["dtos/*"],
26
+ "@exceptions/*": ["exceptions/*"],
27
+ "@interfaces/*": ["interfaces/*"],
28
+ "@middlewares/*": ["middlewares/*"],
29
+ "@models/*": ["models/*"],
30
+ "@routes/*": ["routes/*"],
31
+ "@services/*": ["services/*"],
32
+ "@utils/*": ["utils/*"]
33
+ }
34
+ },
35
+ "module": {
36
+ "type": "commonjs"
37
+ }
38
+ }
39
+
40
+
41
+
@@ -9,7 +9,7 @@ RUN npm install
9
9
 
10
10
  EXPOSE 3000
11
11
 
12
- # Dvelopment build stage
12
+ # Development build stage
13
13
  FROM common-build-stage as development-build-stage
14
14
 
15
15
  ENV NODE_ENV development
@@ -1,41 +1,57 @@
1
- module.exports = {
1
+ /**
2
+ * @description pm2 configuration file.
3
+ * @example
4
+ * production mode :: pm2 start ecosystem.config.js --only prod
5
+ * development mode :: pm2 start ecosystem.config.js --only dev
6
+ */
7
+ module.exports = {
2
8
  apps: [
3
9
  {
4
- name: 'myapp',
5
- // package.json에 정의된 npm run start를 실행하게 해서 PM2로 관리하게 한다.
6
- script: 'npm',
7
- args: 'run dev',
8
- instances: 2,
9
- autorestart: true,
10
- watch: false,
11
- max_memory_restart: '1G',
12
- // production mode
13
- // pm2 start ecosystem.config.js
14
- env: {
15
- HOST: '0.0.0.0',
10
+ name: 'prod', // pm2 start App name
11
+ script: 'dist/server.js',
12
+ exec_mode: 'cluster', // 'cluster' or 'fork'
13
+ instance_var: 'INSTANCE_ID', // instance variable
14
+ instances: 2, // pm2 instance count
15
+ autorestart: true, // auto restart if process crash
16
+ watch: false, // files change automatic restart
17
+ ignore_watch: ['node_modules', 'logs'], // ignore files change
18
+ max_memory_restart: '1G', // restart if process use more than 1G memory
19
+ merge_logs: true, // if true, stdout and stderr will be merged and sent to pm2 log
20
+ output: './logs/access.log', // pm2 log file
21
+ error: './logs/error.log', // pm2 error log file
22
+ env: { // environment variable
16
23
  PORT: 3000,
17
24
  NODE_ENV: 'production',
18
25
  },
19
- // development mode
20
- // pm2 start ecosystem.config.js --env development
21
- env_development: {
22
- HOST: '0.0.0.0',
26
+ },
27
+ {
28
+ name: 'dev', // pm2 start App name
29
+ script: 'ts-node', // ts-node
30
+ args: '-r tsconfig-paths/register --transpile-only src/server.ts', // ts-node args
31
+ exec_mode: 'cluster', // 'cluster' or 'fork'
32
+ instance_var: 'INSTANCE_ID', // instance variable
33
+ instances: 2, // pm2 instance count
34
+ autorestart: true, // auto restart if process crash
35
+ watch: false, // files change automatic restart
36
+ ignore_watch: ['node_modules', 'logs'], // ignore files change
37
+ max_memory_restart: '1G', // restart if process use more than 1G memory
38
+ merge_logs: true, // if true, stdout and stderr will be merged and sent to pm2 log
39
+ output: './logs/access.log', // pm2 log file
40
+ error: './logs/error.log', // pm2 error log file
41
+ env: { // environment variable
23
42
  PORT: 3000,
24
43
  NODE_ENV: 'development',
25
44
  },
26
- output: './logs/console.log',
27
- error: './logs/consoleError.log',
28
45
  },
29
46
  ],
30
47
  deploy: {
31
48
  production: {
32
- // sample
33
- user: 'node',
34
- host: '123.12.123.1',
49
+ user: 'user',
50
+ host: '0.0.0.0',
35
51
  ref: 'origin/master',
36
52
  repo: 'git@github.com:repo.git',
37
- path: '/var/www/production',
38
- 'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production',
53
+ path: 'dist/server.js',
54
+ 'post-deploy': 'npm install && npm run build && pm2 reload ecosystem.config.js --only prod',
39
55
  },
40
56
  },
41
57
  };
@@ -5,8 +5,8 @@
5
5
  ],
6
6
  "ext": "js,ts,json",
7
7
  "ignore": [
8
- "src/**/*.spec.ts",
9
- "src/**/*.test.ts"
8
+ "src/logs/*",
9
+ "src/**/*.{spec,test}.ts"
10
10
  ],
11
11
  "exec": "ts-node -r tsconfig-paths/register --transpile-only src/server.ts"
12
12
  }
@@ -7,10 +7,13 @@
7
7
  "scripts": {
8
8
  "start": "npm run build && cross-env NODE_ENV=production node dist/server.js",
9
9
  "dev": "cross-env NODE_ENV=development nodemon",
10
- "build": "tsc && npx tsc-alias",
10
+ "build": "swc src -d dist --source-maps --copy-files",
11
+ "build:tsc": "tsc && tsc-alias",
11
12
  "test": "jest --forceExit --detectOpenHandles",
12
13
  "lint": "eslint --ignore-path .gitignore --ext .ts src/",
13
- "lint:fix": "npm run lint -- --fix"
14
+ "lint:fix": "npm run lint -- --fix",
15
+ "deploy:prod": "npm run build && pm2 start ecosystem.config.js --only prod",
16
+ "deploy:dev": "pm2 start ecosystem.config.js --only dev"
14
17
  },
15
18
  "dependencies": {
16
19
  "bcrypt": "^5.0.1",
@@ -20,24 +23,21 @@
20
23
  "config": "^3.3.6",
21
24
  "cookie-parser": "^1.4.5",
22
25
  "cors": "^2.8.5",
23
- "cross-env": "^7.0.3",
24
26
  "dotenv": "^10.0.0",
25
27
  "envalid": "^7.1.0",
26
28
  "express": "^4.17.1",
27
29
  "helmet": "^4.6.0",
28
30
  "hpp": "^0.2.3",
29
- "jest": "^27.0.6",
30
31
  "jsonwebtoken": "^8.5.1",
31
32
  "morgan": "^1.10.0",
32
33
  "swagger-jsdoc": "^6.0.0",
33
34
  "swagger-ui-express": "^4.1.6",
34
- "ts-jest": "^27.0.3",
35
- "ts-node": "^10.0.0",
36
- "typescript": "^4.3.5",
37
35
  "winston": "^3.3.3",
38
36
  "winston-daily-rotate-file": "^4.5.5"
39
37
  },
40
38
  "devDependencies": {
39
+ "@swc/cli": "^0.1.51",
40
+ "@swc/core": "^1.2.108",
41
41
  "@types/bcrypt": "^5.0.0",
42
42
  "@types/compression": "^1.7.1",
43
43
  "@types/config": "^0.0.39",
@@ -57,16 +57,23 @@
57
57
  "@types/winston": "^2.4.4",
58
58
  "@typescript-eslint/eslint-plugin": "^4.28.2",
59
59
  "@typescript-eslint/parser": "^4.28.2",
60
+ "cross-env": "^7.0.3",
60
61
  "eslint": "^7.30.0",
61
62
  "eslint-config-prettier": "^8.3.0",
62
63
  "eslint-plugin-prettier": "^3.4.0",
63
64
  "husky": "^7.0.1",
65
+ "jest": "^27.0.6",
64
66
  "lint-staged": "^11.0.0",
65
67
  "node-config": "^0.0.2",
66
68
  "node-gyp": "^8.1.0",
67
69
  "nodemon": "^2.0.9",
70
+ "pm2": "^5.1.0",
68
71
  "prettier": "^2.3.2",
69
72
  "supertest": "^6.1.3",
70
- "tsconfig-paths": "^3.10.1"
73
+ "tsc-alias": "^1.4.1",
74
+ "tsconfig-paths": "^3.10.1",
75
+ "ts-jest": "^27.0.3",
76
+ "ts-node": "^10.0.0",
77
+ "typescript": "^4.3.5"
71
78
  }
72
79
  }
@@ -1,5 +1,4 @@
1
- process.env['NODE_CONFIG_DIR'] = __dirname + '/configs';
2
-
1
+ import '@/index';
3
2
  import compression from 'compression';
4
3
  import cookieParser from 'cookie-parser';
5
4
  import cors from 'cors';
@@ -1,35 +1,32 @@
1
- # auth API
2
-
3
- ###
4
1
  # baseURL
5
2
  @baseURL = http://localhost:3000
6
3
 
7
4
  ###
8
- # signup
9
- POST {{baseURL}}/signup
5
+ # User Signup
6
+ POST {{ baseURL }}/signup
10
7
  Content-Type: application/json
11
8
 
12
9
  {
13
- "email": "example@gmail.com",
14
- "password": "qwer1234"
10
+ "email": "example@email.com",
11
+ "password": "password"
15
12
  }
16
13
 
17
14
  ###
18
- # Login
19
- POST {{baseURL}}/login
15
+ # User Login
16
+ POST {{ baseURL }}/login
20
17
  Content-Type: application/json
21
18
 
22
19
  {
23
- "email": "lim@gmail.com",
24
- "password": "q1w2e3r4"
20
+ "email": "example@email.com",
21
+ "password": "password"
25
22
  }
26
23
 
27
24
  ###
28
- # Logout
29
- POST {{baseURL}}/logout
25
+ # User Logout
26
+ POST {{ baseURL }}/logout
30
27
  Content-Type: application/json
31
28
 
32
29
  {
33
- "email": "lim@gmail.com",
34
- "password": "q1w2e3r4"
30
+ "email": "example@email.com",
31
+ "password": "password"
35
32
  }
@@ -1,38 +1,34 @@
1
- # users API
2
-
3
- ###
4
1
  # baseURL
5
2
  @baseURL = http://localhost:3000
6
3
 
7
4
  ###
8
5
  # Find All Users
9
- GET {{baseURL}}/users
6
+ GET {{ baseURL }}/users
10
7
 
11
8
  ###
12
9
  # Find User By Id
13
- GET {{baseURL}}/users/1
14
-
10
+ GET {{ baseURL }}/users/1
15
11
 
16
12
  ###
17
- # Add User
18
- POST {{baseURL}}/users
13
+ # Create User
14
+ POST {{ baseURL }}/users
19
15
  Content-Type: application/json
20
16
 
21
17
  {
22
- "email": "example@gmail.com",
23
- "password": "qwer1234"
18
+ "email": "example@email.com",
19
+ "password": "password"
24
20
  }
25
21
 
26
22
  ###
27
- # Edit User By Id
28
- PUT {{baseURL}}/users/1
23
+ # Modify User By Id
24
+ PUT {{ baseURL }}/users/1
29
25
  Content-Type: application/json
30
26
 
31
27
  {
32
- "email": "example@gmail.com",
33
- "password": "qwer1234"
28
+ "email": "example@email.com",
29
+ "password": "password"
34
30
  }
35
31
 
36
32
  ###
37
- # Del User By Id
38
- DELETE {{baseURL}}/users/1
33
+ # Delete User By Id
34
+ DELETE {{ baseURL }}/users/1
@@ -0,0 +1 @@
1
+ process.env['NODE_CONFIG_DIR'] = __dirname + '/configs';
@@ -1,17 +1,17 @@
1
1
  import config from 'config';
2
2
  import { NextFunction, Response } from 'express';
3
- import jwt from 'jsonwebtoken';
3
+ import { verify } from 'jsonwebtoken';
4
4
  import { HttpException } from '@exceptions/HttpException';
5
5
  import { DataStoredInToken, RequestWithUser } from '@interfaces/auth.interface';
6
6
  import userModel from '@models/users.model';
7
7
 
8
8
  const authMiddleware = async (req: RequestWithUser, res: Response, next: NextFunction) => {
9
9
  try {
10
- const Authorization = req.cookies['Authorization'] || req.header('Authorization').split('Bearer ')[1] || null;
10
+ const Authorization = req.cookies['Authorization'] || (req.header('Authorization') ? req.header('Authorization').split('Bearer ')[1] : null);
11
11
 
12
12
  if (Authorization) {
13
13
  const secretKey: string = config.get('secretKey');
14
- const verificationResponse = (await jwt.verify(Authorization, secretKey)) as DataStoredInToken;
14
+ const verificationResponse = (await verify(Authorization, secretKey)) as DataStoredInToken;
15
15
  const userId = verificationResponse.id;
16
16
  const findUser = userModel.find(user => user.id === userId);
17
17
 
@@ -1,11 +1,11 @@
1
1
  import { User } from '@interfaces/users.interface';
2
2
 
3
- // password: q1w2e3r4
3
+ // password: password
4
4
  const userModel: User[] = [
5
- { id: 1, email: 'lim@gmail.com', password: '$2b$10$hmrwtGwC.QlfWt6YWaT3S.FP9CarS3.V9n3Qr.d9y2ovcan0oxs56' },
6
- { id: 2, email: 'kim@gmail.com', password: '$2b$10$hmrwtGwC.QlfWt6YWaT3S.FP9CarS3.V9n3Qr.d9y2ovcan0oxs56' },
7
- { id: 3, email: 'park@gmail.com', password: '$2b$10$hmrwtGwC.QlfWt6YWaT3S.FP9CarS3.V9n3Qr.d9y2ovcan0oxs56' },
8
- { id: 4, email: 'choi@gmail.com', password: '$2b$10$hmrwtGwC.QlfWt6YWaT3S.FP9CarS3.V9n3Qr.d9y2ovcan0oxs56' },
5
+ { id: 1, email: 'example1@email.com', password: '$2b$10$TBEfaCe1oo.2jfkBDWcj/usBj4oECsW2wOoDXpCa2IH9xqCpEK/hC' },
6
+ { id: 2, email: 'example2@email.com', password: '$2b$10$TBEfaCe1oo.2jfkBDWcj/usBj4oECsW2wOoDXpCa2IH9xqCpEK/hC' },
7
+ { id: 3, email: 'example3@email.com', password: '$2b$10$TBEfaCe1oo.2jfkBDWcj/usBj4oECsW2wOoDXpCa2IH9xqCpEK/hC' },
8
+ { id: 4, email: 'example4@email.com', password: '$2b$10$TBEfaCe1oo.2jfkBDWcj/usBj4oECsW2wOoDXpCa2IH9xqCpEK/hC' },
9
9
  ];
10
10
 
11
11
  export default userModel;
@@ -1,6 +1,5 @@
1
- process.env['NODE_CONFIG_DIR'] = __dirname + '/configs';
2
-
3
1
  import 'dotenv/config';
2
+ import '@/index';
4
3
  import App from '@/app';
5
4
  import AuthRoute from '@routes/auth.route';
6
5
  import IndexRoute from '@routes/index.route';
@@ -1,6 +1,6 @@
1
- import bcrypt from 'bcrypt';
1
+ import { hash, compare } from 'bcrypt';
2
2
  import config from 'config';
3
- import jwt from 'jsonwebtoken';
3
+ import { sign } from 'jsonwebtoken';
4
4
  import { CreateUserDto } from '@dtos/users.dto';
5
5
  import { HttpException } from '@exceptions/HttpException';
6
6
  import { DataStoredInToken, TokenData } from '@interfaces/auth.interface';
@@ -17,7 +17,7 @@ class AuthService {
17
17
  const findUser: User = this.users.find(user => user.email === userData.email);
18
18
  if (findUser) throw new HttpException(409, `You're email ${userData.email} already exists`);
19
19
 
20
- const hashedPassword = await bcrypt.hash(userData.password, 10);
20
+ const hashedPassword = await hash(userData.password, 10);
21
21
  const createUserData: User = { id: this.users.length + 1, ...userData, password: hashedPassword };
22
22
 
23
23
  return createUserData;
@@ -29,7 +29,7 @@ class AuthService {
29
29
  const findUser: User = this.users.find(user => user.email === userData.email);
30
30
  if (!findUser) throw new HttpException(409, `You're email ${userData.email} not found`);
31
31
 
32
- const isPasswordMatching: boolean = await bcrypt.compare(userData.password, findUser.password);
32
+ const isPasswordMatching: boolean = await compare(userData.password, findUser.password);
33
33
  if (!isPasswordMatching) throw new HttpException(409, "You're password not matching");
34
34
 
35
35
  const tokenData = this.createToken(findUser);
@@ -52,7 +52,7 @@ class AuthService {
52
52
  const secretKey: string = config.get('secretKey');
53
53
  const expiresIn: number = 60 * 60;
54
54
 
55
- return { expiresIn, token: jwt.sign(dataStoredInToken, secretKey, { expiresIn }) };
55
+ return { expiresIn, token: sign(dataStoredInToken, secretKey, { expiresIn }) };
56
56
  }
57
57
 
58
58
  public createCookie(tokenData: TokenData): string {
@@ -1,4 +1,4 @@
1
- import bcrypt from 'bcrypt';
1
+ import { hash } from 'bcrypt';
2
2
  import { CreateUserDto } from '@dtos/users.dto';
3
3
  import { HttpException } from '@exceptions/HttpException';
4
4
  import { User } from '@interfaces/users.interface';
@@ -26,7 +26,7 @@ class UserService {
26
26
  const findUser: User = this.users.find(user => user.email === userData.email);
27
27
  if (findUser) throw new HttpException(409, `Your email ${userData.email} already exists`);
28
28
 
29
- const hashedPassword = await bcrypt.hash(userData.password, 10);
29
+ const hashedPassword = await hash(userData.password, 10);
30
30
  const createUserData: User = { id: this.users.length + 1, ...userData, password: hashedPassword };
31
31
  this.users = [...this.users, createUserData];
32
32
 
@@ -39,7 +39,7 @@ class UserService {
39
39
  const findUser: User = this.users.find(user => user.id === userId);
40
40
  if (!findUser) throw new HttpException(409, "You're not user");
41
41
 
42
- const hashedPassword = await bcrypt.hash(userData.password, 10);
42
+ const hashedPassword = await hash(userData.password, 10);
43
43
  const updateUserData: User[] = this.users.map((user: User) => {
44
44
  if (user.id === findUser.id) user = { id: userId, ...userData, password: hashedPassword };
45
45
  return user;
@@ -11,8 +11,8 @@ describe('Testing Auth', () => {
11
11
  describe('[POST] /signup', () => {
12
12
  it('response should have the Create userData', () => {
13
13
  const userData: CreateUserDto = {
14
- email: 'test@email.com',
15
- password: 'q1w2e3r4',
14
+ email: 'example@email.com',
15
+ password: 'password',
16
16
  };
17
17
  const authRoute = new AuthRoute();
18
18
  const app = new App([authRoute]);
@@ -24,8 +24,8 @@ describe('Testing Auth', () => {
24
24
  describe('[POST] /login', () => {
25
25
  it('response should have the Set-Cookie header with the Authorization token', async () => {
26
26
  const userData: CreateUserDto = {
27
- email: 'test@email.com',
28
- password: 'q1w2e3r4',
27
+ email: 'example1@email.com',
28
+ password: 'password',
29
29
  };
30
30
 
31
31
  const authRoute = new AuthRoute();
@@ -34,8 +34,8 @@ describe('Testing Users', () => {
34
34
  describe('[POST] /users', () => {
35
35
  it('response statusCode 201 / created', async () => {
36
36
  const userData: CreateUserDto = {
37
- email: 'test@email.com',
38
- password: 'q1w2e3r4',
37
+ email: 'example@email.com',
38
+ password: 'password',
39
39
  };
40
40
  const usersRoute = new UserRoute();
41
41
  const app = new App([usersRoute]);
@@ -48,8 +48,8 @@ describe('Testing Users', () => {
48
48
  it('response statusCode 200 / updated', async () => {
49
49
  const userId = 1;
50
50
  const userData: CreateUserDto = {
51
- email: 'test@email.com',
52
- password: 'q1w2e3r4',
51
+ email: 'example@email.com',
52
+ password: 'password',
53
53
  };
54
54
  const usersRoute = new UserRoute();
55
55
  const app = new App([usersRoute]);
@@ -1,14 +1,14 @@
1
1
  import config from 'config';
2
- import fs from 'fs';
3
- import path from 'path';
2
+ import { existsSync, mkdirSync } from 'fs';
3
+ import { join } from 'path';
4
4
  import winston from 'winston';
5
5
  import winstonDaily from 'winston-daily-rotate-file';
6
6
 
7
7
  // logs dir
8
- const logDir: string = path.join(__dirname, config.get('log.dir'));
8
+ const logDir: string = join(__dirname, config.get('log.dir'));
9
9
 
10
- if (!fs.existsSync(logDir)) {
11
- fs.mkdirSync(logDir);
10
+ if (!existsSync(logDir)) {
11
+ mkdirSync(logDir);
12
12
  }
13
13
 
14
14
  // Define log format
@@ -9,7 +9,7 @@ export const isEmpty = (value: string | number | object): boolean => {
9
9
  return true;
10
10
  } else if (typeof value !== 'number' && value === '') {
11
11
  return true;
12
- } else if (value === 'undefined' || value === undefined) {
12
+ } else if (typeof value === 'undefined' || value === undefined) {
13
13
  return true;
14
14
  } else if (value !== null && typeof value === 'object' && !Object.keys(value).length) {
15
15
  return true;
@@ -13,7 +13,7 @@
13
13
  "pretty": true,
14
14
  "sourceMap": true,
15
15
  "declaration": true,
16
- "outDir": "./dist",
16
+ "outDir": "dist",
17
17
  "allowJs": true,
18
18
  "noEmit": false,
19
19
  "esModuleInterop": true,
@@ -34,5 +34,5 @@
34
34
  }
35
35
  },
36
36
  "include": ["src/**/*.ts", "src/**/*.json", ".env"],
37
- "exclude": ["node_modules"]
37
+ "exclude": ["node_modules", "src/http", "src/logs", "src/tests"]
38
38
  }
@@ -0,0 +1,39 @@
1
+ {
2
+ "jsc": {
3
+ "parser": {
4
+ "syntax": "typescript",
5
+ "tsx": false,
6
+ "dynamicImport": true,
7
+ "decorators": true
8
+ },
9
+ "transform": {
10
+ "legacyDecorator": true,
11
+ "decoratorMetadata": true
12
+ },
13
+ "target": "es2017",
14
+ "externalHelpers": false,
15
+ "keepClassNames": true,
16
+ "loose": false,
17
+ "minify": {
18
+ "compress": false,
19
+ "mangle": false
20
+ },
21
+ "baseUrl": "src",
22
+ "paths": {
23
+ "@/*": ["*"],
24
+ "@controllers/*": ["controllers/*"],
25
+ "@databases": ["databases"],
26
+ "@dtos/*": ["dtos/*"],
27
+ "@exceptions/*": ["exceptions/*"],
28
+ "@interfaces/*": ["interfaces/*"],
29
+ "@middlewares/*": ["middlewares/*"],
30
+ "@models/*": ["models/*"],
31
+ "@routes/*": ["routes/*"],
32
+ "@services/*": ["services/*"],
33
+ "@utils/*": ["utils/*"]
34
+ }
35
+ },
36
+ "module": {
37
+ "type": "commonjs"
38
+ }
39
+ }
@@ -9,7 +9,7 @@ RUN npm install
9
9
 
10
10
  EXPOSE 3000
11
11
 
12
- # Dvelopment build stage
12
+ # Development build stage
13
13
  FROM common-build-stage as development-build-stage
14
14
 
15
15
  ENV NODE_ENV development