typescript-express-starter 6.2.1 → 8.0.1

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 (222) hide show
  1. package/README.kr.md +55 -26
  2. package/README.md +54 -25
  3. package/bin/cli.js +4 -3
  4. package/lib/default/.swcrc +41 -0
  5. package/lib/default/nodemon.json +2 -2
  6. package/lib/default/package.json +12 -8
  7. package/lib/default/src/app.ts +1 -2
  8. package/lib/default/src/http/auth.http +12 -15
  9. package/lib/default/src/http/users.http +12 -16
  10. package/lib/default/src/index.ts +1 -0
  11. package/lib/default/src/middlewares/auth.middleware.ts +3 -3
  12. package/lib/default/src/models/users.model.ts +5 -5
  13. package/lib/default/src/server.ts +1 -2
  14. package/lib/default/src/services/auth.service.ts +5 -5
  15. package/lib/default/src/services/users.service.ts +3 -3
  16. package/lib/default/src/tests/auth.test.ts +4 -4
  17. package/lib/default/src/tests/users.test.ts +4 -4
  18. package/lib/default/src/utils/logger.ts +5 -5
  19. package/lib/default/tsconfig.json +2 -2
  20. package/lib/graphql/.dockerignore +18 -0
  21. package/lib/graphql/.editorconfig +9 -0
  22. package/lib/graphql/.env +1 -0
  23. package/lib/graphql/.eslintignore +1 -0
  24. package/lib/graphql/.eslintrc +18 -0
  25. package/lib/graphql/.huskyrc +5 -0
  26. package/lib/graphql/.lintstagedrc.json +5 -0
  27. package/lib/graphql/.prettierrc +8 -0
  28. package/lib/graphql/.swcrc +39 -0
  29. package/lib/graphql/.vscode/launch.json +35 -0
  30. package/lib/graphql/.vscode/settings.json +6 -0
  31. package/lib/graphql/Dockerfile +24 -0
  32. package/lib/graphql/Makefile +6 -0
  33. package/lib/graphql/docker-compose.yml +50 -0
  34. package/lib/graphql/ecosystem.config.js +59 -0
  35. package/lib/graphql/jest.config.js +12 -0
  36. package/lib/graphql/nginx.conf +40 -0
  37. package/lib/graphql/nodemon.json +12 -0
  38. package/lib/graphql/package.json +79 -0
  39. package/lib/graphql/src/app.ts +105 -0
  40. package/lib/graphql/src/configs/development.json +19 -0
  41. package/lib/graphql/src/configs/production.json +19 -0
  42. package/lib/graphql/src/configs/test.json +19 -0
  43. package/lib/graphql/src/databases/index.ts +24 -0
  44. package/lib/graphql/src/dtos/users.dto.ts +14 -0
  45. package/lib/{typeorm/src/entity → graphql/src/entities}/users.entity.ts +3 -3
  46. package/lib/graphql/src/exceptions/HttpException.ts +10 -0
  47. package/lib/graphql/src/http/auth.http +49 -0
  48. package/lib/graphql/src/http/users.http +78 -0
  49. package/lib/graphql/src/index.ts +1 -0
  50. package/lib/graphql/src/interfaces/auth.interface.ts +14 -0
  51. package/lib/graphql/src/interfaces/db.interface.ts +7 -0
  52. package/lib/graphql/src/interfaces/users.interface.ts +5 -0
  53. package/lib/graphql/src/middlewares/auth.middleware.ts +32 -0
  54. package/lib/graphql/src/middlewares/error.middleware.ts +17 -0
  55. package/lib/graphql/src/repositories/auth.repository.ts +61 -0
  56. package/lib/graphql/src/repositories/users.repository.ts +60 -0
  57. package/lib/graphql/src/resolvers/auth.resolver.ts +32 -0
  58. package/lib/graphql/src/resolvers/users.resolver.ts +47 -0
  59. package/lib/graphql/src/server.ts +14 -0
  60. package/lib/graphql/src/tests/auth.test.ts +52 -0
  61. package/lib/graphql/src/tests/index.test.ts +18 -0
  62. package/lib/graphql/src/tests/users.test.ts +71 -0
  63. package/lib/graphql/src/typedefs/users.type.ts +13 -0
  64. package/lib/graphql/src/utils/logger.ts +75 -0
  65. package/lib/graphql/src/utils/util.ts +19 -0
  66. package/lib/graphql/src/utils/validateEnv.ts +10 -0
  67. package/lib/graphql/tsconfig.json +39 -0
  68. package/lib/knex/.swcrc +39 -0
  69. package/lib/knex/knexfile.ts +6 -6
  70. package/lib/knex/nodemon.json +2 -2
  71. package/lib/knex/package.json +11 -8
  72. package/lib/knex/src/app.ts +2 -3
  73. package/lib/knex/src/databases/index.ts +6 -6
  74. package/lib/knex/src/http/auth.http +12 -15
  75. package/lib/knex/src/http/users.http +12 -16
  76. package/lib/knex/src/index.ts +1 -0
  77. package/lib/knex/src/middlewares/auth.middleware.ts +4 -4
  78. package/lib/knex/src/server.ts +1 -2
  79. package/lib/knex/src/services/auth.service.ts +5 -5
  80. package/lib/knex/src/services/users.service.ts +3 -3
  81. package/lib/knex/src/tests/auth.test.ts +2 -2
  82. package/lib/knex/src/tests/index.test.ts +1 -1
  83. package/lib/knex/src/tests/users.test.ts +2 -2
  84. package/lib/knex/src/utils/logger.ts +5 -5
  85. package/lib/knex/tsconfig.json +2 -2
  86. package/lib/mongoose/.swcrc +39 -0
  87. package/lib/mongoose/docker-compose.yml +0 -4
  88. package/lib/mongoose/nodemon.json +2 -2
  89. package/lib/mongoose/package.json +12 -8
  90. package/lib/mongoose/src/app.ts +2 -3
  91. package/lib/mongoose/src/configs/development.json +1 -1
  92. package/lib/mongoose/src/configs/production.json +1 -1
  93. package/lib/mongoose/src/configs/test.json +1 -1
  94. package/lib/mongoose/src/http/auth.http +32 -0
  95. package/lib/mongoose/src/http/users.http +34 -0
  96. package/lib/mongoose/src/index.ts +1 -0
  97. package/lib/mongoose/src/middlewares/auth.middleware.ts +3 -3
  98. package/lib/mongoose/src/server.ts +1 -2
  99. package/lib/mongoose/src/services/auth.service.ts +5 -5
  100. package/lib/mongoose/src/services/users.service.ts +3 -3
  101. package/lib/mongoose/src/utils/logger.ts +5 -5
  102. package/lib/mongoose/tsconfig.json +2 -2
  103. package/lib/prisma/.env +1 -1
  104. package/lib/prisma/.swcrc +37 -0
  105. package/lib/prisma/docker-compose.yml +1 -6
  106. package/lib/prisma/nodemon.json +2 -2
  107. package/lib/prisma/package.json +14 -10
  108. package/lib/prisma/src/app.ts +2 -3
  109. package/lib/prisma/src/http/auth.http +12 -15
  110. package/lib/prisma/src/http/users.http +12 -16
  111. package/lib/prisma/src/index.ts +1 -0
  112. package/lib/prisma/src/middlewares/auth.middleware.ts +4 -4
  113. package/lib/prisma/src/server.ts +1 -2
  114. package/lib/prisma/src/services/auth.service.ts +5 -5
  115. package/lib/prisma/src/services/users.service.ts +3 -3
  116. package/lib/prisma/src/utils/logger.ts +5 -5
  117. package/lib/prisma/tsconfig.json +2 -2
  118. package/lib/routing-controllers/.swcrc +37 -0
  119. package/lib/routing-controllers/nodemon.json +2 -2
  120. package/lib/routing-controllers/package.json +12 -9
  121. package/lib/routing-controllers/src/app.ts +3 -4
  122. package/lib/routing-controllers/src/http/auth.http +12 -15
  123. package/lib/routing-controllers/src/http/users.http +12 -16
  124. package/lib/routing-controllers/src/index.ts +1 -0
  125. package/lib/routing-controllers/src/middlewares/auth.middleware.ts +3 -3
  126. package/lib/routing-controllers/src/middlewares/validation.middleware.ts +10 -2
  127. package/lib/routing-controllers/src/models/users.model.ts +5 -5
  128. package/lib/routing-controllers/src/server.ts +1 -3
  129. package/lib/routing-controllers/src/services/auth.service.ts +5 -5
  130. package/lib/routing-controllers/src/services/users.service.ts +3 -3
  131. package/lib/routing-controllers/src/utils/logger.ts +5 -5
  132. package/lib/routing-controllers/tsconfig.json +2 -2
  133. package/lib/sequelize/.swcrc +39 -0
  134. package/lib/sequelize/docker-compose.yml +1 -6
  135. package/lib/sequelize/nodemon.json +2 -2
  136. package/lib/sequelize/package.json +12 -8
  137. package/lib/sequelize/src/app.ts +1 -2
  138. package/lib/sequelize/src/configs/development.json +2 -2
  139. package/lib/sequelize/src/configs/production.json +1 -1
  140. package/lib/sequelize/src/configs/test.json +1 -1
  141. package/lib/sequelize/src/http/auth.http +32 -0
  142. package/lib/sequelize/src/http/users.http +34 -0
  143. package/lib/sequelize/src/index.ts +1 -0
  144. package/lib/sequelize/src/middlewares/auth.middleware.ts +4 -4
  145. package/lib/sequelize/src/server.ts +1 -2
  146. package/lib/sequelize/src/services/auth.service.ts +5 -5
  147. package/lib/sequelize/src/services/users.service.ts +3 -3
  148. package/lib/sequelize/src/utils/logger.ts +5 -5
  149. package/lib/sequelize/tsconfig.json +2 -2
  150. package/lib/starter.js +4 -6
  151. package/lib/typegoose/.dockerignore +18 -0
  152. package/lib/typegoose/.editorconfig +9 -0
  153. package/lib/typegoose/.env.development.local +18 -0
  154. package/lib/typegoose/.env.production.local +18 -0
  155. package/lib/typegoose/.env.test.local +18 -0
  156. package/lib/typegoose/.eslintignore +1 -0
  157. package/lib/typegoose/.eslintrc +18 -0
  158. package/lib/typegoose/.huskyrc +5 -0
  159. package/lib/typegoose/.lintstagedrc.json +5 -0
  160. package/lib/typegoose/.prettierrc +8 -0
  161. package/lib/typegoose/.swcrc +40 -0
  162. package/lib/typegoose/.vscode/launch.json +35 -0
  163. package/lib/typegoose/.vscode/settings.json +6 -0
  164. package/lib/typegoose/Dockerfile +24 -0
  165. package/lib/typegoose/Makefile +6 -0
  166. package/lib/typegoose/docker-compose.yml +46 -0
  167. package/lib/typegoose/ecosystem.config.js +57 -0
  168. package/lib/typegoose/jest.config.js +12 -0
  169. package/lib/typegoose/nginx.conf +40 -0
  170. package/lib/typegoose/nodemon.json +12 -0
  171. package/lib/typegoose/package.json +80 -0
  172. package/lib/typegoose/src/app.ts +93 -0
  173. package/lib/typegoose/src/config/index.ts +5 -0
  174. package/lib/typegoose/src/controllers/auth.controller.ts +46 -0
  175. package/lib/typegoose/src/controllers/index.controller.ts +13 -0
  176. package/lib/typegoose/src/controllers/users.controller.ts +65 -0
  177. package/lib/typegoose/src/databases/index.ts +3 -0
  178. package/lib/typegoose/src/dtos/users.dto.ts +9 -0
  179. package/lib/typegoose/src/exceptions/HttpException.ts +10 -0
  180. package/lib/typegoose/src/http/auth.http +32 -0
  181. package/lib/typegoose/src/http/users.http +34 -0
  182. package/lib/typegoose/src/interfaces/auth.interface.ts +15 -0
  183. package/lib/typegoose/src/interfaces/routes.interface.ts +6 -0
  184. package/lib/typegoose/src/interfaces/users.interface.ts +5 -0
  185. package/lib/typegoose/src/middlewares/auth.middleware.ts +32 -0
  186. package/lib/typegoose/src/middlewares/error.middleware.ts +17 -0
  187. package/lib/typegoose/src/middlewares/validation.middleware.ts +25 -0
  188. package/lib/typegoose/src/models/users.model.ts +18 -0
  189. package/lib/typegoose/src/routes/auth.route.ts +24 -0
  190. package/lib/typegoose/src/routes/index.route.ts +19 -0
  191. package/lib/typegoose/src/routes/users.route.ts +25 -0
  192. package/lib/typegoose/src/server.ts +11 -0
  193. package/lib/typegoose/src/services/auth.service.ts +61 -0
  194. package/lib/typegoose/src/services/users.service.ts +64 -0
  195. package/lib/typegoose/src/tests/auth.test.ts +83 -0
  196. package/lib/typegoose/src/tests/index.test.ts +18 -0
  197. package/lib/typegoose/src/tests/users.test.ts +133 -0
  198. package/lib/typegoose/src/utils/logger.ts +65 -0
  199. package/lib/typegoose/src/utils/util.ts +19 -0
  200. package/lib/typegoose/src/utils/validateEnv.ts +10 -0
  201. package/lib/typegoose/swagger.yaml +122 -0
  202. package/lib/typegoose/tsconfig.json +40 -0
  203. package/lib/typeorm/.swcrc +39 -0
  204. package/lib/typeorm/docker-compose.yml +1 -1
  205. package/lib/typeorm/nodemon.json +2 -2
  206. package/lib/typeorm/package.json +12 -8
  207. package/lib/typeorm/src/app.ts +1 -2
  208. package/lib/typeorm/src/configs/development.json +1 -1
  209. package/lib/typeorm/src/configs/production.json +1 -1
  210. package/lib/typeorm/src/configs/test.json +1 -1
  211. package/lib/typeorm/src/databases/index.ts +5 -5
  212. package/lib/typeorm/src/entities/users.entity.ts +26 -0
  213. package/lib/typeorm/src/http/auth.http +12 -15
  214. package/lib/typeorm/src/http/users.http +12 -16
  215. package/lib/typeorm/src/index.ts +1 -0
  216. package/lib/typeorm/src/middlewares/auth.middleware.ts +5 -9
  217. package/lib/typeorm/src/server.ts +1 -2
  218. package/lib/typeorm/src/services/auth.service.ts +13 -17
  219. package/lib/typeorm/src/services/users.service.ts +16 -22
  220. package/lib/typeorm/src/utils/logger.ts +5 -5
  221. package/lib/typeorm/tsconfig.json +3 -3
  222. package/package.json +14 -4
@@ -0,0 +1,122 @@
1
+ tags:
2
+ - name: users
3
+ description: users API
4
+
5
+ paths:
6
+ # [GET] users
7
+ /users:
8
+ get:
9
+ tags:
10
+ - users
11
+ summary: Find All Users
12
+ responses:
13
+ 200:
14
+ description: 'OK'
15
+ 500:
16
+ description: 'Server Error'
17
+
18
+ # [POST] users
19
+ post:
20
+ tags:
21
+ - users
22
+ summary: Add User
23
+ parameters:
24
+ - name: body
25
+ in: body
26
+ description: user Data
27
+ required: true
28
+ schema:
29
+ $ref: '#/definitions/users'
30
+ responses:
31
+ 201:
32
+ description: 'Created'
33
+ 400:
34
+ description: 'Bad Request'
35
+ 409:
36
+ description: 'Conflict'
37
+ 500:
38
+ description: 'Server Error'
39
+
40
+ # [GET] users/id
41
+ /users/{id}:
42
+ get:
43
+ tags:
44
+ - users
45
+ summary: Find User By Id
46
+ parameters:
47
+ - name: id
48
+ in: path
49
+ description: User Id
50
+ required: true
51
+ responses:
52
+ 200:
53
+ description: 'OK'
54
+ 409:
55
+ description: 'Conflict'
56
+ 500:
57
+ description: 'Server Error'
58
+
59
+ # [PUT] users/id
60
+ put:
61
+ tags:
62
+ - users
63
+ summary: Update User By Id
64
+ parameters:
65
+ - name: id
66
+ in: path
67
+ description: user Id
68
+ required: true
69
+ - name: body
70
+ in: body
71
+ description: user Data
72
+ required: true
73
+ schema:
74
+ $ref: '#/definitions/users'
75
+ responses:
76
+ 200:
77
+ description: 'OK'
78
+ 400:
79
+ description: 'Bad Request'
80
+ 409:
81
+ description: 'Conflict'
82
+ 500:
83
+ description: 'Server Error'
84
+
85
+ # [DELETE] users/id
86
+ delete:
87
+ tags:
88
+ - users
89
+ summary: Delete User By Id
90
+ parameters:
91
+ - name: id
92
+ in: path
93
+ description: user Id
94
+ required: true
95
+ responses:
96
+ 200:
97
+ description: 'OK'
98
+ 409:
99
+ description: 'Conflict'
100
+ 500:
101
+ description: 'Server Error'
102
+
103
+ # definitions
104
+ definitions:
105
+ users:
106
+ type: object
107
+ required:
108
+ - email
109
+ - password
110
+ properties:
111
+ id:
112
+ description: user Id
113
+ email:
114
+ type: string
115
+ description: user Email
116
+ password:
117
+ type: string
118
+ description: user Password
119
+
120
+ schemes:
121
+ - https
122
+ - http
@@ -0,0 +1,40 @@
1
+ {
2
+ "compileOnSave": false,
3
+ "compilerOptions": {
4
+ "target": "es2017",
5
+ "lib": ["es2017", "esnext.asynciterable"],
6
+ "typeRoots": ["node_modules/@types"],
7
+ "allowSyntheticDefaultImports": true,
8
+ "experimentalDecorators": true,
9
+ "emitDecoratorMetadata": true,
10
+ "forceConsistentCasingInFileNames": true,
11
+ "moduleResolution": "node",
12
+ "module": "commonjs",
13
+ "pretty": true,
14
+ "sourceMap": true,
15
+ "declaration": true,
16
+ "outDir": "dist",
17
+ "allowJs": true,
18
+ "noEmit": false,
19
+ "esModuleInterop": true,
20
+ "resolveJsonModule": true,
21
+ "importHelpers": true,
22
+ "baseUrl": "src",
23
+ "paths": {
24
+ "@/*": ["*"],
25
+ "@config": ["config"],
26
+ "@controllers/*": ["controllers/*"],
27
+ "@databases": ["databases"],
28
+ "@dtos/*": ["dtos/*"],
29
+ "@exceptions/*": ["exceptions/*"],
30
+ "@interfaces/*": ["interfaces/*"],
31
+ "@middlewares/*": ["middlewares/*"],
32
+ "@models/*": ["models/*"],
33
+ "@routes/*": ["routes/*"],
34
+ "@services/*": ["services/*"],
35
+ "@utils/*": ["utils/*"]
36
+ }
37
+ },
38
+ "include": ["src/**/*.ts", "src/**/*.json", ".env"],
39
+ "exclude": ["node_modules", "src/http", "src/logs", "src/tests"]
40
+ }
@@ -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
+ "@entities/*": ["entities/*"],
28
+ "@exceptions/*": ["exceptions/*"],
29
+ "@interfaces/*": ["interfaces/*"],
30
+ "@middlewares/*": ["middlewares/*"],
31
+ "@routes/*": ["routes/*"],
32
+ "@services/*": ["services/*"],
33
+ "@utils/*": ["utils/*"]
34
+ }
35
+ },
36
+ "module": {
37
+ "type": "commonjs"
38
+ }
39
+ }
@@ -35,7 +35,7 @@ services:
35
35
  environment:
36
36
  POSTGRESQL_USERNAME: root
37
37
  POSTGRESQL_PASSWORD: password
38
- POSTGRESQL_DATABASE: typeorm
38
+ POSTGRESQL_DATABASE: test
39
39
  ports:
40
40
  - '5432:5432'
41
41
  networks:
@@ -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,7 +7,8 @@
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": "tsc && tsc-alias",
11
+ "build:swc": "swc src -d dist --source-maps --copy-files",
11
12
  "test": "jest --forceExit --detectOpenHandles",
12
13
  "lint": "eslint --ignore-path .gitignore --ext .ts src/",
13
14
  "lint:fix": "npm run lint -- --fix",
@@ -22,28 +23,24 @@
22
23
  "config": "^3.3.6",
23
24
  "cookie-parser": "^1.4.5",
24
25
  "cors": "^2.8.5",
25
- "cross-env": "^7.0.3",
26
26
  "dotenv": "^10.0.0",
27
27
  "envalid": "^7.1.0",
28
28
  "express": "^4.17.1",
29
29
  "helmet": "^4.6.0",
30
30
  "hpp": "^0.2.3",
31
- "jest": "^27.0.6",
32
31
  "jsonwebtoken": "^8.5.1",
33
32
  "morgan": "^1.10.0",
34
- "pm2": "^5.1.0",
35
33
  "pg": "^8.6.0",
36
34
  "reflect-metadata": "^0.1.13",
37
35
  "swagger-jsdoc": "^6.0.0",
38
36
  "swagger-ui-express": "^4.1.6",
39
- "ts-jest": "^27.0.3",
40
- "ts-node": "^10.0.0",
41
37
  "typeorm": "^0.2.34",
42
- "typescript": "^4.3.5",
43
38
  "winston": "^3.3.3",
44
39
  "winston-daily-rotate-file": "^4.5.5"
45
40
  },
46
41
  "devDependencies": {
42
+ "@swc/cli": "^0.1.51",
43
+ "@swc/core": "^1.2.108",
47
44
  "@types/bcrypt": "^5.0.0",
48
45
  "@types/compression": "^1.7.1",
49
46
  "@types/config": "^0.0.39",
@@ -63,16 +60,23 @@
63
60
  "@types/winston": "^2.4.4",
64
61
  "@typescript-eslint/eslint-plugin": "^4.28.2",
65
62
  "@typescript-eslint/parser": "^4.28.2",
63
+ "cross-env": "^7.0.3",
66
64
  "eslint": "^7.30.0",
67
65
  "eslint-config-prettier": "^8.3.0",
68
66
  "eslint-plugin-prettier": "^3.4.0",
69
67
  "husky": "^7.0.1",
68
+ "jest": "^27.0.6",
70
69
  "lint-staged": "^11.0.0",
71
70
  "node-config": "^0.0.2",
72
71
  "node-gyp": "^8.1.0",
73
72
  "nodemon": "^2.0.9",
73
+ "pm2": "^5.1.0",
74
74
  "prettier": "^2.3.2",
75
75
  "supertest": "^6.1.3",
76
- "tsconfig-paths": "^3.10.1"
76
+ "ts-jest": "^27.0.7",
77
+ "ts-node": "^10.4.0",
78
+ "tsc-alias": "^1.4.1",
79
+ "tsconfig-paths": "^3.10.1",
80
+ "typescript": "^4.5.2"
77
81
  }
78
82
  }
@@ -1,6 +1,5 @@
1
- process.env['NODE_CONFIG_DIR'] = __dirname + '/configs';
2
-
3
1
  import 'reflect-metadata';
2
+ import '@/index';
4
3
  import cookieParser from 'cookie-parser';
5
4
  import cors from 'cors';
6
5
  import config from 'config';
@@ -4,7 +4,7 @@
4
4
  "host": "localhost",
5
5
  "user": "root",
6
6
  "password": "password",
7
- "database": "typeorm"
7
+ "database": "test"
8
8
  },
9
9
  "secretKey": "secretKey",
10
10
  "log": {
@@ -4,7 +4,7 @@
4
4
  "host": "localhost",
5
5
  "user": "root",
6
6
  "password": "password",
7
- "database": "typeorm"
7
+ "database": "test"
8
8
  },
9
9
  "secretKey": "secretKey",
10
10
  "log": {
@@ -4,7 +4,7 @@
4
4
  "host": "localhost",
5
5
  "user": "root",
6
6
  "password": "password",
7
- "database": "typeorm"
7
+ "database": "test"
8
8
  },
9
9
  "secretKey": "secretKey",
10
10
  "log": {
@@ -1,5 +1,5 @@
1
1
  import config from 'config';
2
- import path from 'path';
2
+ import { join } from 'path';
3
3
  import { ConnectionOptions } from 'typeorm';
4
4
  import { dbConfig } from '@interfaces/db.interface';
5
5
 
@@ -13,11 +13,11 @@ export const dbConnection: ConnectionOptions = {
13
13
  database: database,
14
14
  synchronize: true,
15
15
  logging: false,
16
- entities: [path.join(__dirname, '../**/*.entity{.ts,.js}')],
17
- migrations: [path.join(__dirname, '../**/*.migration{.ts,.js}')],
18
- subscribers: [path.join(__dirname, '../**/*.subscriber{.ts,.js}')],
16
+ entities: [join(__dirname, '../**/*.entity{.ts,.js}')],
17
+ migrations: [join(__dirname, '../**/*.migration{.ts,.js}')],
18
+ subscribers: [join(__dirname, '../**/*.subscriber{.ts,.js}')],
19
19
  cli: {
20
- entitiesDir: 'src/entity',
20
+ entitiesDir: 'src/entities',
21
21
  migrationsDir: 'src/migration',
22
22
  subscribersDir: 'src/subscriber',
23
23
  },
@@ -0,0 +1,26 @@
1
+ import { IsNotEmpty } from 'class-validator';
2
+ import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, Unique, CreateDateColumn, UpdateDateColumn } from 'typeorm';
3
+ import { User } from '@interfaces/users.interface';
4
+
5
+ @Entity()
6
+ export class UserEntity extends BaseEntity implements User {
7
+ @PrimaryGeneratedColumn()
8
+ id: number;
9
+
10
+ @Column()
11
+ @IsNotEmpty()
12
+ @Unique(['email'])
13
+ email: string;
14
+
15
+ @Column()
16
+ @IsNotEmpty()
17
+ password: string;
18
+
19
+ @Column()
20
+ @CreateDateColumn()
21
+ createdAt: Date;
22
+
23
+ @Column()
24
+ @UpdateDateColumn()
25
+ updatedAt: Date;
26
+ }
@@ -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,22 +1,18 @@
1
1
  import config from 'config';
2
2
  import { NextFunction, Response } from 'express';
3
- import jwt from 'jsonwebtoken';
4
- import { getRepository } from 'typeorm';
5
- import { UserEntity } from '@entity/users.entity';
3
+ import { verify } from 'jsonwebtoken';
4
+ import { UserEntity } from '@entities/users.entity';
6
5
  import { HttpException } from '@exceptions/HttpException';
7
6
  import { DataStoredInToken, RequestWithUser } from '@interfaces/auth.interface';
8
7
 
9
8
  const authMiddleware = async (req: RequestWithUser, res: Response, next: NextFunction) => {
10
9
  try {
11
- 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);
12
11
 
13
12
  if (Authorization) {
14
13
  const secretKey: string = config.get('secretKey');
15
- const verificationResponse = (await jwt.verify(Authorization, secretKey)) as DataStoredInToken;
16
- const userId = verificationResponse.id;
17
-
18
- const userRepository = getRepository(UserEntity);
19
- const findUser = await userRepository.findOne(userId, { select: ['id', 'email', 'password'] });
14
+ const { id } = (await verify(Authorization, secretKey)) as DataStoredInToken;
15
+ const findUser = await UserEntity.findOne(id, { select: ['id', 'email', 'password'] });
20
16
 
21
17
  if (findUser) {
22
18
  req.user = findUser;
@@ -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,37 +1,34 @@
1
- import bcrypt from 'bcrypt';
1
+ import { compare, hash } from 'bcrypt';
2
2
  import config from 'config';
3
- import jwt from 'jsonwebtoken';
4
- import { getRepository } from 'typeorm';
3
+ import { sign } from 'jsonwebtoken';
4
+ import { EntityRepository, Repository } from 'typeorm';
5
5
  import { CreateUserDto } from '@dtos/users.dto';
6
- import { UserEntity } from '@entity/users.entity';
6
+ import { UserEntity } from '@entities/users.entity';
7
7
  import { HttpException } from '@exceptions/HttpException';
8
8
  import { DataStoredInToken, TokenData } from '@interfaces/auth.interface';
9
9
  import { User } from '@interfaces/users.interface';
10
10
  import { isEmpty } from '@utils/util';
11
11
 
12
- class AuthService {
13
- public users = UserEntity;
14
-
12
+ @EntityRepository()
13
+ class AuthService extends Repository<UserEntity> {
15
14
  public async signup(userData: CreateUserDto): Promise<User> {
16
15
  if (isEmpty(userData)) throw new HttpException(400, "You're not userData");
17
16
 
18
- const userRepository = getRepository(this.users);
19
- const findUser: User = await userRepository.findOne({ where: { email: userData.email } });
17
+ const findUser: User = await UserEntity.findOne({ where: { email: userData.email } });
20
18
  if (findUser) throw new HttpException(409, `You're email ${userData.email} already exists`);
21
19
 
22
- const hashedPassword = await bcrypt.hash(userData.password, 10);
23
- const createUserData: User = await userRepository.save({ ...userData, password: hashedPassword });
20
+ const hashedPassword = await hash(userData.password, 10);
21
+ const createUserData: User = await UserEntity.create({ ...userData, password: hashedPassword }).save();
24
22
  return createUserData;
25
23
  }
26
24
 
27
25
  public async login(userData: CreateUserDto): Promise<{ cookie: string; findUser: User }> {
28
26
  if (isEmpty(userData)) throw new HttpException(400, "You're not userData");
29
27
 
30
- const userRepository = getRepository(this.users);
31
- const findUser: User = await userRepository.findOne({ where: { email: userData.email } });
28
+ const findUser: User = await UserEntity.findOne({ where: { email: userData.email } });
32
29
  if (!findUser) throw new HttpException(409, `You're email ${userData.email} not found`);
33
30
 
34
- const isPasswordMatching: boolean = await bcrypt.compare(userData.password, findUser.password);
31
+ const isPasswordMatching: boolean = await compare(userData.password, findUser.password);
35
32
  if (!isPasswordMatching) throw new HttpException(409, "You're password not matching");
36
33
 
37
34
  const tokenData = this.createToken(findUser);
@@ -43,8 +40,7 @@ class AuthService {
43
40
  public async logout(userData: User): Promise<User> {
44
41
  if (isEmpty(userData)) throw new HttpException(400, "You're not userData");
45
42
 
46
- const userRepository = getRepository(this.users);
47
- const findUser: User = await userRepository.findOne({ where: { email: userData.email, password: userData.password } });
43
+ const findUser: User = await UserEntity.findOne({ where: { email: userData.email, password: userData.password } });
48
44
  if (!findUser) throw new HttpException(409, "You're not user");
49
45
 
50
46
  return findUser;
@@ -55,7 +51,7 @@ class AuthService {
55
51
  const secretKey: string = config.get('secretKey');
56
52
  const expiresIn: number = 60 * 60;
57
53
 
58
- return { expiresIn, token: jwt.sign(dataStoredInToken, secretKey, { expiresIn }) };
54
+ return { expiresIn, token: sign(dataStoredInToken, secretKey, { expiresIn }) };
59
55
  }
60
56
 
61
57
  public createCookie(tokenData: TokenData): string {