@fecommunity/reactpress-server 3.0.4 → 4.0.0-beta.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 (312) hide show
  1. package/dist/app.module.js +9 -46
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/common/api-messages.d.ts +9 -0
  4. package/dist/common/api-messages.js +9 -0
  5. package/dist/common/api-messages.js.map +1 -1
  6. package/dist/database/typeorm-options.d.ts +3 -0
  7. package/dist/database/typeorm-options.js +60 -0
  8. package/dist/database/typeorm-options.js.map +1 -0
  9. package/dist/filters/http-exception.filter.js +1 -1
  10. package/dist/filters/http-exception.filter.js.map +1 -1
  11. package/dist/generate-swagger.js +11 -11
  12. package/dist/generate-swagger.js.map +1 -1
  13. package/dist/interceptors/transform.interceptor.d.ts +2 -6
  14. package/dist/interceptors/transform.interceptor.js +10 -5
  15. package/dist/interceptors/transform.interceptor.js.map +1 -1
  16. package/dist/logger/index.js +5 -4
  17. package/dist/logger/index.js.map +1 -1
  18. package/dist/main.js +44 -23
  19. package/dist/main.js.map +1 -1
  20. package/dist/modules/api-key/api-key.controller.js +9 -9
  21. package/dist/modules/api-key/api-key.controller.js.map +1 -1
  22. package/dist/modules/api-key/api-key.entity.js +16 -16
  23. package/dist/modules/api-key/api-key.entity.js.map +1 -1
  24. package/dist/modules/api-key/api-key.guard.js +3 -4
  25. package/dist/modules/api-key/api-key.guard.js.map +1 -1
  26. package/dist/modules/api-key/api-key.module.js +1 -1
  27. package/dist/modules/api-key/api-key.module.js.map +1 -1
  28. package/dist/modules/api-key/api-key.service.js +3 -3
  29. package/dist/modules/api-key/api-key.service.js.map +1 -1
  30. package/dist/modules/article/article-revision.entity.js +9 -9
  31. package/dist/modules/article/article-revision.entity.js.map +1 -1
  32. package/dist/modules/article/article-slug.util.d.ts +2 -0
  33. package/dist/modules/article/article-slug.util.js +19 -0
  34. package/dist/modules/article/article-slug.util.js.map +1 -0
  35. package/dist/modules/article/article.controller.d.ts +1 -1
  36. package/dist/modules/article/article.controller.js +71 -60
  37. package/dist/modules/article/article.controller.js.map +1 -1
  38. package/dist/modules/article/article.entity.d.ts +3 -0
  39. package/dist/modules/article/article.entity.js +58 -43
  40. package/dist/modules/article/article.entity.js.map +1 -1
  41. package/dist/modules/article/article.module.js +7 -4
  42. package/dist/modules/article/article.module.js.map +1 -1
  43. package/dist/modules/article/article.service.d.ts +9 -3
  44. package/dist/modules/article/article.service.js +98 -30
  45. package/dist/modules/article/article.service.js.map +1 -1
  46. package/dist/modules/article/scheduled-publish.service.js +3 -3
  47. package/dist/modules/article/scheduled-publish.service.js.map +1 -1
  48. package/dist/modules/auth/auth.controller.js +11 -11
  49. package/dist/modules/auth/auth.controller.js.map +1 -1
  50. package/dist/modules/auth/auth.module.js +4 -4
  51. package/dist/modules/auth/auth.module.js.map +1 -1
  52. package/dist/modules/auth/auth.service.js +5 -5
  53. package/dist/modules/auth/auth.service.js.map +1 -1
  54. package/dist/modules/auth/jwt-auth.guard.js +3 -3
  55. package/dist/modules/auth/jwt-auth.guard.js.map +1 -1
  56. package/dist/modules/auth/jwt.strategy.js +3 -3
  57. package/dist/modules/auth/jwt.strategy.js.map +1 -1
  58. package/dist/modules/auth/roles.guard.js +2 -2
  59. package/dist/modules/auth/roles.guard.js.map +1 -1
  60. package/dist/modules/bootstrap/bootstrap.constants.d.ts +20 -0
  61. package/dist/modules/bootstrap/bootstrap.constants.js +171 -0
  62. package/dist/modules/bootstrap/bootstrap.constants.js.map +1 -0
  63. package/dist/modules/bootstrap/bootstrap.service.d.ts +22 -0
  64. package/dist/modules/bootstrap/bootstrap.service.js +183 -0
  65. package/dist/modules/bootstrap/bootstrap.service.js.map +1 -0
  66. package/dist/modules/bootstrap/install-locale.d.ts +2 -0
  67. package/dist/modules/bootstrap/install-locale.js +11 -0
  68. package/dist/modules/bootstrap/install-locale.js.map +1 -0
  69. package/dist/modules/category/category.controller.js +21 -20
  70. package/dist/modules/category/category.controller.js.map +1 -1
  71. package/dist/modules/category/category.entity.js +13 -13
  72. package/dist/modules/category/category.entity.js.map +1 -1
  73. package/dist/modules/category/category.module.js +1 -1
  74. package/dist/modules/category/category.module.js.map +1 -1
  75. package/dist/modules/category/category.service.js +3 -3
  76. package/dist/modules/category/category.service.js.map +1 -1
  77. package/dist/modules/comment/comment.controller.js +24 -20
  78. package/dist/modules/comment/comment.controller.js.map +1 -1
  79. package/dist/modules/comment/comment.entity.js +31 -31
  80. package/dist/modules/comment/comment.entity.js.map +1 -1
  81. package/dist/modules/comment/comment.module.js +2 -2
  82. package/dist/modules/comment/comment.module.js.map +1 -1
  83. package/dist/modules/comment/comment.service.d.ts +3 -1
  84. package/dist/modules/comment/comment.service.js +31 -14
  85. package/dist/modules/comment/comment.service.js.map +1 -1
  86. package/dist/modules/comment/html.d.ts +1 -1
  87. package/dist/modules/comment/html.js +3 -3
  88. package/dist/modules/comment/html.js.map +1 -1
  89. package/dist/modules/extension/extension.module.d.ts +9 -0
  90. package/dist/modules/extension/extension.module.js +50 -0
  91. package/dist/modules/extension/extension.module.js.map +1 -0
  92. package/dist/modules/extension/plugin-loader.service.d.ts +12 -0
  93. package/dist/modules/extension/plugin-loader.service.js +96 -0
  94. package/dist/modules/extension/plugin-loader.service.js.map +1 -0
  95. package/dist/modules/extension/plugin-registry.bridge.d.ts +3 -0
  96. package/dist/modules/extension/plugin-registry.bridge.js +44 -0
  97. package/dist/modules/extension/plugin-registry.bridge.js.map +1 -0
  98. package/dist/modules/extension/plugin.controller.d.ts +22 -0
  99. package/dist/modules/extension/plugin.controller.js +155 -0
  100. package/dist/modules/extension/plugin.controller.js.map +1 -0
  101. package/dist/modules/extension/plugin.service.d.ts +52 -0
  102. package/dist/modules/extension/plugin.service.js +391 -0
  103. package/dist/modules/extension/plugin.service.js.map +1 -0
  104. package/dist/modules/extension/preview-draft.store.d.ts +13 -0
  105. package/dist/modules/extension/preview-draft.store.js +41 -0
  106. package/dist/modules/extension/preview-draft.store.js.map +1 -0
  107. package/dist/modules/extension/theme-registry.bridge.d.ts +56 -0
  108. package/dist/modules/extension/theme-registry.bridge.js +46 -0
  109. package/dist/modules/extension/theme-registry.bridge.js.map +1 -0
  110. package/dist/modules/extension/theme.controller.d.ts +66 -0
  111. package/dist/modules/extension/theme.controller.js +301 -0
  112. package/dist/modules/extension/theme.controller.js.map +1 -0
  113. package/dist/modules/extension/theme.service.d.ts +140 -0
  114. package/dist/modules/extension/theme.service.js +1039 -0
  115. package/dist/modules/extension/theme.service.js.map +1 -0
  116. package/dist/modules/file/file-optimization.controller.d.ts +12 -0
  117. package/dist/modules/file/file-optimization.controller.js +79 -0
  118. package/dist/modules/file/file-optimization.controller.js.map +1 -0
  119. package/dist/modules/file/file-optimization.service.d.ts +36 -0
  120. package/dist/modules/file/file-optimization.service.js +385 -0
  121. package/dist/modules/file/file-optimization.service.js.map +1 -0
  122. package/dist/modules/file/file-optimization.types.d.ts +66 -0
  123. package/dist/modules/file/file-optimization.types.js +5 -0
  124. package/dist/modules/file/file-optimization.types.js.map +1 -0
  125. package/dist/modules/file/file.controller.d.ts +1 -1
  126. package/dist/modules/file/file.controller.js +22 -20
  127. package/dist/modules/file/file.controller.js.map +1 -1
  128. package/dist/modules/file/file.entity.d.ts +7 -0
  129. package/dist/modules/file/file.entity.js +20 -15
  130. package/dist/modules/file/file.entity.js.map +1 -1
  131. package/dist/modules/file/file.module.js +16 -4
  132. package/dist/modules/file/file.module.js.map +1 -1
  133. package/dist/modules/file/file.service.d.ts +5 -1
  134. package/dist/modules/file/file.service.js +70 -24
  135. package/dist/modules/file/file.service.js.map +1 -1
  136. package/dist/modules/file/image-optimizer-plugin.guard.d.ts +7 -0
  137. package/dist/modules/file/image-optimizer-plugin.guard.js +33 -0
  138. package/dist/modules/file/image-optimizer-plugin.guard.js.map +1 -0
  139. package/dist/modules/health/health.controller.js +7 -9
  140. package/dist/modules/health/health.controller.js.map +1 -1
  141. package/dist/modules/health/health.module.js +1 -1
  142. package/dist/modules/health/health.module.js.map +1 -1
  143. package/dist/modules/hook/hook.module.d.ts +2 -0
  144. package/dist/modules/hook/hook.module.js +22 -0
  145. package/dist/modules/hook/hook.module.js.map +1 -0
  146. package/dist/modules/hook/hook.service.d.ts +26 -0
  147. package/dist/modules/hook/hook.service.js +105 -0
  148. package/dist/modules/hook/hook.service.js.map +1 -0
  149. package/dist/modules/install/install.controller.js +5 -5
  150. package/dist/modules/install/install.controller.js.map +1 -1
  151. package/dist/modules/install/install.module.js +1 -1
  152. package/dist/modules/install/install.module.js.map +1 -1
  153. package/dist/modules/install/install.service.js +2 -2
  154. package/dist/modules/install/install.service.js.map +1 -1
  155. package/dist/modules/knowledge/knowledge.controller.js +35 -33
  156. package/dist/modules/knowledge/knowledge.controller.js.map +1 -1
  157. package/dist/modules/knowledge/knowledge.entity.js +33 -33
  158. package/dist/modules/knowledge/knowledge.entity.js.map +1 -1
  159. package/dist/modules/knowledge/knowledge.module.js +1 -1
  160. package/dist/modules/knowledge/knowledge.module.js.map +1 -1
  161. package/dist/modules/knowledge/knowledge.service.js +10 -10
  162. package/dist/modules/knowledge/knowledge.service.js.map +1 -1
  163. package/dist/modules/page/page.controller.js +24 -23
  164. package/dist/modules/page/page.controller.js.map +1 -1
  165. package/dist/modules/page/page.entity.js +27 -27
  166. package/dist/modules/page/page.entity.js.map +1 -1
  167. package/dist/modules/page/page.module.js +1 -1
  168. package/dist/modules/page/page.module.js.map +1 -1
  169. package/dist/modules/page/page.service.js +11 -12
  170. package/dist/modules/page/page.service.js.map +1 -1
  171. package/dist/modules/search/search.controller.js +12 -12
  172. package/dist/modules/search/search.controller.js.map +1 -1
  173. package/dist/modules/search/search.entity.js +13 -13
  174. package/dist/modules/search/search.entity.js.map +1 -1
  175. package/dist/modules/search/search.module.js +1 -1
  176. package/dist/modules/search/search.module.js.map +1 -1
  177. package/dist/modules/search/search.service.js +2 -2
  178. package/dist/modules/search/search.service.js.map +1 -1
  179. package/dist/modules/setting/setting.constant.d.ts +4 -2
  180. package/dist/modules/setting/setting.constant.js +3 -19
  181. package/dist/modules/setting/setting.constant.js.map +1 -1
  182. package/dist/modules/setting/setting.controller.js +11 -11
  183. package/dist/modules/setting/setting.controller.js.map +1 -1
  184. package/dist/modules/setting/setting.entity.d.ts +3 -0
  185. package/dist/modules/setting/setting.entity.js +64 -49
  186. package/dist/modules/setting/setting.entity.js.map +1 -1
  187. package/dist/modules/setting/setting.module.js +2 -2
  188. package/dist/modules/setting/setting.module.js.map +1 -1
  189. package/dist/modules/setting/setting.service.d.ts +13 -2
  190. package/dist/modules/setting/setting.service.js +169 -24
  191. package/dist/modules/setting/setting.service.js.map +1 -1
  192. package/dist/modules/smtp/mail.util.d.ts +7 -6
  193. package/dist/modules/smtp/mail.util.js +5 -9
  194. package/dist/modules/smtp/mail.util.js.map +1 -1
  195. package/dist/modules/smtp/smtp.controller.d.ts +3 -0
  196. package/dist/modules/smtp/smtp.controller.js +27 -14
  197. package/dist/modules/smtp/smtp.controller.js.map +1 -1
  198. package/dist/modules/smtp/smtp.entity.js +15 -15
  199. package/dist/modules/smtp/smtp.entity.js.map +1 -1
  200. package/dist/modules/smtp/smtp.module.js +2 -2
  201. package/dist/modules/smtp/smtp.module.js.map +1 -1
  202. package/dist/modules/smtp/smtp.service.d.ts +14 -0
  203. package/dist/modules/smtp/smtp.service.js +39 -12
  204. package/dist/modules/smtp/smtp.service.js.map +1 -1
  205. package/dist/modules/tag/tag.controller.js +24 -22
  206. package/dist/modules/tag/tag.controller.js.map +1 -1
  207. package/dist/modules/tag/tag.entity.js +12 -12
  208. package/dist/modules/tag/tag.entity.js.map +1 -1
  209. package/dist/modules/tag/tag.module.js +1 -1
  210. package/dist/modules/tag/tag.module.js.map +1 -1
  211. package/dist/modules/tag/tag.service.js +3 -3
  212. package/dist/modules/tag/tag.service.js.map +1 -1
  213. package/dist/modules/user/user.controller.js +36 -26
  214. package/dist/modules/user/user.controller.js.map +1 -1
  215. package/dist/modules/user/user.entity.js +22 -22
  216. package/dist/modules/user/user.entity.js.map +1 -1
  217. package/dist/modules/user/user.module.js +2 -2
  218. package/dist/modules/user/user.module.js.map +1 -1
  219. package/dist/modules/user/user.service.js +7 -4
  220. package/dist/modules/user/user.service.js.map +1 -1
  221. package/dist/modules/view/view.controller.js +20 -19
  222. package/dist/modules/view/view.controller.js.map +1 -1
  223. package/dist/modules/view/view.entity.js +24 -24
  224. package/dist/modules/view/view.entity.js.map +1 -1
  225. package/dist/modules/view/view.module.js +1 -1
  226. package/dist/modules/view/view.module.js.map +1 -1
  227. package/dist/modules/view/view.service.js +4 -4
  228. package/dist/modules/view/view.service.js.map +1 -1
  229. package/dist/modules/webhook/webhook.controller.js +9 -9
  230. package/dist/modules/webhook/webhook.controller.js.map +1 -1
  231. package/dist/modules/webhook/webhook.entity.js +13 -13
  232. package/dist/modules/webhook/webhook.entity.js.map +1 -1
  233. package/dist/modules/webhook/webhook.module.js +1 -1
  234. package/dist/modules/webhook/webhook.module.js.map +1 -1
  235. package/dist/modules/webhook/webhook.service.d.ts +1 -1
  236. package/dist/modules/webhook/webhook.service.js +7 -4
  237. package/dist/modules/webhook/webhook.service.js.map +1 -1
  238. package/dist/public/apple-touch-icon.png +0 -0
  239. package/dist/public/favicon-16.png +0 -0
  240. package/dist/public/favicon-32.png +0 -0
  241. package/dist/public/favicon-48.png +0 -0
  242. package/dist/public/favicon.ico +0 -0
  243. package/dist/public/favicon.png +0 -0
  244. package/dist/public/icon-192.png +0 -0
  245. package/dist/public/icon-512.png +0 -0
  246. package/dist/public/logo-200.png +0 -0
  247. package/dist/public/logo-400.png +0 -0
  248. package/dist/public/logo.png +0 -0
  249. package/dist/public/logo.svg +7 -0
  250. package/dist/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
  251. package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
  252. package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
  253. package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
  254. package/dist/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
  255. package/dist/starter.d.ts +2 -1
  256. package/dist/starter.js +200 -13
  257. package/dist/starter.js.map +1 -1
  258. package/dist/tsconfig.build.tsbuildinfo +1 -16966
  259. package/dist/tsconfig.tsbuildinfo +1 -0
  260. package/dist/utils/date.util.js +1 -1
  261. package/dist/utils/date.util.js.map +1 -1
  262. package/dist/utils/html-sanitize.util.d.ts +1 -0
  263. package/dist/utils/html-sanitize.util.js +33 -0
  264. package/dist/utils/html-sanitize.util.js.map +1 -0
  265. package/dist/utils/image-processor.util.d.ts +23 -0
  266. package/dist/utils/image-processor.util.js +88 -0
  267. package/dist/utils/image-processor.util.js.map +1 -0
  268. package/dist/utils/local-api-quiet.util.d.ts +1 -0
  269. package/dist/utils/local-api-quiet.util.js +8 -0
  270. package/dist/utils/local-api-quiet.util.js.map +1 -0
  271. package/dist/utils/markdown.util.js +1 -1
  272. package/dist/utils/markdown.util.js.map +1 -1
  273. package/dist/utils/oss/aliyun-oss-client.d.ts +3 -1
  274. package/dist/utils/oss/aliyun-oss-client.js +5 -0
  275. package/dist/utils/oss/aliyun-oss-client.js.map +1 -1
  276. package/dist/utils/oss/oss-client.d.ts +3 -1
  277. package/dist/utils/oss/oss-client.js.map +1 -1
  278. package/dist/utils/oss.util.d.ts +3 -1
  279. package/dist/utils/oss.util.js +5 -1
  280. package/dist/utils/oss.util.js.map +1 -1
  281. package/dist/utils/project-root.util.d.ts +2 -0
  282. package/dist/utils/project-root.util.js +42 -0
  283. package/dist/utils/project-root.util.js.map +1 -0
  284. package/dist/utils/query-whitelist.util.d.ts +1 -0
  285. package/dist/utils/query-whitelist.util.js +100 -0
  286. package/dist/utils/query-whitelist.util.js.map +1 -0
  287. package/dist/utils/uniqueid.util.js +1 -1
  288. package/dist/utils/uniqueid.util.js.map +1 -1
  289. package/dist/utils/upload.util.d.ts +6 -2
  290. package/dist/utils/upload.util.js +23 -8
  291. package/dist/utils/upload.util.js.map +1 -1
  292. package/dist/utils/user.util.d.ts +1 -0
  293. package/dist/utils/user.util.js +6 -2
  294. package/dist/utils/user.util.js.map +1 -1
  295. package/package.json +8 -9
  296. package/public/apple-touch-icon.png +0 -0
  297. package/public/favicon-16.png +0 -0
  298. package/public/favicon-32.png +0 -0
  299. package/public/favicon-48.png +0 -0
  300. package/public/favicon.ico +0 -0
  301. package/public/favicon.png +0 -0
  302. package/public/icon-192.png +0 -0
  303. package/public/icon-512.png +0 -0
  304. package/public/logo-200.png +0 -0
  305. package/public/logo-400.png +0 -0
  306. package/public/logo.png +0 -0
  307. package/public/logo.svg +7 -0
  308. package/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
  309. package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
  310. package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
  311. package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
  312. package/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"article.controller.js","sourceRoot":"","sources":["../../../src/modules/article/article.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"article.controller.js","sourceRoot":"","sources":["../../../src/modules/article/article.controller.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,9 @@ export declare class Article {
5
5
  title: string;
6
6
  cover: string;
7
7
  summary: string;
8
+ slug: string;
9
+ seoKeywords: string;
10
+ seoDescription: string;
8
11
  content: string;
9
12
  html: string;
10
13
  toc: string;
@@ -17,100 +17,115 @@ const tag_entity_1 = require("../tag/tag.entity");
17
17
  let Article = class Article {
18
18
  };
19
19
  __decorate([
20
- swagger_1.ApiProperty(),
21
- typeorm_1.PrimaryGeneratedColumn('uuid'),
20
+ (0, swagger_1.ApiProperty)(),
21
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
22
22
  __metadata("design:type", String)
23
23
  ], Article.prototype, "id", void 0);
24
24
  __decorate([
25
- swagger_1.ApiProperty(),
26
- typeorm_1.Column(),
25
+ (0, swagger_1.ApiProperty)(),
26
+ (0, typeorm_1.Column)(),
27
27
  __metadata("design:type", String)
28
28
  ], Article.prototype, "title", void 0);
29
29
  __decorate([
30
- swagger_1.ApiProperty(),
31
- typeorm_1.Column({ default: null }),
30
+ (0, swagger_1.ApiProperty)(),
31
+ (0, typeorm_1.Column)({ default: null }),
32
32
  __metadata("design:type", String)
33
33
  ], Article.prototype, "cover", void 0);
34
34
  __decorate([
35
- swagger_1.ApiProperty(),
36
- typeorm_1.Column({ type: 'text', default: null }),
35
+ (0, swagger_1.ApiProperty)(),
36
+ (0, typeorm_1.Column)({ type: 'text', default: null }),
37
37
  __metadata("design:type", String)
38
38
  ], Article.prototype, "summary", void 0);
39
39
  __decorate([
40
- swagger_1.ApiProperty(),
41
- typeorm_1.Column({ type: 'mediumtext', default: null, charset: 'utf8mb4' }),
40
+ (0, swagger_1.ApiProperty)({ description: 'URL 别名(slug)' }),
41
+ (0, typeorm_1.Column)({ type: 'varchar', length: 191, default: null, unique: true }),
42
+ __metadata("design:type", String)
43
+ ], Article.prototype, "slug", void 0);
44
+ __decorate([
45
+ (0, swagger_1.ApiProperty)({ description: 'SEO 关键词,逗号分隔' }),
46
+ (0, typeorm_1.Column)({ type: 'text', default: null }),
47
+ __metadata("design:type", String)
48
+ ], Article.prototype, "seoKeywords", void 0);
49
+ __decorate([
50
+ (0, swagger_1.ApiProperty)({ description: 'SEO 描述(meta description)' }),
51
+ (0, typeorm_1.Column)({ type: 'text', default: null }),
52
+ __metadata("design:type", String)
53
+ ], Article.prototype, "seoDescription", void 0);
54
+ __decorate([
55
+ (0, swagger_1.ApiProperty)(),
56
+ (0, typeorm_1.Column)({ type: 'text', default: null }),
42
57
  __metadata("design:type", String)
43
58
  ], Article.prototype, "content", void 0);
44
59
  __decorate([
45
- swagger_1.ApiProperty(),
46
- typeorm_1.Column({ type: 'mediumtext', default: null, charset: 'utf8mb4' }),
60
+ (0, swagger_1.ApiProperty)(),
61
+ (0, typeorm_1.Column)({ type: 'text', default: null }),
47
62
  __metadata("design:type", String)
48
63
  ], Article.prototype, "html", void 0);
49
64
  __decorate([
50
- swagger_1.ApiProperty(),
51
- typeorm_1.Column({ type: 'mediumtext', default: null }),
65
+ (0, swagger_1.ApiProperty)(),
66
+ (0, typeorm_1.Column)({ type: 'text', default: null }),
52
67
  __metadata("design:type", String)
53
68
  ], Article.prototype, "toc", void 0);
54
69
  __decorate([
55
- swagger_1.ApiProperty(),
56
- typeorm_1.ManyToOne(() => category_entity_1.Category, (category) => category.articles, { cascade: true }),
57
- typeorm_1.JoinTable(),
70
+ (0, swagger_1.ApiProperty)({ type: () => category_entity_1.Category }),
71
+ (0, typeorm_1.ManyToOne)(() => category_entity_1.Category, (category) => category.articles, { cascade: true }),
72
+ (0, typeorm_1.JoinTable)(),
58
73
  __metadata("design:type", category_entity_1.Category)
59
74
  ], Article.prototype, "category", void 0);
60
75
  __decorate([
61
- swagger_1.ApiProperty(),
62
- typeorm_1.ManyToMany(() => tag_entity_1.Tag, (tag) => tag.articles, { cascade: true }),
63
- typeorm_1.JoinTable(),
76
+ (0, swagger_1.ApiProperty)({ type: () => tag_entity_1.Tag, isArray: true }),
77
+ (0, typeorm_1.ManyToMany)(() => tag_entity_1.Tag, (tag) => tag.articles, { cascade: true }),
78
+ (0, typeorm_1.JoinTable)(),
64
79
  __metadata("design:type", Array)
65
80
  ], Article.prototype, "tags", void 0);
66
81
  __decorate([
67
- swagger_1.ApiProperty(),
68
- typeorm_1.Column('simple-enum', { enum: ['draft', 'publish'] }),
82
+ (0, swagger_1.ApiProperty)(),
83
+ (0, typeorm_1.Column)({ type: 'varchar', enum: ['draft', 'publish'] }),
69
84
  __metadata("design:type", String)
70
85
  ], Article.prototype, "status", void 0);
71
86
  __decorate([
72
- swagger_1.ApiProperty(),
73
- typeorm_1.Column({ type: 'int', default: 0 }),
87
+ (0, swagger_1.ApiProperty)(),
88
+ (0, typeorm_1.Column)({ type: 'int', default: 0 }),
74
89
  __metadata("design:type", Number)
75
90
  ], Article.prototype, "views", void 0);
76
91
  __decorate([
77
- swagger_1.ApiProperty(),
78
- typeorm_1.Column({ type: 'int', default: 0 }),
92
+ (0, swagger_1.ApiProperty)(),
93
+ (0, typeorm_1.Column)({ type: 'int', default: 0 }),
79
94
  __metadata("design:type", Number)
80
95
  ], Article.prototype, "likes", void 0);
81
96
  __decorate([
82
- swagger_1.ApiProperty(),
83
- typeorm_1.Column({ type: 'boolean', default: false }),
97
+ (0, swagger_1.ApiProperty)(),
98
+ (0, typeorm_1.Column)({ type: 'boolean', default: false }),
84
99
  __metadata("design:type", Boolean)
85
100
  ], Article.prototype, "isRecommended", void 0);
86
101
  __decorate([
87
- swagger_1.ApiProperty(),
88
- typeorm_1.Column({ type: 'text', default: null, select: false }),
102
+ (0, swagger_1.ApiProperty)(),
103
+ (0, typeorm_1.Column)({ type: 'text', default: null, select: false }),
89
104
  __metadata("design:type", String)
90
105
  ], Article.prototype, "password", void 0);
91
106
  __decorate([
92
- swagger_1.ApiProperty(),
93
- typeorm_1.Column({ type: 'boolean', default: false }),
107
+ (0, swagger_1.ApiProperty)(),
108
+ (0, typeorm_1.Column)({ type: 'boolean', default: false }),
94
109
  __metadata("design:type", Boolean)
95
110
  ], Article.prototype, "needPassword", void 0);
96
111
  __decorate([
97
- swagger_1.ApiProperty(),
98
- typeorm_1.Column({ type: 'boolean', default: true }),
112
+ (0, swagger_1.ApiProperty)(),
113
+ (0, typeorm_1.Column)({ type: 'boolean', default: true }),
99
114
  __metadata("design:type", Boolean)
100
115
  ], Article.prototype, "isCommentable", void 0);
101
116
  __decorate([
102
- swagger_1.ApiProperty(),
103
- typeorm_1.Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' }),
117
+ (0, swagger_1.ApiProperty)(),
118
+ (0, typeorm_1.Column)({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }),
104
119
  __metadata("design:type", Date)
105
120
  ], Article.prototype, "publishAt", void 0);
106
121
  __decorate([
107
- swagger_1.ApiProperty({ description: '定时发布时间(草稿状态下生效)' }),
108
- typeorm_1.Column({ type: 'timestamp', nullable: true }),
122
+ (0, swagger_1.ApiProperty)({ description: '定时发布时间(草稿状态下生效)' }),
123
+ (0, typeorm_1.Column)({ type: 'datetime', nullable: true }),
109
124
  __metadata("design:type", Date)
110
125
  ], Article.prototype, "scheduledPublishAt", void 0);
111
126
  __decorate([
112
- swagger_1.ApiProperty(),
113
- typeorm_1.CreateDateColumn({
127
+ (0, swagger_1.ApiProperty)(),
128
+ (0, typeorm_1.CreateDateColumn)({
114
129
  type: 'datetime',
115
130
  comment: '创建时间',
116
131
  name: 'create_at',
@@ -118,8 +133,8 @@ __decorate([
118
133
  __metadata("design:type", Date)
119
134
  ], Article.prototype, "createAt", void 0);
120
135
  __decorate([
121
- swagger_1.ApiProperty(),
122
- typeorm_1.UpdateDateColumn({
136
+ (0, swagger_1.ApiProperty)(),
137
+ (0, typeorm_1.UpdateDateColumn)({
123
138
  type: 'datetime',
124
139
  comment: '更新时间',
125
140
  name: 'update_at',
@@ -127,7 +142,7 @@ __decorate([
127
142
  __metadata("design:type", Date)
128
143
  ], Article.prototype, "updateAt", void 0);
129
144
  Article = __decorate([
130
- typeorm_1.Entity()
145
+ (0, typeorm_1.Entity)()
131
146
  ], Article);
132
147
  exports.Article = Article;
133
148
  //# sourceMappingURL=article.entity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"article.entity.js","sourceRoot":"","sources":["../../../src/modules/article/article.entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"article.entity.js","sourceRoot":"","sources":["../../../src/modules/article/article.entity.ts"],"names":[],"mappings":"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"}
@@ -11,21 +11,24 @@ const common_1 = require("@nestjs/common");
11
11
  const typeorm_1 = require("@nestjs/typeorm");
12
12
  const api_key_module_1 = require("../api-key/api-key.module");
13
13
  const auth_module_1 = require("../auth/auth.module");
14
+ const category_entity_1 = require("../category/category.entity");
14
15
  const category_module_1 = require("../category/category.module");
16
+ const tag_entity_1 = require("../tag/tag.entity");
15
17
  const tag_module_1 = require("../tag/tag.module");
16
18
  const user_module_1 = require("../user/user.module");
17
19
  const webhook_module_1 = require("../webhook/webhook.module");
18
- const article_revision_entity_1 = require("./article-revision.entity");
20
+ const bootstrap_service_1 = require("../bootstrap/bootstrap.service");
19
21
  const article_controller_1 = require("./article.controller");
20
22
  const article_entity_1 = require("./article.entity");
21
23
  const article_service_1 = require("./article.service");
24
+ const article_revision_entity_1 = require("./article-revision.entity");
22
25
  const scheduled_publish_service_1 = require("./scheduled-publish.service");
23
26
  let ArticleModule = class ArticleModule {
24
27
  };
25
28
  ArticleModule = __decorate([
26
- common_1.Module({
29
+ (0, common_1.Module)({
27
30
  imports: [
28
- typeorm_1.TypeOrmModule.forFeature([article_entity_1.Article, article_revision_entity_1.ArticleRevision]),
31
+ typeorm_1.TypeOrmModule.forFeature([article_entity_1.Article, article_revision_entity_1.ArticleRevision, category_entity_1.Category, tag_entity_1.Tag]),
29
32
  category_module_1.CategoryModule,
30
33
  tag_module_1.TagModule,
31
34
  user_module_1.UserModule,
@@ -34,7 +37,7 @@ ArticleModule = __decorate([
34
37
  webhook_module_1.WebhookModule,
35
38
  ],
36
39
  exports: [article_service_1.ArticleService],
37
- providers: [article_service_1.ArticleService, scheduled_publish_service_1.ScheduledPublishService],
40
+ providers: [article_service_1.ArticleService, scheduled_publish_service_1.ScheduledPublishService, bootstrap_service_1.BootstrapService],
38
41
  controllers: [article_controller_1.ArticleController],
39
42
  })
40
43
  ], ArticleModule);
@@ -1 +1 @@
1
- {"version":3,"file":"article.module.js","sourceRoot":"","sources":["../../../src/modules/article/article.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAEhD,8DAAyD;AACzD,qDAAiD;AACjD,iEAA6D;AAC7D,kDAA8C;AAC9C,qDAAiD;AACjD,8DAA0D;AAC1D,uEAA4D;AAC5D,6DAAyD;AACzD,qDAA2C;AAC3C,uDAAmD;AACnD,2EAAsE;AAgBtE,IAAa,aAAa,GAA1B,MAAa,aAAa;CAAG,CAAA;AAAhB,aAAa;IAdzB,eAAM,CAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,wBAAO,EAAE,yCAAe,CAAC,CAAC;YACpD,gCAAc;YACd,sBAAS;YACT,wBAAU;YACV,wBAAU;YACV,6BAAY;YACZ,8BAAa;SACd;QACD,OAAO,EAAE,CAAC,gCAAc,CAAC;QACzB,SAAS,EAAE,CAAC,gCAAc,EAAE,mDAAuB,CAAC;QACpD,WAAW,EAAE,CAAC,sCAAiB,CAAC;KACjC,CAAC;GACW,aAAa,CAAG;AAAhB,sCAAa"}
1
+ {"version":3,"file":"article.module.js","sourceRoot":"","sources":["../../../src/modules/article/article.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAEhD,8DAAyD;AACzD,qDAAiD;AACjD,iEAAuD;AACvD,iEAA6D;AAC7D,kDAAwC;AACxC,kDAA8C;AAC9C,qDAAiD;AACjD,8DAA0D;AAC1D,sEAAkE;AAClE,6DAAyD;AACzD,qDAA2C;AAC3C,uDAAmD;AACnD,uEAA4D;AAC5D,2EAAsE;AAgB/D,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,aAAa;IAdzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,wBAAO,EAAE,yCAAe,EAAE,0BAAQ,EAAE,gBAAG,CAAC,CAAC;YACnE,gCAAc;YACd,sBAAS;YACT,wBAAU;YACV,wBAAU;YACV,6BAAY;YACZ,8BAAa;SACd;QACD,OAAO,EAAE,CAAC,gCAAc,CAAC;QACzB,SAAS,EAAE,CAAC,gCAAc,EAAE,mDAAuB,EAAE,oCAAgB,CAAC;QACtE,WAAW,EAAE,CAAC,sCAAiB,CAAC;KACjC,CAAC;GACW,aAAa,CAAG;AAAhB,sCAAa"}
@@ -1,18 +1,24 @@
1
1
  import { Repository } from 'typeorm';
2
2
  import { CategoryService } from '../category/category.service';
3
+ import { HookService } from '../hook/hook.service';
3
4
  import { TagService } from '../tag/tag.service';
4
5
  import { WebhookService } from '../webhook/webhook.service';
5
- import { ArticleRevision } from './article-revision.entity';
6
6
  import { Article } from './article.entity';
7
+ import { ArticleRevision } from './article-revision.entity';
7
8
  export declare class ArticleService {
8
9
  private readonly articleRepository;
9
10
  private readonly revisionRepository;
10
11
  private readonly tagService;
11
12
  private readonly categoryService;
12
13
  private readonly webhookService;
13
- constructor(articleRepository: Repository<Article>, revisionRepository: Repository<ArticleRevision>, tagService: TagService, categoryService: CategoryService, webhookService: WebhookService);
14
+ private readonly hookService;
15
+ constructor(articleRepository: Repository<Article>, revisionRepository: Repository<ArticleRevision>, tagService: TagService, categoryService: CategoryService, webhookService: WebhookService, hookService: HookService);
14
16
  private saveRevision;
15
17
  private notifyPublished;
18
+ private applyPublishFilters;
19
+ private normalizeSeoPayload;
20
+ private applyPublishFilterPatch;
21
+ private assertSlugAvailable;
16
22
  create(article: Partial<Article>): Promise<Article>;
17
23
  findAll(queryParams: any): Promise<[Article[], number]>;
18
24
  findArticlesByCategory(category: any, queryParams: any): Promise<(number | Article[])[]>;
@@ -34,5 +40,5 @@ export declare class ArticleService {
34
40
  updateLikesById(id: any, type: any): Promise<Article>;
35
41
  deleteById(id: any): Promise<Article>;
36
42
  search(keyword: any): Promise<Article[]>;
37
- recommend(articleId?: any): Promise<Article[]>;
43
+ recommend(articleId?: any, pageSize?: number): Promise<Article[]>;
38
44
  }
@@ -24,27 +24,31 @@ var __rest = (this && this.__rest) || function (s, e) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.ArticleService = void 0;
27
- const api_messages_1 = require("../../common/api-messages");
28
27
  const common_1 = require("@nestjs/common");
29
28
  const typeorm_1 = require("@nestjs/typeorm");
30
29
  const typeorm_2 = require("typeorm");
30
+ const api_messages_1 = require("../../common/api-messages");
31
31
  const date_util_1 = require("../../utils/date.util");
32
+ const query_whitelist_util_1 = require("../../utils/query-whitelist.util");
32
33
  const category_service_1 = require("../category/category.service");
34
+ const hook_service_1 = require("../hook/hook.service");
33
35
  const tag_service_1 = require("../tag/tag.service");
34
36
  const webhook_service_1 = require("../webhook/webhook.service");
35
- const article_revision_entity_1 = require("./article-revision.entity");
36
37
  const article_entity_1 = require("./article.entity");
38
+ const article_revision_entity_1 = require("./article-revision.entity");
39
+ const article_slug_util_1 = require("./article-slug.util");
37
40
  const article_util_1 = require("./article.util");
38
41
  const Segment = require('segment');
39
42
  const segment = new Segment();
40
43
  segment.useDefault();
41
44
  let ArticleService = class ArticleService {
42
- constructor(articleRepository, revisionRepository, tagService, categoryService, webhookService) {
45
+ constructor(articleRepository, revisionRepository, tagService, categoryService, webhookService, hookService) {
43
46
  this.articleRepository = articleRepository;
44
47
  this.revisionRepository = revisionRepository;
45
48
  this.tagService = tagService;
46
49
  this.categoryService = categoryService;
47
50
  this.webhookService = webhookService;
51
+ this.hookService = hookService;
48
52
  }
49
53
  async saveRevision(article) {
50
54
  const revision = this.revisionRepository.create({
@@ -62,22 +66,72 @@ let ArticleService = class ArticleService {
62
66
  return;
63
67
  await this.webhookService.dispatch('article.published', Object.assign({ id: article.id, title: article.title, status: article.status, publishAt: article.publishAt }, extra));
64
68
  }
69
+ async applyPublishFilters(article) {
70
+ return this.hookService.applyFilters('article.beforePublish', Object.assign({}, article));
71
+ }
72
+ normalizeSeoPayload(payload) {
73
+ const next = Object.assign({}, payload);
74
+ if ('slug' in next) {
75
+ next.slug = (0, article_slug_util_1.normalizeArticleSlug)(next.slug);
76
+ }
77
+ if (typeof next.seoKeywords === 'string') {
78
+ next.seoKeywords = next.seoKeywords.trim() || null;
79
+ }
80
+ if (typeof next.seoDescription === 'string') {
81
+ next.seoDescription = next.seoDescription.trim() || null;
82
+ }
83
+ return next;
84
+ }
85
+ applyPublishFilterPatch(patch, filtered) {
86
+ const next = Object.assign({}, patch);
87
+ for (const key of ['summary', 'slug', 'seoKeywords', 'seoDescription']) {
88
+ if (filtered[key] !== undefined && filtered[key] !== null) {
89
+ next[key] = filtered[key];
90
+ }
91
+ }
92
+ return next;
93
+ }
94
+ async assertSlugAvailable(slug, excludeId) {
95
+ if (!slug)
96
+ return;
97
+ const query = this.articleRepository
98
+ .createQueryBuilder('article')
99
+ .where('article.slug = :slug', { slug })
100
+ .take(1);
101
+ if (excludeId) {
102
+ query.andWhere('article.id != :excludeId', { excludeId });
103
+ }
104
+ const exist = await query.getOne();
105
+ if (exist) {
106
+ throw new common_1.HttpException(api_messages_1.ApiMsg.ARTICLE_SLUG_EXISTS, common_1.HttpStatus.BAD_REQUEST);
107
+ }
108
+ }
65
109
  async create(article) {
66
- const { title } = article;
110
+ let payload = this.normalizeSeoPayload(await this.hookService.applyFilters('article.beforeCreate', Object.assign({}, article)));
111
+ const { title } = payload;
67
112
  const exist = await this.articleRepository.findOne({ where: { title } });
68
113
  if (exist) {
69
114
  throw new common_1.HttpException(api_messages_1.ApiMsg.ARTICLE_TITLE_EXISTS, common_1.HttpStatus.BAD_REQUEST);
70
115
  }
71
- let { tags, category, status } = article;
116
+ await this.assertSlugAvailable(payload.slug);
117
+ let { tags, category, status } = payload;
72
118
  if (status === 'publish') {
73
- Object.assign(article, {
74
- publishAt: date_util_1.dateFormat(),
119
+ payload = this.normalizeSeoPayload(await this.applyPublishFilters(payload));
120
+ await this.assertSlugAvailable(payload.slug);
121
+ Object.assign(payload, {
122
+ publishAt: (0, date_util_1.dateFormat)(),
75
123
  });
76
124
  }
77
125
  tags = await this.tagService.findByIds(('' + tags).split(','));
78
126
  const existCategory = await this.categoryService.findById(category);
79
- const newArticle = await this.articleRepository.create(Object.assign(Object.assign({}, article), { category: existCategory, tags, needPassword: !!article.password }));
127
+ const newArticle = await this.articleRepository.create(Object.assign(Object.assign({}, payload), { category: existCategory, tags, needPassword: !!payload.password }));
80
128
  await this.articleRepository.save(newArticle);
129
+ if (newArticle.status === 'publish') {
130
+ await this.hookService.doAction('article.afterPublish', {
131
+ article: newArticle,
132
+ isNew: true,
133
+ });
134
+ }
81
135
  await this.notifyPublished(newArticle);
82
136
  return newArticle;
83
137
  }
@@ -93,15 +147,14 @@ let ArticleService = class ArticleService {
93
147
  if (status) {
94
148
  query.andWhere('article.status=:status').setParameter('status', status);
95
149
  }
96
- if (otherParams) {
97
- Object.keys(otherParams).forEach((key) => {
98
- query.andWhere(`article.${key} LIKE :${key}`).setParameter(`${key}`, `%${otherParams[key]}%`);
99
- });
100
- }
150
+ const filtered = (0, query_whitelist_util_1.filterByWhitelist)('article', queryParams);
151
+ Object.keys(filtered).forEach((key) => {
152
+ query.andWhere(`article.${key} LIKE :${key}`).setParameter(`${key}`, `%${filtered[key]}%`);
153
+ });
101
154
  const [data, total] = await query.getManyAndCount();
102
155
  data.forEach((d) => {
103
156
  if (d.needPassword) {
104
- article_util_1.extractProtectedArticle(d);
157
+ (0, article_util_1.extractProtectedArticle)(d);
105
158
  }
106
159
  });
107
160
  return [data, total];
@@ -121,7 +174,7 @@ let ArticleService = class ArticleService {
121
174
  const [data, total] = await query.getManyAndCount();
122
175
  data.forEach((d) => {
123
176
  if (d.needPassword) {
124
- article_util_1.extractProtectedArticle(d);
177
+ (0, article_util_1.extractProtectedArticle)(d);
125
178
  }
126
179
  });
127
180
  return [data, total];
@@ -142,7 +195,7 @@ let ArticleService = class ArticleService {
142
195
  const [data, total] = await query.getManyAndCount();
143
196
  data.forEach((d) => {
144
197
  if (d.needPassword) {
145
- article_util_1.extractProtectedArticle(d);
198
+ (0, article_util_1.extractProtectedArticle)(d);
146
199
  }
147
200
  });
148
201
  return [data, total];
@@ -178,7 +231,7 @@ let ArticleService = class ArticleService {
178
231
  const year = new Date(d.publishAt).getFullYear();
179
232
  const month = new Date(d.publishAt).getMonth();
180
233
  if (d.needPassword) {
181
- article_util_1.extractProtectedArticle(d);
234
+ (0, article_util_1.extractProtectedArticle)(d);
182
235
  }
183
236
  if (!ret[year]) {
184
237
  ret[year] = {};
@@ -208,14 +261,16 @@ let ArticleService = class ArticleService {
208
261
  .leftJoinAndSelect('article.tags', 'tags')
209
262
  .where('article.id=:id')
210
263
  .orWhere('article.title=:title')
264
+ .orWhere('article.slug=:slug')
211
265
  .setParameter('id', id)
212
- .setParameter('title', id);
266
+ .setParameter('title', id)
267
+ .setParameter('slug', id);
213
268
  if (status) {
214
269
  query.andWhere('article.status=:status').setParameter('status', status);
215
270
  }
216
271
  const data = await query.getOne();
217
272
  if (data && data.needPassword && !isAdmin) {
218
- article_util_1.extractProtectedArticle(data);
273
+ (0, article_util_1.extractProtectedArticle)(data);
219
274
  }
220
275
  return data;
221
276
  }
@@ -224,18 +279,30 @@ let ArticleService = class ArticleService {
224
279
  const oldArticle = await this.articleRepository.findOne(id);
225
280
  await this.saveRevision(oldArticle);
226
281
  let { tags, category, status } = article;
282
+ let patch = this.normalizeSeoPayload(Object.assign(Object.assign({}, article), { views: oldArticle.views, needPassword: !!article.password }));
283
+ await this.assertSlugAvailable(patch.slug, id);
227
284
  if (tags) {
228
285
  tags = await this.tagService.findByIds(('' + tags).split(','));
229
286
  }
230
287
  const existCategory = await this.categoryService.findById(category);
231
288
  const becomingPublish = oldArticle.status === 'draft' && status === 'publish';
232
- const newArticle = Object.assign(Object.assign({}, article), { views: oldArticle.views, category: existCategory, needPassword: !!article.password, publishAt: becomingPublish ? date_util_1.dateFormat() : oldArticle.publishAt, scheduledPublishAt: status === 'publish' ? null : (_a = article.scheduledPublishAt) !== null && _a !== void 0 ? _a : oldArticle.scheduledPublishAt });
289
+ patch = Object.assign(Object.assign({}, patch), { category: existCategory, publishAt: becomingPublish ? (0, date_util_1.dateFormat)() : oldArticle.publishAt, scheduledPublishAt: status === 'publish' ? null : (_a = article.scheduledPublishAt) !== null && _a !== void 0 ? _a : oldArticle.scheduledPublishAt });
233
290
  if (tags) {
234
- Object.assign(newArticle, { tags });
291
+ Object.assign(patch, { tags });
292
+ }
293
+ if (status === 'publish' || becomingPublish) {
294
+ const filtered = this.normalizeSeoPayload(await this.applyPublishFilters(Object.assign(Object.assign({}, oldArticle), patch)));
295
+ patch = this.applyPublishFilterPatch(patch, filtered);
296
+ await this.assertSlugAvailable(patch.slug, id);
297
+ patch.publishAt = becomingPublish ? (0, date_util_1.dateFormat)() : oldArticle.publishAt;
235
298
  }
236
- const updatedArticle = await this.articleRepository.merge(oldArticle, newArticle);
299
+ const updatedArticle = await this.articleRepository.merge(oldArticle, patch);
237
300
  const saved = await this.articleRepository.save(updatedArticle);
238
301
  if (becomingPublish) {
302
+ await this.hookService.doAction('article.afterPublish', {
303
+ article: saved,
304
+ isNew: false,
305
+ });
239
306
  await this.notifyPublished(saved);
240
307
  }
241
308
  return saved;
@@ -288,7 +355,7 @@ let ArticleService = class ArticleService {
288
355
  .getMany();
289
356
  return res;
290
357
  }
291
- async recommend(articleId = null) {
358
+ async recommend(articleId = null, pageSize = 6) {
292
359
  const query = this.articleRepository
293
360
  .createQueryBuilder('article')
294
361
  .orderBy('article.publishAt', 'DESC')
@@ -296,7 +363,7 @@ let ArticleService = class ArticleService {
296
363
  .leftJoinAndSelect('article.tags', 'tags');
297
364
  if (!articleId) {
298
365
  query.where('article.status=:status').setParameter('status', 'publish');
299
- return query.take(6).getMany();
366
+ return query.take(pageSize).getMany();
300
367
  }
301
368
  const sub = this.articleRepository
302
369
  .createQueryBuilder('article')
@@ -307,7 +374,7 @@ let ArticleService = class ArticleService {
307
374
  .setParameter('id', articleId);
308
375
  const exist = await sub.getOne();
309
376
  if (!exist) {
310
- return query.take(6).getMany();
377
+ return query.take(pageSize).getMany();
311
378
  }
312
379
  const { title, summary } = exist;
313
380
  try {
@@ -340,18 +407,19 @@ let ArticleService = class ArticleService {
340
407
  }
341
408
  catch (e) { }
342
409
  const data = await query.getMany();
343
- return data.filter((d) => d.id !== articleId && d.status === 'publish');
410
+ return data.filter((d) => d.id !== articleId && d.status === 'publish').slice(0, pageSize);
344
411
  }
345
412
  };
346
413
  ArticleService = __decorate([
347
- common_1.Injectable(),
348
- __param(0, typeorm_1.InjectRepository(article_entity_1.Article)),
349
- __param(1, typeorm_1.InjectRepository(article_revision_entity_1.ArticleRevision)),
414
+ (0, common_1.Injectable)(),
415
+ __param(0, (0, typeorm_1.InjectRepository)(article_entity_1.Article)),
416
+ __param(1, (0, typeorm_1.InjectRepository)(article_revision_entity_1.ArticleRevision)),
350
417
  __metadata("design:paramtypes", [typeorm_2.Repository,
351
418
  typeorm_2.Repository,
352
419
  tag_service_1.TagService,
353
420
  category_service_1.CategoryService,
354
- webhook_service_1.WebhookService])
421
+ webhook_service_1.WebhookService,
422
+ hook_service_1.HookService])
355
423
  ], ArticleService);
356
424
  exports.ArticleService = ArticleService;
357
425
  //# sourceMappingURL=article.service.js.map