bmd-extension 1.6.3

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 (226) hide show
  1. package/.vscode/launch.json +14 -0
  2. package/.vscode/settings.json +1 -0
  3. package/CHANGELOG.md +9 -0
  4. package/DEPLOY.md +4 -0
  5. package/README.md +17 -0
  6. package/README_PRIVATE.md +1 -0
  7. package/build.sh +5 -0
  8. package/logo.png +0 -0
  9. package/media/dark/add.svg +40 -0
  10. package/media/dark/block.svg +1 -0
  11. package/media/dark/checklist-1.svg +1 -0
  12. package/media/dark/checklist.svg +1 -0
  13. package/media/dark/control.svg +1 -0
  14. package/media/dark/create.svg +1 -0
  15. package/media/dark/delete-1.svg +1 -0
  16. package/media/dark/delete.svg +1 -0
  17. package/media/dark/deploy-1.svg +2 -0
  18. package/media/dark/deploy.svg +2 -0
  19. package/media/dark/documents.svg +66 -0
  20. package/media/dark/earth.svg +68 -0
  21. package/media/dark/exe.svg +15 -0
  22. package/media/dark/export.svg +1 -0
  23. package/media/dark/function.svg +1 -0
  24. package/media/dark/game-controller.svg +77 -0
  25. package/media/dark/get.svg +1 -0
  26. package/media/dark/id-card.svg +59 -0
  27. package/media/dark/identity.svg +81 -0
  28. package/media/dark/import.svg +1 -0
  29. package/media/dark/information.svg +1 -0
  30. package/media/dark/interface.svg +1 -0
  31. package/media/dark/layout.svg +41 -0
  32. package/media/dark/leaf.svg +54 -0
  33. package/media/dark/list.svg +13 -0
  34. package/media/dark/logo.svg +249 -0
  35. package/media/dark/mockup.svg +1 -0
  36. package/media/dark/needle.svg +1 -0
  37. package/media/dark/pass.svg +46 -0
  38. package/media/dark/plus.svg +1 -0
  39. package/media/dark/post.svg +1 -0
  40. package/media/dark/quit.svg +1 -0
  41. package/media/dark/rocket.svg +28 -0
  42. package/media/dark/service.svg +1 -0
  43. package/media/dark/settings.svg +98 -0
  44. package/media/dark/social.svg +1 -0
  45. package/media/dark/spaceship-1.svg +1 -0
  46. package/media/dark/spaceship-2.svg +1 -0
  47. package/media/dark/spaceship.svg +1 -0
  48. package/media/dark/support.svg +88 -0
  49. package/media/dark/transfer.svg +1 -0
  50. package/media/dark/transform.svg +92 -0
  51. package/media/dark/update.svg +45 -0
  52. package/media/dark/upload-1.svg +1 -0
  53. package/media/dark/upload.svg +41 -0
  54. package/media/dark/vaccine.svg +1 -0
  55. package/media/dark/vr-gaming.svg +1 -0
  56. package/media/light/add.svg +40 -0
  57. package/media/light/block.svg +1 -0
  58. package/media/light/checklist-1.svg +1 -0
  59. package/media/light/checklist.svg +1 -0
  60. package/media/light/control.svg +1 -0
  61. package/media/light/create.svg +1 -0
  62. package/media/light/delete-1.svg +1 -0
  63. package/media/light/delete.svg +1 -0
  64. package/media/light/deploy-1.svg +2 -0
  65. package/media/light/deploy.svg +2 -0
  66. package/media/light/documents.svg +66 -0
  67. package/media/light/earth.svg +68 -0
  68. package/media/light/exe.svg +15 -0
  69. package/media/light/export.svg +1 -0
  70. package/media/light/function.svg +1 -0
  71. package/media/light/game-controller.svg +77 -0
  72. package/media/light/get.svg +1 -0
  73. package/media/light/id-card.svg +59 -0
  74. package/media/light/identity.svg +81 -0
  75. package/media/light/import.svg +1 -0
  76. package/media/light/information.svg +1 -0
  77. package/media/light/interface.svg +1 -0
  78. package/media/light/layout.svg +41 -0
  79. package/media/light/leaf.svg +54 -0
  80. package/media/light/list.svg +13 -0
  81. package/media/light/logo.svg +249 -0
  82. package/media/light/mockup.svg +1 -0
  83. package/media/light/needle.svg +1 -0
  84. package/media/light/pass.svg +46 -0
  85. package/media/light/plus.svg +1 -0
  86. package/media/light/post.svg +1 -0
  87. package/media/light/quit.svg +1 -0
  88. package/media/light/rocket.svg +28 -0
  89. package/media/light/service.svg +1 -0
  90. package/media/light/settings.svg +98 -0
  91. package/media/light/social.svg +1 -0
  92. package/media/light/spaceship-1.svg +1 -0
  93. package/media/light/spaceship-2.svg +1 -0
  94. package/media/light/spaceship.svg +1 -0
  95. package/media/light/support.svg +88 -0
  96. package/media/light/transfer.svg +1 -0
  97. package/media/light/transform.svg +92 -0
  98. package/media/light/update.svg +45 -0
  99. package/media/light/upload-1.svg +1 -0
  100. package/media/light/upload.svg +41 -0
  101. package/media/light/vaccine.svg +1 -0
  102. package/media/light/vr-gaming.svg +1 -0
  103. package/package-lock.json +6430 -0
  104. package/package.json +540 -0
  105. package/snippets-tsr.json +512 -0
  106. package/snippets.json +761 -0
  107. package/src/API.ts +14 -0
  108. package/src/FsProvider.ts +105 -0
  109. package/src/Request.ts +24 -0
  110. package/src/assets/api/api.txt +27 -0
  111. package/src/assets/configuration/AdminConfigurationController.ts.txt +72 -0
  112. package/src/assets/configuration/Configuration.ts.txt +37 -0
  113. package/src/assets/configuration/ConfigurationService.ts.txt +26 -0
  114. package/src/assets/contentDefine/AdminContentDefineController.ts.txt +91 -0
  115. package/src/assets/contentDefine/ContentDefine.ts.txt +45 -0
  116. package/src/assets/contentDefine/ContentDefineService.ts.txt +19 -0
  117. package/src/assets/contentDefine/CustomerContentDefineController.ts.txt +34 -0
  118. package/src/assets/controller/controller.txt +46 -0
  119. package/src/assets/controller/controllerResource.txt +103 -0
  120. package/src/assets/entity/entity.txt +22 -0
  121. package/src/assets/entity-request/entity-request.txt +18 -0
  122. package/src/assets/init/.env.example.txt +37 -0
  123. package/src/assets/init/.env.production.txt +37 -0
  124. package/src/assets/init/.gitignore.txt +8 -0
  125. package/src/assets/init/config.ts.txt +55 -0
  126. package/src/assets/init/deploy.sh.txt +46 -0
  127. package/src/assets/init/package-lock.json.txt +4184 -0
  128. package/src/assets/init/package.json.txt +79 -0
  129. package/src/assets/init/src/Server.ts.txt +167 -0
  130. package/src/assets/init/src/controllers/admin/AuthController.ts.txt +96 -0
  131. package/src/assets/init/src/controllers/admin/CustomerController.ts.txt +107 -0
  132. package/src/assets/init/src/controllers/admin/RoleController.ts.txt +143 -0
  133. package/src/assets/init/src/controllers/admin/StaffController.ts.txt +192 -0
  134. package/src/assets/init/src/controllers/customer/AuthController.ts.txt +170 -0
  135. package/src/assets/init/src/controllers/customer/CustomerController.ts.txt +32 -0
  136. package/src/assets/init/src/core/entity/CoreEntity.ts.txt +70 -0
  137. package/src/assets/init/src/core/services/CoreService.ts.txt +21 -0
  138. package/src/assets/init/src/entity/Customer.ts.txt +68 -0
  139. package/src/assets/init/src/entity/Permission.ts.txt +29 -0
  140. package/src/assets/init/src/entity/Role.ts.txt +36 -0
  141. package/src/assets/init/src/entity/Staff.ts.txt +54 -0
  142. package/src/assets/init/src/entity-request/CustomerInsert.ts.txt +42 -0
  143. package/src/assets/init/src/entity-request/CustomerUpdate.ts.txt +40 -0
  144. package/src/assets/init/src/entity-request/PermissionImport.ts.txt +12 -0
  145. package/src/assets/init/src/entity-request/StaffUpdate.ts.txt +33 -0
  146. package/src/assets/init/src/index.ts.txt +13 -0
  147. package/src/assets/init/src/middleware/auth/Verification.ts.txt +16 -0
  148. package/src/assets/init/src/middleware/auth/VerificationJWT.ts.txt +16 -0
  149. package/src/assets/init/src/middleware/auth/strategy/AuthStrategy.ts.txt +5 -0
  150. package/src/assets/init/src/middleware/auth/strategy/JWT.ts.txt +147 -0
  151. package/src/assets/init/src/middleware/error/handleError.ts.txt +22 -0
  152. package/src/assets/init/src/middleware/error/handleNotFound.ts.txt +7 -0
  153. package/src/assets/init/src/middleware/response/CustomSendResponse.ts.txt +35 -0
  154. package/src/assets/init/src/middleware/response/responseAPI.ts.txt +76 -0
  155. package/src/assets/init/src/middleware/validator/Validator.ts.txt +103 -0
  156. package/src/assets/init/src/services/CustomerService.ts.txt +79 -0
  157. package/src/assets/init/src/services/InitService.ts.txt +11 -0
  158. package/src/assets/init/src/services/MailService.ts.txt +271 -0
  159. package/src/assets/init/src/services/RoleService.ts.txt +66 -0
  160. package/src/assets/init/src/services/StaffService.ts.txt +104 -0
  161. package/src/assets/init/src/ssl/certificate-ca.crt +0 -0
  162. package/src/assets/init/src/ssl/certificate.crt +0 -0
  163. package/src/assets/init/src/ssl/private.key +0 -0
  164. package/src/assets/init/src/types/express.d.ts.txt +97 -0
  165. package/src/assets/init/src/util/expo.ts.txt +53 -0
  166. package/src/assets/init/src/util/helper.ts.txt +321 -0
  167. package/src/assets/init/src/util/language.ts.txt +8 -0
  168. package/src/assets/init/src/util/logger.ts.txt +47 -0
  169. package/src/assets/init/src/util/mailer.ts.txt +32 -0
  170. package/src/assets/init/src/util/password.ts.txt +13 -0
  171. package/src/assets/init/tsconfig.json.txt +26 -0
  172. package/src/assets/service/service.txt +34 -0
  173. package/src/constant.ts +83 -0
  174. package/src/extension.ts +459 -0
  175. package/src/provider/codeAction/controller/addPathParams.ts +65 -0
  176. package/src/provider/codeAction/controller/addTokenParam.ts +43 -0
  177. package/src/provider/codeAction/controller/addValidation.ts +47 -0
  178. package/src/provider/codeAction/controller/codeAction.ts +34 -0
  179. package/src/provider/codeAction/controller/util.ts +48 -0
  180. package/src/provider/codeAction/entity/codeAction.ts +48 -0
  181. package/src/provider/codeAction/entity/handleBuilder.ts +87 -0
  182. package/src/provider/codeAction/entity/handleFunction.ts +487 -0
  183. package/src/provider/codeAction/entity/handleProperty.ts +32 -0
  184. package/src/provider/codeAction/entity/handleRelation.ts +72 -0
  185. package/src/provider/codeAction/entity/helper.ts +132 -0
  186. package/src/provider/codeAction/entity-request/codeAction.ts +178 -0
  187. package/src/provider/codeAction/enum/codeAction.ts +95 -0
  188. package/src/provider/codeAction/service/codeAction.ts +232 -0
  189. package/src/provider/completion/CompletionProvider.ts +108 -0
  190. package/src/provider/errorChecking/checkHeaderToken.ts +60 -0
  191. package/src/provider/errorChecking/checkPathParam.ts +64 -0
  192. package/src/provider/errorChecking/checkRequired.ts +56 -0
  193. package/src/provider/errorChecking/errorChecking.ts +35 -0
  194. package/src/provider/errorChecking/util.ts +56 -0
  195. package/src/provider/treeDataProvider/Dependency.ts +26 -0
  196. package/src/provider/treeDataProvider/TreeProviderCommand.ts +60 -0
  197. package/src/provider/treeDataProvider/TreeProviderProject.ts +65 -0
  198. package/src/provider/treeDataProvider/api/createApi.ts +106 -0
  199. package/src/provider/treeDataProvider/controller/command/createController.ts +99 -0
  200. package/src/provider/treeDataProvider/controller/command/handleMethod.ts +363 -0
  201. package/src/provider/treeDataProvider/controller/treeData.ts +81 -0
  202. package/src/provider/treeDataProvider/deploy/command/handleDeploy.ts +70 -0
  203. package/src/provider/treeDataProvider/deploy/treeData.ts +21 -0
  204. package/src/provider/treeDataProvider/entity/command/addProperty.ts +144 -0
  205. package/src/provider/treeDataProvider/entity/command/addRelation.ts +125 -0
  206. package/src/provider/treeDataProvider/entity/command/createEntity.ts +53 -0
  207. package/src/provider/treeDataProvider/entity/command/createEntityRequest.ts +65 -0
  208. package/src/provider/treeDataProvider/entity/command/exportInterface.ts +130 -0
  209. package/src/provider/treeDataProvider/entity/treeData.ts +49 -0
  210. package/src/provider/treeDataProvider/module/command/configuration.ts +34 -0
  211. package/src/provider/treeDataProvider/module/command/contentDefine.ts +36 -0
  212. package/src/provider/treeDataProvider/module/command/initProject.ts +155 -0
  213. package/src/provider/treeDataProvider/module/treeData.ts +28 -0
  214. package/src/provider/treeDataProvider/project/command/addEnum.ts +0 -0
  215. package/src/provider/treeDataProvider/project/command/addProjectName.ts +23 -0
  216. package/src/provider/treeDataProvider/project/command/getProjectDetails.ts +284 -0
  217. package/src/provider/treeDataProvider/project/treeData.ts +28 -0
  218. package/src/provider/treeDataProvider/service/command/createService.ts +70 -0
  219. package/src/provider/treeDataProvider/service/command/handleConstructor.ts +134 -0
  220. package/src/provider/treeDataProvider/service/treeData.ts +25 -0
  221. package/src/types/project.d.ts +7 -0
  222. package/src/util.ts +145 -0
  223. package/src/utils/Password.ts +19 -0
  224. package/tsconfig.json +18 -0
  225. package/tslint.json +15 -0
  226. package/vsc-extension-quickstart.md +42 -0
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "agtx",
3
+ "version": "0.0.1",
4
+ "description": "Awesome project developed by BMD.",
5
+ "devDependencies": {
6
+ "@types/bcrypt": "3.0.0",
7
+ "@types/body-parser": "1.17.0",
8
+ "@types/compression": "1.0.1",
9
+ "@types/cors": "2.8.5",
10
+ "@types/errorhandler": "0.0.32",
11
+ "@types/express": "4.17.2",
12
+ "@types/faker": "4.1.9",
13
+ "@types/hapi__joi": "17.1.0",
14
+ "@types/jsonwebtoken": "8.3.2",
15
+ "@types/method-override": "0.0.31",
16
+ "@types/moment-timezone": "0.5.12",
17
+ "@types/multer": "1.4.2",
18
+ "@types/node": "13.5.0",
19
+ "@types/node-rsa": "1.0.0",
20
+ "@types/sha256": "0.2.0",
21
+ "@types/swagger-schema-official": "2.0.21",
22
+ "@types/winston": "2.4.4",
23
+ "dotenv": "8.2.0",
24
+ "ts-node": "3.3.0",
25
+ "ts-node-dev": "1.0.0-pre.40",
26
+ "typescript": "3.7.5"
27
+ },
28
+ "dependencies": {
29
+ "@hapi/joi": "17.1.0",
30
+ "@parse/node-apn": "3.1.0",
31
+ "@tsed/common": "5.44.14",
32
+ "@tsed/core": "5.44.14",
33
+ "@tsed/multipartfiles": "5.44.14",
34
+ "@tsed/swagger": "5.44.14",
35
+ "@tsed/typeorm": "5.44.14",
36
+ "@types/md5": "2.1.33",
37
+ "@types/slug": "0.9.1",
38
+ "bcrypt": "3.0.6",
39
+ "body-parser": "1.19.0",
40
+ "compression": "1.7.4",
41
+ "cors": "2.8.5",
42
+ "cron": "1.7.2",
43
+ "crypto": "1.0.1",
44
+ "expo-server-sdk": "3.4.0",
45
+ "express": "4.17.1",
46
+ "faker": "4.1.0",
47
+ "jimp": "^0.16.1",
48
+ "jsonwebtoken": "8.5.1",
49
+ "md5": "2.2.1",
50
+ "method-override": "3.0.0",
51
+ "mime": "2.4.4",
52
+ "moment": "2.24.0",
53
+ "moment-timezone": "0.5.26",
54
+ "multer": "1.4.2",
55
+ "mysql": "2.14.1",
56
+ "node-rsa": "1.0.8",
57
+ "nodemailer": "6.4.2",
58
+ "otp-generator": "1.1.0",
59
+ "reflect-metadata": "0.1.10",
60
+ "request": "2.88.0",
61
+ "request-promise": "4.2.5",
62
+ "sha256": "0.2.0",
63
+ "ts-express-decorators": "5.44.14",
64
+ "ts-httpexceptions": "4.1.0",
65
+ "ts-log-debug": "5.1.1",
66
+ "typeorm": "0.2.20",
67
+ "winston": "3.2.1"
68
+ },
69
+ "scripts": {
70
+ "start": "pm2 start dist/src/index.js --name agtx --watch",
71
+ "build": "tsc",
72
+ "dev": "set debug=* && ts-node-dev --debug --respawn --transpile-only --ignore-watch node_modules ./src/index.ts",
73
+ "prod": "node ./dist/src/server.js",
74
+ "migration:run": "ts-node ./node_modules/typeorm/cli.js migration:run",
75
+ "migration:create": "ts-node ./node_modules/typeorm/cli.js migration:create -n Init",
76
+ "migration:generate": "ts-node ./node_modules/typeorm/cli.js migration:generate -n Init",
77
+ "start:debug": "ts-node --inspect=5858 --debug-brk --ignore false ./src/server.ts"
78
+ }
79
+ }
@@ -0,0 +1,167 @@
1
+ // IMPORT LIBRARY
2
+ import { ServerLoader, ServerSettings, GlobalAcceptMimesMiddleware } from "@tsed/common";
3
+ import "@tsed/typeorm";
4
+ import Path from "path";
5
+ import compression from "compression";
6
+ import bodyParser from "body-parser";
7
+ import cors from 'cors';
8
+ import methodOverride from 'method-override';
9
+ import timezone from 'moment-timezone';
10
+ import multer from "multer";
11
+ import moment from "moment";
12
+ import fs from 'fs';
13
+ import md5 from 'md5';
14
+ import "@tsed/swagger";
15
+ import "@tsed/multipartfiles";
16
+ import { ServerOptions } from "https";
17
+
18
+ // IMPORT CUSTOM
19
+ import responseAPI from './middleware/response/responseAPI';
20
+ import handleError from "./middleware/error/handleError";
21
+ import handleNotFound from "./middleware/error/handleNotFound";
22
+ import logger from './util/logger';
23
+ import './middleware/response/CustomSendResponse';
24
+ import CONFIG from "../config";
25
+ import { logSection } from "./util/helper";
26
+
27
+ interface ProtocolPorts {
28
+ httpsPort: string | boolean
29
+ httpPort: string | boolean
30
+ }
31
+
32
+ // TIMEZONE
33
+ timezone.tz.setDefault("Asia/Ho_Chi_Minh");
34
+
35
+
36
+ // HANDLE HTTP/HTTPS
37
+ function handleProtocolPort(): ProtocolPorts {
38
+ if (process.env.PRODUCTION_MODE == "1")
39
+ return {
40
+ httpsPort: `${CONFIG.HOST}:${CONFIG.PORT}`,
41
+ httpPort: false
42
+ }
43
+
44
+ return {
45
+ httpPort: `${CONFIG.HOST}:${CONFIG.PORT}`,
46
+ httpsPort: false
47
+ }
48
+ }
49
+
50
+ function handleHttpsOptions(): ServerOptions {
51
+ if (process.env.PRODUCTION_MODE == "1") {
52
+ logSection('production mode')
53
+ return {
54
+ cert: fs.readFileSync(CONFIG.SSL),
55
+ key: fs.readFileSync(CONFIG.SSL),
56
+ ca: fs.readFileSync(__dirname + "/ssl/certificate-ca.crt")
57
+ }
58
+ }
59
+
60
+ logSection('development mode')
61
+ return {}
62
+ }
63
+
64
+
65
+ // HANDLE MULTER UPLOAD
66
+ function handleStorage(): multer.StorageEngine {
67
+ return multer.diskStorage({
68
+ destination: (
69
+ req: Express.Request, file: Express.Multer.File,
70
+ callback: (error: Error | null, destination: string) => void
71
+ ) => {
72
+ const controller = req.ctx.endpoint.targetName
73
+ const des = controller.replace("Controller", "").toLowerCase()
74
+ if (!des) {
75
+ callback(new Error("Wrong controller"), null)
76
+ } else {
77
+ const uploadPath = `${CONFIG.UPLOAD_DIR}/${des}`
78
+ if (!fs.existsSync(uploadPath)) {
79
+ fs.mkdirSync(uploadPath);
80
+ }
81
+ callback(null, uploadPath)
82
+ }
83
+ },
84
+ filename: (
85
+ req: Express.Request,
86
+ file: Express.Multer.File,
87
+ callback: (error: Error | null, filename: string) => void
88
+ ) => {
89
+ if (!file.mimetype.includes("image")) {
90
+ return callback(new Error("Invalidate file's extend name "), null)
91
+ } else {
92
+ callback(null, md5(file.filename + moment().valueOf().toString()) + Path.extname(file.originalname))
93
+ }
94
+ }
95
+ });
96
+ }
97
+
98
+
99
+ // SERVER
100
+ const OPTION: any = {
101
+ httpsOptions: handleHttpsOptions(),
102
+ rootDir: __dirname,
103
+ socketIO: {},
104
+ statics: {
105
+ "/": `${CONFIG.STATIC_DIR}`
106
+ },
107
+ acceptMimes: ["application/json"],
108
+ mount: {
109
+ [CONFIG.PREFIX_URL]: `${__dirname}/controllers/**/**Controller.{ts,js}`
110
+ },
111
+ swagger: [
112
+ {
113
+ path: "/docs_admin",
114
+ doc: "docs_admin"
115
+ },
116
+ {
117
+ path: "/docs_customer",
118
+ doc: "docs_customer"
119
+ }
120
+ ],
121
+ typeorm: [
122
+ CONFIG.TYPE_ORM
123
+ ],
124
+ multer: {
125
+ storage: handleStorage(),
126
+ },
127
+ logger: {
128
+ // logStart: false,
129
+ format: `%[%d{[hh:mm:ss dd/MM/yyyy}] %p%] %m`,
130
+ requestFields: ["method", "url", "body", "query", "params"]
131
+ }
132
+ }
133
+
134
+
135
+ const PORT = handleProtocolPort()
136
+ @ServerSettings({ ...OPTION, ...PORT })
137
+ export class Server extends ServerLoader {
138
+
139
+ public $beforeRoutesInit(): void | Promise<any> {
140
+ this.use(GlobalAcceptMimesMiddleware)
141
+ .use(cors())
142
+ .use(compression())
143
+ .use(methodOverride())
144
+ .use(bodyParser.json())
145
+ .use(bodyParser.urlencoded({
146
+ extended: true
147
+ }))
148
+ .use(responseAPI)
149
+
150
+ return null;
151
+ }
152
+
153
+ public $onReady() {
154
+ logSection('server started')
155
+ logger('info').info(`SERVER RESTART AT ${moment().format("YYYY-MM-DD HH:mm:ss")}`)
156
+ }
157
+
158
+ public $afterRoutesInit() {
159
+ this.use(handleNotFound)
160
+ .use(handleError)
161
+ }
162
+
163
+ public $onServerInitError(err: any) {
164
+ console.error(err);
165
+ logger('error').error("Error On Server Init: ", JSON.stringify(err))
166
+ }
167
+ }
@@ -0,0 +1,96 @@
1
+ // IMPORT LIBRARY
2
+ import { Controller, UseAuth, Req, Get, Res, Response, HeaderParams, PathParams, Post, BodyParams } from '@tsed/common';
3
+ import Joi from '@hapi/joi';
4
+ import { Docs } from '@tsed/swagger';
5
+ import { Request } from 'express';
6
+
7
+
8
+ // IMPORT CUSTOM
9
+ import { Validator } from '../../middleware/validator/Validator';
10
+ import { VerificationJWT } from '../../middleware/auth/VerificationJWT';
11
+ import { StaffService } from '../../services/StaffService';
12
+ import JWT, { AuthType } from '../../middleware/auth/strategy/JWT';
13
+ import { Staff } from '../../entity/Staff';
14
+
15
+
16
+ @Controller("/admin/auth")
17
+ @Docs("docs_admin")
18
+ export class AuthController {
19
+ constructor(
20
+ private staffService: StaffService,
21
+ ) { }
22
+
23
+
24
+ // =====================LOGIN=====================
25
+ @Post('/login')
26
+ @Validator({
27
+ username: Joi.string().required(),
28
+ password: Joi.string().required()
29
+ })
30
+ async login(
31
+ @BodyParams('username') username: string,
32
+ @BodyParams('password') password: string,
33
+ @Res() res: Response,
34
+ @Req() req: Request,
35
+ ) {
36
+ const staff = await this.staffService.login(username, password);
37
+ const token = JWT.sign({ id: staff.id, type: AuthType.Staff });
38
+
39
+ return res.sendOK({ token })
40
+ }
41
+
42
+
43
+ // =====================PROFILE=====================
44
+ @Get('/profile')
45
+ @UseAuth(VerificationJWT)
46
+ async getInfo(
47
+ @Req() req: Request,
48
+ @Res() res: Response,
49
+ @HeaderParams("token") token: string,
50
+ ) {
51
+ const staff = await Staff.findOneOrThrowId(req.staff.id, {
52
+ relations: ['role.permissions', 'role']
53
+ });
54
+
55
+ return res.sendOK(staff)
56
+ }
57
+
58
+
59
+ // =====================UPDATE PASSWORD=====================
60
+ @Post('/password/update')
61
+ @UseAuth(VerificationJWT)
62
+ @Validator({
63
+ oldPassword: Joi.string().required(),
64
+ newPassword: Joi.string().required()
65
+ })
66
+ async changePassword(
67
+ @Req() req: Request,
68
+ @Res() res: Response,
69
+ @BodyParams('oldPassword') oldPassword: string,
70
+ @BodyParams('newPassword') newPassword: string,
71
+ @HeaderParams("token") token: string,
72
+ ) {
73
+ const { staff } = req;
74
+
75
+ await this.staffService.changePassword({ staff, oldPassword, newPassword })
76
+
77
+ return res.sendOK(staff, 'Cập nhật mật khẩu thành công');
78
+ }
79
+
80
+
81
+ // =====================GET PERMISSION=====================
82
+ @Get('/profile/permission')
83
+ @UseAuth(VerificationJWT)
84
+ async getPermission(
85
+ @Req() req: Request,
86
+ @Res() res: Response,
87
+ @HeaderParams("token") token: string,
88
+ ) {
89
+ const { id } = req.staff;
90
+ const permissions = await this.staffService.getPermission(id);
91
+
92
+ return res.sendOK(permissions);
93
+ }
94
+
95
+
96
+ } // END FILE
@@ -0,0 +1,107 @@
1
+ import { Controller, Post, UseAuth, Req, Request, Res, Response, HeaderParams, BodyParams, Get, PathParams, QueryParams } from '@tsed/common';
2
+ import { Docs } from '@tsed/swagger';
3
+ import Joi from '@hapi/joi';
4
+ import { Like, Raw } from 'typeorm';
5
+
6
+ import { VerificationJWT } from '../../middleware/auth/VerificationJWT';
7
+ import { Validator } from '../../middleware/validator/Validator';
8
+ import { Customer } from '../../entity/Customer';
9
+ import { Password } from '../../util/password';
10
+
11
+ @Controller("/admin/customer")
12
+ @Docs("docs_admin")
13
+ export class CustomerController {
14
+ constructor() { }
15
+
16
+
17
+ // =====================GET LIST=====================
18
+ @Get('')
19
+ @UseAuth(VerificationJWT)
20
+ @Validator({
21
+ page: Joi.number().min(0),
22
+ limit: Joi.number().min(0)
23
+ })
24
+ async findAll(
25
+ @HeaderParams("token") token: string,
26
+ @QueryParams("page") page: number,
27
+ @QueryParams("limit") limit: number,
28
+ @QueryParams("search") search: string = "",
29
+ @Req() req: Request,
30
+ @Res() res: Response
31
+ ) {
32
+ let where = `customer.name LIKE :search AND customer.isDeleted = false`
33
+
34
+ const [customers, total] = await Customer.createQueryBuilder('customer')
35
+ .leftJoinAndSelect('customer.addressCity', 'addressCity')
36
+ .where(where, {search: `%${search}%`})
37
+ .skip((page - 1) * limit)
38
+ .take(limit)
39
+ .orderBy('customer.id', 'DESC')
40
+ .getManyAndCount()
41
+
42
+ return res.sendOK({ customers, total })
43
+ }
44
+
45
+
46
+ // =====================UPDATE ITEM=====================
47
+ @Post('/:customerId/update')
48
+ @UseAuth(VerificationJWT)
49
+ @Validator({
50
+ customer: Joi.required(),
51
+ customerId: Joi.number().required()
52
+ })
53
+ async update(
54
+ @Req() req: Request,
55
+ @Res() res: Response,
56
+ @HeaderParams("token") token: string,
57
+ @BodyParams("customer") customer: Customer,
58
+ @PathParams("customerId") customerId: number,
59
+ ) {
60
+ await Customer.findOneOrThrowId(+customerId)
61
+ customer.id = customerId
62
+ await customer.save()
63
+
64
+ return res.sendOK(customer, 'Cập nhật thành công!')
65
+ }
66
+
67
+ // =====================GET ITEM=====================
68
+ @Get('/:customerId')
69
+ @UseAuth(VerificationJWT)
70
+ @Validator({
71
+ customerId: Joi.number().required(),
72
+ })
73
+ async findOne(
74
+ @Req() req: Request,
75
+ @Res() res: Response,
76
+ @HeaderParams("token") token: string,
77
+ @PathParams("customerId") customerId: number,
78
+
79
+ ) {
80
+ const customer = await Customer.findOneOrThrowId(+customerId)
81
+
82
+ return res.sendOK(customer)
83
+ }
84
+
85
+
86
+ // =====================RESET PASSWORD=====================
87
+ @Post('/:customerId/update/password')
88
+ @UseAuth(VerificationJWT)
89
+ @Validator({
90
+ customerId: Joi.number().required(),
91
+ password: Joi.string().required()
92
+ })
93
+ async updatePassword(
94
+ @Req() req: Request,
95
+ @Res() res: Response,
96
+ @HeaderParams('token') token: string,
97
+ @PathParams('customerId') customerId: number,
98
+ @BodyParams('password') password: string
99
+ ) {
100
+ const customer = await Customer.findOneOrThrowId(+customerId);
101
+ customer.password = await Password.hash(password)
102
+ await customer.save()
103
+
104
+ return res.sendOK(customer, 'Cập nhật thành công.')
105
+ }
106
+
107
+ } // END FILE
@@ -0,0 +1,143 @@
1
+ import { Controller, UseAuth, Req, Get, Res, Response, HeaderParams, PathParams, Post, BodyParams } from '@tsed/common';
2
+ import Joi from '@hapi/joi';
3
+ import { Docs } from '@tsed/swagger';
4
+ import { Request } from 'express';
5
+
6
+ import { Validator } from '../../middleware/validator/Validator';
7
+ import { VerificationJWT } from '../../middleware/auth/VerificationJWT';
8
+ import { Role } from '../../entity/Role';
9
+ import { RoleService } from '../../services/RoleService';
10
+ import { Permission } from '../../entity/Permission';
11
+ import { PermissionImport } from '../../entity-request/PermissionImport';
12
+
13
+ @Controller("/admin/role")
14
+ @Docs("docs_admin")
15
+ export class RoleController {
16
+ constructor(
17
+ private roleService: RoleService
18
+ ) { }
19
+
20
+
21
+ // =====================CREATE ITEM=====================
22
+ @Post('')
23
+ @UseAuth(VerificationJWT)
24
+ @Validator({
25
+ role: Joi.required(),
26
+ token: Joi.required()
27
+ })
28
+ async create(
29
+ @BodyParams("role") role: Role,
30
+ @HeaderParams("token") token: string,
31
+ @Req() req: Request,
32
+ @Res() res: Response
33
+ ) {
34
+ await role.save()
35
+
36
+ return res.sendOK({ id: role.id })
37
+ }
38
+
39
+
40
+ // =====================GET LIST=====================
41
+ @Get('')
42
+ @UseAuth(VerificationJWT)
43
+ @Validator({
44
+ })
45
+ async findAll(
46
+ @Res() res: Response,
47
+ @Req() req: Request,
48
+ @HeaderParams("token") token: string,
49
+ ) {
50
+ const roles = await Role.find()
51
+
52
+ return res.sendOK(roles)
53
+ }
54
+
55
+
56
+ // =====================IMPORT PERMISSIONS=====================
57
+ @Post('/permissions/import')
58
+ @UseAuth(VerificationJWT)
59
+ @Validator({
60
+ permissions: Joi.required(),
61
+ token: Joi.required()
62
+ })
63
+ async importPermission(
64
+ @BodyParams("permissions", PermissionImport) permissionImports: PermissionImport[],
65
+ @HeaderParams("token") token: string,
66
+ @Req() req: Request,
67
+ @Res() res: Response
68
+ ) {
69
+ const permissions = await this.roleService.import(permissionImports)
70
+ await this.roleService.resetRoleForAdmin(permissions)
71
+
72
+ return res.sendOK(permissions)
73
+ }
74
+
75
+
76
+ // =====================GET PERMISSION=====================
77
+ @Get('/permissions')
78
+ @UseAuth(VerificationJWT)
79
+ @Validator({
80
+ token: Joi.required()
81
+ })
82
+ async getAllPermission(
83
+ @Res() res: Response,
84
+ @Req() req: Request,
85
+ @HeaderParams("token") token: string,
86
+ ) {
87
+ const permissions = await Permission.find()
88
+
89
+ return res.sendOK(permissions)
90
+ }
91
+
92
+
93
+ // =====================GET ITEM=====================
94
+ @Get('/:roleId')
95
+ @UseAuth(VerificationJWT)
96
+ @Validator({
97
+ roleId: Joi.number().required(),
98
+ token: Joi.required()
99
+ })
100
+ async getRole(
101
+ @PathParams("roleId") roleId: number,
102
+ @HeaderParams("token") token: string,
103
+ @Req() req: Request,
104
+ @Res() res: Response
105
+ ) {
106
+ const role = await Role.findOne(roleId, {
107
+ relations: ["permissions"]
108
+ })
109
+
110
+ return res.sendOK(role)
111
+ }
112
+
113
+
114
+ // =====================UPDATE ROLE=====================
115
+ @Post('/:roleId/update')
116
+ @UseAuth(VerificationJWT)
117
+ @Validator({
118
+ roleId: Joi.number().required(),
119
+ permissionIds: Joi.required(),
120
+ token: Joi.required()
121
+ })
122
+ async turnOnPermissionInRole(
123
+ @HeaderParams("token") token: string,
124
+ @Res() res: Response,
125
+ @Req() req: Request,
126
+ @PathParams("roleId") roleId: number,
127
+ @BodyParams("permissionIds", Number) permissionIds: number[],
128
+ @BodyParams("info") role: Role,
129
+ ) {
130
+ await Role.findOneOrThrowId(+roleId)
131
+
132
+ const permissions = await Permission.createQueryBuilder('permission')
133
+ .where(`id IN (:...permissionIds)`, { permissionIds })
134
+ .getMany()
135
+
136
+ role.id = +roleId
137
+ role.permissions = permissions
138
+ await role.save()
139
+
140
+ return res.sendOK(role)
141
+ }
142
+
143
+ } // END FILE