sitero 0.6.0 → 0.8.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 (378) hide show
  1. package/dist/export/cms/client/components/index.js +6 -2
  2. package/dist/export/cms/client/index.js +2 -0
  3. package/dist/export/cms/client/pages/index.js +1 -4
  4. package/dist/export/cms/server/index.js +1 -0
  5. package/dist/export/core/server/index.js +2 -0
  6. package/dist/export/index.js +1 -0
  7. package/dist/export/web/server/index.js +1 -0
  8. package/dist/prisma/generated/internal/class.js +4 -4
  9. package/dist/src/cms/client/applications/create-applications.js +5 -0
  10. package/dist/src/cms/client/applications/resources/page/form-data.js +56 -0
  11. package/dist/src/cms/client/applications/resources/page/use-page-update-form-data.js +30 -0
  12. package/dist/src/cms/client/applications/resources/post/use-create-form-data.js +5 -5
  13. package/dist/src/cms/client/applications/resources/post/use-update-form-data.js +1 -1
  14. package/dist/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.js +35 -0
  15. package/dist/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.js +15 -31
  16. package/dist/src/cms/client/applications/ui/use-nav-items.js +28 -39
  17. package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.js +5 -4
  18. package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.js +7 -0
  19. package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.js +32 -1
  20. package/dist/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.js +8 -1
  21. package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.js +6 -5
  22. package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.js +7 -0
  23. package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.js +18 -1
  24. package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.js +12 -7
  25. package/dist/src/cms/client/infrastructure/operation-result/presentation/message.js +15 -0
  26. package/dist/src/cms/client/interfaces/components/create-components.js +7 -8
  27. package/dist/src/cms/client/interfaces/components/create-page-contents.js +28 -0
  28. package/dist/src/cms/client/interfaces/components/resources/page/content/field-groups.js +16 -0
  29. package/dist/src/cms/client/interfaces/components/resources/page/content/page-edit-content.js +216 -0
  30. package/dist/src/cms/client/interfaces/components/resources/page/content/page-show-content.js +114 -0
  31. package/dist/src/cms/client/interfaces/components/resources/page/content/types.js +12 -0
  32. package/dist/src/cms/client/interfaces/components/resources/post/category/category-card.js +17 -5
  33. package/dist/src/cms/client/interfaces/components/resources/post/category/category-table.js +16 -5
  34. package/dist/src/cms/client/interfaces/components/resources/post/content/post-create-content.js +13 -8
  35. package/dist/src/cms/client/interfaces/components/resources/post/content/post-edit-content.js +11 -7
  36. package/dist/src/cms/client/interfaces/components/resources/post/content/post-show-content.js +7 -2
  37. package/dist/src/cms/client/interfaces/components/resources/post/post-card.js +17 -5
  38. package/dist/src/cms/client/interfaces/components/resources/post/post-list.js +49 -10
  39. package/dist/src/cms/client/interfaces/components/resources/post/post-state-icons.js +37 -6
  40. package/dist/src/cms/client/interfaces/components/resources/post/post-table.js +18 -5
  41. package/dist/src/cms/client/interfaces/components/resources/post/search/control-fields-filters.js +5 -1
  42. package/dist/src/cms/client/interfaces/components/resources/post/tag/tag-card.js +12 -2
  43. package/dist/src/cms/client/interfaces/components/resources/post/tag/tag-table.js +10 -1
  44. package/dist/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.js +90 -67
  45. package/dist/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.js +11 -1
  46. package/dist/src/cms/client/interfaces/components/ui/blocks/list-container/list-container.js +1 -1
  47. package/dist/src/cms/client/interfaces/components/ui/blocks/list-container/pagination.js +9 -9
  48. package/dist/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.js +15 -3
  49. package/dist/src/cms/client/interfaces/components/ui/features/accordion/accordion.js +5 -7
  50. package/dist/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-display.js +1 -1
  51. package/dist/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-input.js +1 -1
  52. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/edit/page.js +11 -11
  53. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/page.js +12 -16
  54. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/relations/page.js +6 -2
  55. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/create/page.js +15 -16
  56. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/page.js +18 -41
  57. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/edit/page.js +10 -11
  58. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/page.js +11 -16
  59. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/relations/page.js +1 -0
  60. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/create/page.js +14 -16
  61. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/edit/page.js +11 -11
  62. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/page.js +12 -16
  63. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/relations/page.js +1 -0
  64. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/create/page.js +15 -16
  65. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/page.js +18 -32
  66. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/edit/page.js +2 -2
  67. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/page.js +9 -9
  68. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/relations/page.js +6 -2
  69. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/create/page.js +2 -2
  70. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.js +204 -0
  71. package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/admin-refresh-token/page.js +1 -0
  72. package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/page.js +1 -0
  73. package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/relations/page.js +8 -3
  74. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/_id_/page.js +3 -2
  75. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/_id_/relations/page.js +41 -30
  76. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/delete-many/page.js +3 -3
  77. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/page.js +1 -1
  78. package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/trash/page.js +3 -2
  79. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/_slug_/edit/page.js +19 -11
  80. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/_slug_/page.js +23 -10
  81. package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/page.js +7 -7
  82. package/dist/src/cms/server/create-cms-server.js +2 -0
  83. package/dist/src/cms/server/resources/page/actions.js +31 -0
  84. package/dist/src/cms/server/resources/post/actions.js +27 -6
  85. package/dist/src/cms/server/resources/seo-metadata/actions.js +7 -16
  86. package/dist/src/config/content-ui.js +24 -0
  87. package/dist/src/config/topics.js +1 -1
  88. package/dist/src/constants/paths/cms-paths.js +2 -2
  89. package/dist/src/core/infrastructure/prisma/file/include.js +44 -0
  90. package/dist/src/core/infrastructure/prisma/file/mappers.js +51 -3
  91. package/dist/src/core/infrastructure/prisma/helpers/active-file-references.js +2 -1
  92. package/dist/src/core/infrastructure/prisma/page/include.js +20 -0
  93. package/dist/src/core/infrastructure/prisma/page/mappers.js +44 -0
  94. package/dist/src/core/infrastructure/prisma/page/page-prisma-ports.js +91 -0
  95. package/dist/src/core/infrastructure/prisma/post/include.js +2 -5
  96. package/dist/src/core/infrastructure/prisma/post/lifecycle.js +108 -0
  97. package/dist/src/core/infrastructure/prisma/post/mappers.js +0 -2
  98. package/dist/src/core/infrastructure/prisma/post/post-prisma-ports.js +76 -24
  99. package/dist/src/core/infrastructure/prisma/post/read-scope.js +45 -0
  100. package/dist/src/core/infrastructure/prisma/seo-metadata/mappers.js +6 -1
  101. package/dist/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.js +32 -11
  102. package/dist/src/core/seeders/page/seeder.js +9 -29
  103. package/dist/src/core/seeders/seed.js +0 -3
  104. package/dist/src/core/sitero-server/create-sitero-server.js +10 -0
  105. package/dist/src/web/server/create-web-server.js +5 -1
  106. package/dist/src/web/server/resources/page/actions.js +20 -0
  107. package/dist/src/web/server/resources/post/actions.js +3 -13
  108. package/dist/src/web/server/seo/sitemap/get-page-items.js +7 -6
  109. package/dist/src/web/server/seo/sitemap/get-post-items.js +2 -2
  110. package/dist/src/web/server/seo/sitemap/get-subcategory-items.js +1 -1
  111. package/dist/types/export/cms/client/components/index.d.ts +3 -0
  112. package/dist/types/export/cms/client/components/index.d.ts.map +1 -1
  113. package/dist/types/export/cms/client/index.d.ts +2 -0
  114. package/dist/types/export/cms/client/index.d.ts.map +1 -1
  115. package/dist/types/export/cms/client/pages/index.d.ts +3 -2
  116. package/dist/types/export/cms/client/pages/index.d.ts.map +1 -1
  117. package/dist/types/export/cms/server/index.d.ts +2 -1
  118. package/dist/types/export/cms/server/index.d.ts.map +1 -1
  119. package/dist/types/export/index.d.ts +1 -1
  120. package/dist/types/export/index.d.ts.map +1 -1
  121. package/dist/types/export/web/server/index.d.ts +2 -1
  122. package/dist/types/export/web/server/index.d.ts.map +1 -1
  123. package/dist/types/src/cms/client/applications/create-applications.d.ts.map +1 -1
  124. package/dist/types/src/cms/client/applications/index.d.ts +1 -0
  125. package/dist/types/src/cms/client/applications/index.d.ts.map +1 -1
  126. package/dist/types/src/cms/client/applications/resources/index.d.ts +1 -0
  127. package/dist/types/src/cms/client/applications/resources/index.d.ts.map +1 -1
  128. package/dist/types/src/cms/client/applications/resources/page/form-data.d.ts +21 -0
  129. package/dist/types/src/cms/client/applications/resources/page/form-data.d.ts.map +1 -0
  130. package/dist/types/src/cms/client/applications/resources/page/index.d.ts +3 -0
  131. package/dist/types/src/cms/client/applications/resources/page/index.d.ts.map +1 -0
  132. package/dist/types/src/cms/client/applications/resources/page/use-page-update-form-data.d.ts +12 -0
  133. package/dist/types/src/cms/client/applications/resources/page/use-page-update-form-data.d.ts.map +1 -0
  134. package/dist/types/src/cms/client/applications/resources/post/use-create-form-data.d.ts +3 -5
  135. package/dist/types/src/cms/client/applications/resources/post/use-create-form-data.d.ts.map +1 -1
  136. package/dist/types/src/cms/client/applications/resources/post/use-update-form-data.d.ts.map +1 -1
  137. package/dist/types/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.d.ts +6 -0
  138. package/dist/types/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.d.ts.map +1 -0
  139. package/dist/types/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.d.ts +5 -4
  140. package/dist/types/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.d.ts.map +1 -1
  141. package/dist/types/src/cms/client/applications/types.d.ts +2 -1
  142. package/dist/types/src/cms/client/applications/types.d.ts.map +1 -1
  143. package/dist/types/src/cms/client/applications/ui/use-nav-items.d.ts +3 -4
  144. package/dist/types/src/cms/client/applications/ui/use-nav-items.d.ts.map +1 -1
  145. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/index.d.ts +86 -0
  146. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/index.d.ts.map +1 -1
  147. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.d.ts +3 -0
  148. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.d.ts.map +1 -1
  149. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.d.ts +71 -0
  150. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.d.ts.map +1 -1
  151. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.d.ts +51 -0
  152. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.d.ts.map +1 -1
  153. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.d.ts +15 -0
  154. package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.d.ts.map +1 -1
  155. package/dist/types/src/cms/client/infrastructure/i18n/messages/index.d.ts +172 -0
  156. package/dist/types/src/cms/client/infrastructure/i18n/messages/index.d.ts.map +1 -1
  157. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/index.d.ts +86 -0
  158. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/index.d.ts.map +1 -1
  159. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.d.ts +3 -0
  160. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.d.ts.map +1 -1
  161. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.d.ts +71 -0
  162. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.d.ts.map +1 -1
  163. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.d.ts +51 -0
  164. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.d.ts.map +1 -1
  165. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.d.ts +15 -0
  166. package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.d.ts.map +1 -1
  167. package/dist/types/src/cms/client/infrastructure/operation-result/presentation/message.d.ts.map +1 -1
  168. package/dist/types/src/cms/client/interfaces/components/create-components.d.ts +6 -3
  169. package/dist/types/src/cms/client/interfaces/components/create-components.d.ts.map +1 -1
  170. package/dist/types/src/cms/client/interfaces/components/create-page-contents.d.ts +30 -0
  171. package/dist/types/src/cms/client/interfaces/components/create-page-contents.d.ts.map +1 -0
  172. package/dist/types/src/cms/client/interfaces/components/resources/index.d.ts +1 -1
  173. package/dist/types/src/cms/client/interfaces/components/resources/index.d.ts.map +1 -1
  174. package/dist/types/src/cms/client/interfaces/components/resources/page/content/field-groups.d.ts +3 -0
  175. package/dist/types/src/cms/client/interfaces/components/resources/page/content/field-groups.d.ts.map +1 -0
  176. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-edit-content.d.ts +14 -0
  177. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-edit-content.d.ts.map +1 -0
  178. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-show-content.d.ts +7 -0
  179. package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-show-content.d.ts.map +1 -0
  180. package/dist/types/src/cms/client/interfaces/components/resources/page/content/types.d.ts +27 -0
  181. package/dist/types/src/cms/client/interfaces/components/resources/page/content/types.d.ts.map +1 -0
  182. package/dist/types/src/cms/client/interfaces/components/resources/page/index.d.ts +4 -0
  183. package/dist/types/src/cms/client/interfaces/components/resources/page/index.d.ts.map +1 -0
  184. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-card.d.ts +5 -2
  185. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-card.d.ts.map +1 -1
  186. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-table.d.ts +1 -1
  187. package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-table.d.ts.map +1 -1
  188. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-create-content.d.ts +3 -5
  189. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-create-content.d.ts.map +1 -1
  190. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-edit-content.d.ts.map +1 -1
  191. package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-show-content.d.ts.map +1 -1
  192. package/dist/types/src/cms/client/interfaces/components/resources/post/post-card.d.ts +6 -3
  193. package/dist/types/src/cms/client/interfaces/components/resources/post/post-card.d.ts.map +1 -1
  194. package/dist/types/src/cms/client/interfaces/components/resources/post/post-list.d.ts +6 -3
  195. package/dist/types/src/cms/client/interfaces/components/resources/post/post-list.d.ts.map +1 -1
  196. package/dist/types/src/cms/client/interfaces/components/resources/post/post-state-icons.d.ts +7 -2
  197. package/dist/types/src/cms/client/interfaces/components/resources/post/post-state-icons.d.ts.map +1 -1
  198. package/dist/types/src/cms/client/interfaces/components/resources/post/post-table.d.ts +5 -2
  199. package/dist/types/src/cms/client/interfaces/components/resources/post/post-table.d.ts.map +1 -1
  200. package/dist/types/src/cms/client/interfaces/components/resources/post/search/control-fields-filters.d.ts.map +1 -1
  201. package/dist/types/src/cms/client/interfaces/components/resources/post/tag/tag-card.d.ts +3 -2
  202. package/dist/types/src/cms/client/interfaces/components/resources/post/tag/tag-card.d.ts.map +1 -1
  203. package/dist/types/src/cms/client/interfaces/components/resources/post/tag/tag-table.d.ts +1 -1
  204. package/dist/types/src/cms/client/interfaces/components/resources/post/tag/tag-table.d.ts.map +1 -1
  205. package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.d.ts +5 -2
  206. package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.d.ts.map +1 -1
  207. package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.d.ts +2 -1
  208. package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.d.ts.map +1 -1
  209. package/dist/types/src/cms/client/interfaces/components/ui/blocks/list-container/list-container.d.ts.map +1 -1
  210. package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.d.ts +3 -1
  211. package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.d.ts.map +1 -1
  212. package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion.d.ts +2 -1
  213. package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion.d.ts.map +1 -1
  214. package/dist/types/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-display.d.ts.map +1 -1
  215. package/dist/types/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-input.d.ts.map +1 -1
  216. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/edit/page.d.ts +1 -1
  217. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/edit/page.d.ts.map +1 -1
  218. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/page.d.ts +3 -1
  219. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/page.d.ts.map +1 -1
  220. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/relations/page.d.ts +3 -1
  221. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/relations/page.d.ts.map +1 -1
  222. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/create/page.d.ts +4 -7
  223. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/create/page.d.ts.map +1 -1
  224. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/page.d.ts +1 -4
  225. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/page.d.ts.map +1 -1
  226. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/edit/page.d.ts.map +1 -1
  227. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/page.d.ts.map +1 -1
  228. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/relations/page.d.ts.map +1 -1
  229. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/create/page.d.ts +4 -7
  230. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/create/page.d.ts.map +1 -1
  231. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/edit/page.d.ts +1 -1
  232. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/edit/page.d.ts.map +1 -1
  233. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/page.d.ts +3 -1
  234. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/page.d.ts.map +1 -1
  235. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/relations/page.d.ts.map +1 -1
  236. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/create/page.d.ts +4 -7
  237. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/create/page.d.ts.map +1 -1
  238. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/page.d.ts +1 -3
  239. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/page.d.ts.map +1 -1
  240. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/page.d.ts.map +1 -1
  241. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/relations/page.d.ts +3 -1
  242. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/relations/page.d.ts.map +1 -1
  243. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/index.d.ts +2 -0
  244. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/index.d.ts.map +1 -0
  245. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.d.ts +18 -0
  246. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.d.ts.map +1 -0
  247. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/access/admin/[id]/relations/page.d.ts +3 -1
  248. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/access/admin/[id]/relations/page.d.ts.map +1 -1
  249. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/file/[id]/relations/page.d.ts +5 -6
  250. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/file/[id]/relations/page.d.ts.map +1 -1
  251. package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/trash/page.d.ts.map +1 -1
  252. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/edit/page.d.ts +7 -9
  253. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/edit/page.d.ts.map +1 -1
  254. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/page.d.ts +7 -9
  255. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/page.d.ts.map +1 -1
  256. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/page.d.ts +3 -3
  257. package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/page.d.ts.map +1 -1
  258. package/dist/types/src/cms/client/interfaces/pages/index.d.ts +1 -2
  259. package/dist/types/src/cms/client/interfaces/pages/index.d.ts.map +1 -1
  260. package/dist/types/src/cms/contracts/resources/page/actions.d.ts +7 -0
  261. package/dist/types/src/cms/contracts/resources/page/actions.d.ts.map +1 -0
  262. package/dist/types/src/cms/contracts/resources/post/actions.d.ts +2 -0
  263. package/dist/types/src/cms/contracts/resources/post/actions.d.ts.map +1 -1
  264. package/dist/types/src/cms/contracts/resources/post/form-data.d.ts +1 -1
  265. package/dist/types/src/cms/contracts/resources/post/form-data.d.ts.map +1 -1
  266. package/dist/types/src/cms/contracts/resources/seo-metadata/form-data.d.ts +2 -2
  267. package/dist/types/src/cms/contracts/resources/seo-metadata/form-data.d.ts.map +1 -1
  268. package/dist/types/src/cms/server/create-cms-server.d.ts +7 -0
  269. package/dist/types/src/cms/server/create-cms-server.d.ts.map +1 -1
  270. package/dist/types/src/cms/server/index.d.ts +1 -1
  271. package/dist/types/src/cms/server/index.d.ts.map +1 -1
  272. package/dist/types/src/cms/server/resources/index.d.ts +1 -0
  273. package/dist/types/src/cms/server/resources/index.d.ts.map +1 -1
  274. package/dist/types/src/cms/server/resources/page/actions.d.ts +8 -0
  275. package/dist/types/src/cms/server/resources/page/actions.d.ts.map +1 -0
  276. package/dist/types/src/cms/server/resources/post/actions.d.ts +2 -0
  277. package/dist/types/src/cms/server/resources/post/actions.d.ts.map +1 -1
  278. package/dist/types/src/cms/server/resources/seo-metadata/actions.d.ts.map +1 -1
  279. package/dist/types/src/config/content-ui.d.ts +14 -0
  280. package/dist/types/src/config/content-ui.d.ts.map +1 -0
  281. package/dist/types/src/config/index.d.ts +2 -0
  282. package/dist/types/src/config/index.d.ts.map +1 -1
  283. package/dist/types/src/config/page.d.ts +4 -0
  284. package/dist/types/src/config/page.d.ts.map +1 -0
  285. package/dist/types/src/config/topics.d.ts +2 -2
  286. package/dist/types/src/config/topics.d.ts.map +1 -1
  287. package/dist/types/src/constants/paths/cms-paths.d.ts +3 -3
  288. package/dist/types/src/core/infrastructure/index.d.ts +1 -0
  289. package/dist/types/src/core/infrastructure/index.d.ts.map +1 -1
  290. package/dist/types/src/core/infrastructure/prisma/file/include.d.ts +121 -0
  291. package/dist/types/src/core/infrastructure/prisma/file/include.d.ts.map +1 -1
  292. package/dist/types/src/core/infrastructure/prisma/file/mappers.d.ts.map +1 -1
  293. package/dist/types/src/core/infrastructure/prisma/helpers/active-file-references.d.ts +1 -1
  294. package/dist/types/src/core/infrastructure/prisma/helpers/active-file-references.d.ts.map +1 -1
  295. package/dist/types/src/core/infrastructure/prisma/index.d.ts +1 -0
  296. package/dist/types/src/core/infrastructure/prisma/index.d.ts.map +1 -1
  297. package/dist/types/src/core/infrastructure/prisma/page/include.d.ts +63 -0
  298. package/dist/types/src/core/infrastructure/prisma/page/include.d.ts.map +1 -0
  299. package/dist/types/src/core/infrastructure/prisma/page/index.d.ts +4 -0
  300. package/dist/types/src/core/infrastructure/prisma/page/index.d.ts.map +1 -0
  301. package/dist/types/src/core/infrastructure/prisma/page/mappers.d.ts +9 -0
  302. package/dist/types/src/core/infrastructure/prisma/page/mappers.d.ts.map +1 -0
  303. package/dist/types/src/core/infrastructure/prisma/page/page-prisma-ports.d.ts +7 -0
  304. package/dist/types/src/core/infrastructure/prisma/page/page-prisma-ports.d.ts.map +1 -0
  305. package/dist/types/src/core/infrastructure/prisma/page/types.d.ts +10 -0
  306. package/dist/types/src/core/infrastructure/prisma/page/types.d.ts.map +1 -0
  307. package/dist/types/src/core/infrastructure/prisma/post/include.d.ts +0 -29
  308. package/dist/types/src/core/infrastructure/prisma/post/include.d.ts.map +1 -1
  309. package/dist/types/src/core/infrastructure/prisma/post/lifecycle.d.ts +66 -0
  310. package/dist/types/src/core/infrastructure/prisma/post/lifecycle.d.ts.map +1 -0
  311. package/dist/types/src/core/infrastructure/prisma/post/mappers.d.ts.map +1 -1
  312. package/dist/types/src/core/infrastructure/prisma/post/post-prisma-ports.d.ts.map +1 -1
  313. package/dist/types/src/core/infrastructure/prisma/post/read-scope.d.ts +271 -0
  314. package/dist/types/src/core/infrastructure/prisma/post/read-scope.d.ts.map +1 -0
  315. package/dist/types/src/core/infrastructure/prisma/seo-metadata/mappers.d.ts +1 -1
  316. package/dist/types/src/core/infrastructure/prisma/seo-metadata/mappers.d.ts.map +1 -1
  317. package/dist/types/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.d.ts +2 -2
  318. package/dist/types/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.d.ts.map +1 -1
  319. package/dist/types/src/core/seeders/page/seeder.d.ts +3 -3
  320. package/dist/types/src/core/seeders/page/seeder.d.ts.map +1 -1
  321. package/dist/types/src/core/seeders/seed.d.ts +2 -3
  322. package/dist/types/src/core/seeders/seed.d.ts.map +1 -1
  323. package/dist/types/src/core/sitero-server/create-sitero-server.d.ts.map +1 -1
  324. package/dist/types/src/core/sitero-server/types.d.ts +2 -0
  325. package/dist/types/src/core/sitero-server/types.d.ts.map +1 -1
  326. package/dist/types/src/shared/list-item.d.ts +1 -0
  327. package/dist/types/src/shared/list-item.d.ts.map +1 -1
  328. package/dist/types/src/web/contracts/index.d.ts +1 -0
  329. package/dist/types/src/web/contracts/index.d.ts.map +1 -1
  330. package/dist/types/src/web/contracts/resources/page/actions.d.ts +5 -0
  331. package/dist/types/src/web/contracts/resources/page/actions.d.ts.map +1 -0
  332. package/dist/types/src/web/contracts/resources/post/actions.d.ts +1 -1
  333. package/dist/types/src/web/contracts/resources/post/actions.d.ts.map +1 -1
  334. package/dist/types/src/web/server/create-web-server.d.ts.map +1 -1
  335. package/dist/types/src/web/server/index.d.ts +1 -1
  336. package/dist/types/src/web/server/index.d.ts.map +1 -1
  337. package/dist/types/src/web/server/resources/index.d.ts +1 -0
  338. package/dist/types/src/web/server/resources/index.d.ts.map +1 -1
  339. package/dist/types/src/web/server/resources/page/actions.d.ts +17 -0
  340. package/dist/types/src/web/server/resources/page/actions.d.ts.map +1 -0
  341. package/dist/types/src/web/server/resources/post/actions.d.ts +1 -6
  342. package/dist/types/src/web/server/resources/post/actions.d.ts.map +1 -1
  343. package/dist/types/src/web/server/seo/metadata/build-metadata.d.ts +5 -2
  344. package/dist/types/src/web/server/seo/metadata/build-metadata.d.ts.map +1 -1
  345. package/dist/types/src/web/server/seo/sitemap/build-entries.d.ts +2 -2
  346. package/dist/types/src/web/server/seo/sitemap/build-entries.d.ts.map +1 -1
  347. package/dist/types/src/web/server/seo/sitemap/get-page-items.d.ts +6 -2
  348. package/dist/types/src/web/server/seo/sitemap/get-page-items.d.ts.map +1 -1
  349. package/dist/types/src/web/server/seo/sitemap/get-post-items.d.ts.map +1 -1
  350. package/dist/types/src/web/server/seo/sitemap/get-subcategory-items.d.ts.map +1 -1
  351. package/dist/types/src/web/server/types.d.ts +6 -2
  352. package/dist/types/src/web/server/types.d.ts.map +1 -1
  353. package/package.json +3 -3
  354. package/dist/src/cms/client/interfaces/components/resources/post/topic/topic-card.js +0 -81
  355. package/dist/src/cms/client/interfaces/components/resources/post/topic/topic-table.js +0 -120
  356. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/_id_/edit/page.js +0 -110
  357. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/_id_/page.js +0 -161
  358. package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.js +0 -103
  359. package/dist/src/cms/client/interfaces/pages/page.js +0 -17
  360. package/dist/src/core/seeders/topic/seeder.js +0 -47
  361. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/index.d.ts +0 -3
  362. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/index.d.ts.map +0 -1
  363. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-card.d.ts +0 -5
  364. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-card.d.ts.map +0 -1
  365. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-table.d.ts +0 -3
  366. package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-table.d.ts.map +0 -1
  367. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/edit/page.d.ts +0 -20
  368. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/edit/page.d.ts.map +0 -1
  369. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/page.d.ts +0 -20
  370. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/page.d.ts.map +0 -1
  371. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/index.d.ts +0 -4
  372. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/index.d.ts.map +0 -1
  373. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.d.ts +0 -14
  374. package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.d.ts.map +0 -1
  375. package/dist/types/src/cms/client/interfaces/pages/page.d.ts +0 -2
  376. package/dist/types/src/cms/client/interfaces/pages/page.d.ts.map +0 -1
  377. package/dist/types/src/core/seeders/topic/seeder.d.ts +0 -10
  378. package/dist/types/src/core/seeders/topic/seeder.d.ts.map +0 -1
@@ -1,4 +1,15 @@
1
1
  const FILE_USAGE_INCLUDE = {
2
+ pagesAsCoverMedia: true,
3
+ pagesAsSection1CoverMedia: true,
4
+ pagesAsSection2CoverMedia: true,
5
+ pagesAsSection3CoverMedia: true,
6
+ pagesAsSection4CoverMedia: true,
7
+ pagesAsSection5CoverMedia: true,
8
+ pagesAsSection6CoverMedia: true,
9
+ pagesAsSection7CoverMedia: true,
10
+ pagesAsSection8CoverMedia: true,
11
+ pagesAsSection9CoverMedia: true,
12
+ pagesAsSection10CoverMedia: true,
2
13
  adminAsAvatarImage: true,
3
14
  postsAsCoverImage: true,
4
15
  postsAsContentImage: true,
@@ -16,6 +27,17 @@ const FILE_USAGE_INCLUDE = {
16
27
  configsAsFile4: true
17
28
  };
18
29
  const FILE_USAGE_COUNT_SELECT = {
30
+ pagesAsCoverMedia: true,
31
+ pagesAsSection1CoverMedia: true,
32
+ pagesAsSection2CoverMedia: true,
33
+ pagesAsSection3CoverMedia: true,
34
+ pagesAsSection4CoverMedia: true,
35
+ pagesAsSection5CoverMedia: true,
36
+ pagesAsSection6CoverMedia: true,
37
+ pagesAsSection7CoverMedia: true,
38
+ pagesAsSection8CoverMedia: true,
39
+ pagesAsSection9CoverMedia: true,
40
+ pagesAsSection10CoverMedia: true,
19
41
  adminAsAvatarImage: true,
20
42
  postsAsCoverImage: true,
21
43
  postsAsContentImage: true,
@@ -33,6 +55,17 @@ const FILE_USAGE_COUNT_SELECT = {
33
55
  configsAsFile4: true
34
56
  };
35
57
  const FILE_NOT_IN_USE_WHERE = {
58
+ pagesAsCoverMedia: { none: {} },
59
+ pagesAsSection1CoverMedia: { none: {} },
60
+ pagesAsSection2CoverMedia: { none: {} },
61
+ pagesAsSection3CoverMedia: { none: {} },
62
+ pagesAsSection4CoverMedia: { none: {} },
63
+ pagesAsSection5CoverMedia: { none: {} },
64
+ pagesAsSection6CoverMedia: { none: {} },
65
+ pagesAsSection7CoverMedia: { none: {} },
66
+ pagesAsSection8CoverMedia: { none: {} },
67
+ pagesAsSection9CoverMedia: { none: {} },
68
+ pagesAsSection10CoverMedia: { none: {} },
36
69
  adminAsAvatarImage: { none: {} },
37
70
  postsAsCoverImage: { none: {} },
38
71
  postsAsContentImage: { none: {} },
@@ -54,6 +87,17 @@ const FILE_DETAIL_INCLUDE = {
54
87
  translations: true
55
88
  };
56
89
  const FILE_RELATIONS_INCLUDE = {
90
+ pagesAsCoverMedia: { select: { key: true } },
91
+ pagesAsSection1CoverMedia: { select: { key: true } },
92
+ pagesAsSection2CoverMedia: { select: { key: true } },
93
+ pagesAsSection3CoverMedia: { select: { key: true } },
94
+ pagesAsSection4CoverMedia: { select: { key: true } },
95
+ pagesAsSection5CoverMedia: { select: { key: true } },
96
+ pagesAsSection6CoverMedia: { select: { key: true } },
97
+ pagesAsSection7CoverMedia: { select: { key: true } },
98
+ pagesAsSection8CoverMedia: { select: { key: true } },
99
+ pagesAsSection9CoverMedia: { select: { key: true } },
100
+ pagesAsSection10CoverMedia: { select: { key: true } },
57
101
  adminAsAvatarImage: { select: { id: true } },
58
102
  postsAsCoverImage: { select: { id: true } },
59
103
  postsAsContentImage: { select: { id: true } },
@@ -9,6 +9,7 @@ import 'clsx';
9
9
  import 'tailwind-merge';
10
10
  import { adminToSafe } from '../admin/base-mappers.js';
11
11
  import { configToDomain } from '../config/mappers.js';
12
+ import { pageToDomain } from '../page/mappers.js';
12
13
  import { postToDomain } from '../post/base-mappers.js';
13
14
  import { fileToDomain } from './base-mappers.js';
14
15
 
@@ -26,9 +27,39 @@ function toFileContentData(input) {
26
27
  };
27
28
  }
28
29
  function fileDetailToDomain(file) {
30
+ const {
31
+ pagesAsCoverMedia,
32
+ pagesAsSection1CoverMedia,
33
+ pagesAsSection2CoverMedia,
34
+ pagesAsSection3CoverMedia,
35
+ pagesAsSection4CoverMedia,
36
+ pagesAsSection5CoverMedia,
37
+ pagesAsSection6CoverMedia,
38
+ pagesAsSection7CoverMedia,
39
+ pagesAsSection8CoverMedia,
40
+ pagesAsSection9CoverMedia,
41
+ pagesAsSection10CoverMedia,
42
+ ...base
43
+ } = file;
44
+ const pageReferences = [
45
+ ...pagesAsCoverMedia,
46
+ ...pagesAsSection1CoverMedia,
47
+ ...pagesAsSection2CoverMedia,
48
+ ...pagesAsSection3CoverMedia,
49
+ ...pagesAsSection4CoverMedia,
50
+ ...pagesAsSection5CoverMedia,
51
+ ...pagesAsSection6CoverMedia,
52
+ ...pagesAsSection7CoverMedia,
53
+ ...pagesAsSection8CoverMedia,
54
+ ...pagesAsSection9CoverMedia,
55
+ ...pagesAsSection10CoverMedia
56
+ ];
29
57
  return {
30
- ...fileToDomain(file),
31
- isInUse: file.adminAsAvatarImage.length > 0 || file.postsAsCoverImage.length > 0 || file.postsAsContentImage.length > 0 || file.postsAsFiles1.length > 0 || file.postsAsFiles2.length > 0 || file.postsAsFile1.length > 0 || file.postsAsFile2.length > 0 || file.postsAsFile3.length > 0 || file.postsAsFile4.length > 0 || file.configsAsFiles1.length > 0 || file.configsAsFiles2.length > 0 || file.configsAsFile1.length > 0 || file.configsAsFile2.length > 0 || file.configsAsFile3.length > 0 || file.configsAsFile4.length > 0,
58
+ ...fileToDomain(base),
59
+ isInUse: pageReferences.length > 0 || file.adminAsAvatarImage.length > 0 || file.postsAsCoverImage.length > 0 || file.postsAsContentImage.length > 0 || file.postsAsFiles1.length > 0 || file.postsAsFiles2.length > 0 || file.postsAsFile1.length > 0 || file.postsAsFile2.length > 0 || file.postsAsFile3.length > 0 || file.postsAsFile4.length > 0 || file.configsAsFiles1.length > 0 || file.configsAsFiles2.length > 0 || file.configsAsFile1.length > 0 || file.configsAsFile2.length > 0 || file.configsAsFile3.length > 0 || file.configsAsFile4.length > 0,
60
+ pages: [
61
+ ...new Map(pageReferences.map((page) => [page.id, page])).values()
62
+ ].map(pageToDomain),
32
63
  translations: file.translations,
33
64
  adminAsAvatarImage: file.adminAsAvatarImage.map(adminToSafe),
34
65
  postsAsCoverImage: file.postsAsCoverImage.map(postToDomain),
@@ -75,7 +106,24 @@ function fileRelationsToDomain(file) {
75
106
  return {
76
107
  adminIds: file.adminAsAvatarImage.map((admin) => admin.id),
77
108
  postIds: [...postIds],
78
- configSlugs: [...configSlugs]
109
+ configSlugs: [...configSlugs],
110
+ pageKeys: [
111
+ ...new Set(
112
+ [
113
+ ...file.pagesAsCoverMedia,
114
+ ...file.pagesAsSection1CoverMedia,
115
+ ...file.pagesAsSection2CoverMedia,
116
+ ...file.pagesAsSection3CoverMedia,
117
+ ...file.pagesAsSection4CoverMedia,
118
+ ...file.pagesAsSection5CoverMedia,
119
+ ...file.pagesAsSection6CoverMedia,
120
+ ...file.pagesAsSection7CoverMedia,
121
+ ...file.pagesAsSection8CoverMedia,
122
+ ...file.pagesAsSection9CoverMedia,
123
+ ...file.pagesAsSection10CoverMedia
124
+ ].map((page) => page.key)
125
+ )
126
+ ]
79
127
  };
80
128
  }
81
129
 
@@ -1,7 +1,8 @@
1
1
  import { FileNotFoundError } from 'sitero-server';
2
2
 
3
- async function withActiveFileReferences(prisma, items, write) {
3
+ async function withActiveFileReferences(prisma, items, write, beforeLock) {
4
4
  return prisma.$transaction(async (transaction) => {
5
+ await beforeLock?.(transaction);
5
6
  const ids = [
6
7
  ...new Set(items.flatMap((item) => item ? [item.id] : []))
7
8
  ].sort();
@@ -0,0 +1,20 @@
1
+ const PAGE_REFERENCE_INCLUDE = {
2
+ translations: true
3
+ };
4
+ const PAGE_DETAIL_INCLUDE = {
5
+ ...PAGE_REFERENCE_INCLUDE,
6
+ seoMetadatas: true,
7
+ coverMedia: { include: { translations: true } },
8
+ section1CoverMedia: { include: { translations: true } },
9
+ section2CoverMedia: { include: { translations: true } },
10
+ section3CoverMedia: { include: { translations: true } },
11
+ section4CoverMedia: { include: { translations: true } },
12
+ section5CoverMedia: { include: { translations: true } },
13
+ section6CoverMedia: { include: { translations: true } },
14
+ section7CoverMedia: { include: { translations: true } },
15
+ section8CoverMedia: { include: { translations: true } },
16
+ section9CoverMedia: { include: { translations: true } },
17
+ section10CoverMedia: { include: { translations: true } }
18
+ };
19
+
20
+ export { PAGE_DETAIL_INCLUDE, PAGE_REFERENCE_INCLUDE };
@@ -0,0 +1,44 @@
1
+ import { fileToCard } from '../file/base-mappers.js';
2
+ import { seoMetadataToDomain } from '../seo-metadata/mappers.js';
3
+
4
+ function pageToDomain(page) {
5
+ return {
6
+ id: page.id,
7
+ key: page.key,
8
+ createdAt: page.createdAt,
9
+ updatedAt: page.updatedAt,
10
+ coverMediaId: page.coverMediaId,
11
+ section1CoverMediaId: page.section1CoverMediaId,
12
+ section2CoverMediaId: page.section2CoverMediaId,
13
+ section3CoverMediaId: page.section3CoverMediaId,
14
+ section4CoverMediaId: page.section4CoverMediaId,
15
+ section5CoverMediaId: page.section5CoverMediaId,
16
+ section6CoverMediaId: page.section6CoverMediaId,
17
+ section7CoverMediaId: page.section7CoverMediaId,
18
+ section8CoverMediaId: page.section8CoverMediaId,
19
+ section9CoverMediaId: page.section9CoverMediaId,
20
+ section10CoverMediaId: page.section10CoverMediaId
21
+ };
22
+ }
23
+ function pageReferenceToDomain(page) {
24
+ return { ...pageToDomain(page), translations: page.translations };
25
+ }
26
+ function pageDetailToDomain(page) {
27
+ return {
28
+ ...pageReferenceToDomain(page),
29
+ seoMetadatas: page.seoMetadatas.map(seoMetadataToDomain),
30
+ coverMedia: page.coverMedia ? fileToCard(page.coverMedia) : null,
31
+ section1CoverMedia: page.section1CoverMedia ? fileToCard(page.section1CoverMedia) : null,
32
+ section2CoverMedia: page.section2CoverMedia ? fileToCard(page.section2CoverMedia) : null,
33
+ section3CoverMedia: page.section3CoverMedia ? fileToCard(page.section3CoverMedia) : null,
34
+ section4CoverMedia: page.section4CoverMedia ? fileToCard(page.section4CoverMedia) : null,
35
+ section5CoverMedia: page.section5CoverMedia ? fileToCard(page.section5CoverMedia) : null,
36
+ section6CoverMedia: page.section6CoverMedia ? fileToCard(page.section6CoverMedia) : null,
37
+ section7CoverMedia: page.section7CoverMedia ? fileToCard(page.section7CoverMedia) : null,
38
+ section8CoverMedia: page.section8CoverMedia ? fileToCard(page.section8CoverMedia) : null,
39
+ section9CoverMedia: page.section9CoverMedia ? fileToCard(page.section9CoverMedia) : null,
40
+ section10CoverMedia: page.section10CoverMedia ? fileToCard(page.section10CoverMedia) : null
41
+ };
42
+ }
43
+
44
+ export { pageDetailToDomain, pageReferenceToDomain, pageToDomain };
@@ -0,0 +1,91 @@
1
+ import { PAGE_MEDIA_FIELDS, PAGE_TEXT_FIELDS } from 'sitero-domain';
2
+ import { PageMediaTypeInvalidError } from 'sitero-server';
3
+ import { withActiveFileReferences } from '../helpers/active-file-references.js';
4
+ import { PAGE_REFERENCE_INCLUDE, PAGE_DETAIL_INCLUDE } from './include.js';
5
+ import { pageReferenceToDomain, pageDetailToDomain, pageToDomain } from './mappers.js';
6
+
7
+ function createPagePrismaPorts(prisma) {
8
+ return {
9
+ pageQueryPort: {
10
+ async findDetail(input) {
11
+ const page = await prisma.page.findUnique({
12
+ where: input.id !== void 0 ? { id: input.id } : { key: input.key },
13
+ include: PAGE_DETAIL_INCLUDE
14
+ });
15
+ return page ? pageDetailToDomain(page) : null;
16
+ },
17
+ async findMany(input) {
18
+ if (input?.keys?.length === 0) return [];
19
+ const pages = await prisma.page.findMany({
20
+ ...input?.keys ? { where: { key: { in: input.keys } } } : {},
21
+ include: PAGE_REFERENCE_INCLUDE,
22
+ orderBy: { key: "asc" }
23
+ });
24
+ return pages.map(pageReferenceToDomain);
25
+ }
26
+ },
27
+ pageCommandPort: {
28
+ async update({ id, page }) {
29
+ const mediaIds = [
30
+ ...new Set(
31
+ PAGE_MEDIA_FIELDS.flatMap((field) => {
32
+ const id2 = page[`${field}Id`];
33
+ return id2 ? [id2] : [];
34
+ })
35
+ )
36
+ ].sort();
37
+ return withActiveFileReferences(
38
+ prisma,
39
+ mediaIds.map((id2) => ({ id: id2 })),
40
+ async (transaction) => {
41
+ for (const id2 of mediaIds) {
42
+ const file = await transaction.file.findUnique({
43
+ where: { id: id2 },
44
+ select: { type: true }
45
+ });
46
+ if (!file || file.type !== "IMAGE" && file.type !== "VIDEO")
47
+ throw new PageMediaTypeInvalidError();
48
+ }
49
+ const media = {};
50
+ for (const field of PAGE_MEDIA_FIELDS) {
51
+ const key = `${field}Id`;
52
+ const value = page[key];
53
+ if (value !== void 0) media[key] = value;
54
+ }
55
+ const updated = await transaction.page.update({
56
+ where: { id },
57
+ data: {
58
+ ...media,
59
+ updatedAt: /* @__PURE__ */ new Date(),
60
+ translations: {
61
+ upsert: page.translations.map((translation) => {
62
+ const update = {};
63
+ const create = { locale: translation.locale };
64
+ for (const key of PAGE_TEXT_FIELDS) {
65
+ const value = translation[key];
66
+ create[key] = value ?? null;
67
+ if (value !== void 0) update[key] = value;
68
+ }
69
+ return {
70
+ where: {
71
+ pageId_locale: {
72
+ pageId: id,
73
+ locale: translation.locale
74
+ }
75
+ },
76
+ update,
77
+ create
78
+ };
79
+ })
80
+ }
81
+ }
82
+ });
83
+ return pageToDomain(updated);
84
+ }
85
+ );
86
+ }
87
+ }
88
+ };
89
+ }
90
+
91
+ export { createPagePrismaPorts };
@@ -7,7 +7,6 @@ const POST_REFERENCE_WITH_COVER_INCLUDE = {
7
7
  };
8
8
  const POST_LIST_CARD_INCLUDE = {
9
9
  ...POST_REFERENCE_WITH_COVER_INCLUDE,
10
- topic: { include: POST_REFERENCE_INCLUDE },
11
10
  parents: { include: POST_REFERENCE_WITH_COVER_INCLUDE }
12
11
  };
13
12
  const POST_DETAIL_INCLUDE = {
@@ -18,7 +17,6 @@ const POST_DETAIL_INCLUDE = {
18
17
  avatarImage: { include: { translations: true } }
19
18
  }
20
19
  },
21
- postsInTopic: { include: POST_REFERENCE_INCLUDE },
22
20
  children: { include: POST_REFERENCE_INCLUDE },
23
21
  tags: { include: POST_REFERENCE_INCLUDE },
24
22
  taggedPosts: { include: POST_REFERENCE_INCLUDE },
@@ -34,10 +32,9 @@ const POST_DETAIL_INCLUDE = {
34
32
  seoMetadatas: true
35
33
  };
36
34
  const POST_RELATIONS_INCLUDE = {
37
- children: { where: { deletedAt: null }, select: { id: true, type: true } },
38
- taggedPosts: { where: { deletedAt: null }, select: { id: true, type: true } },
35
+ children: { select: { id: true, type: true } },
36
+ taggedPosts: { select: { id: true, type: true } },
39
37
  referencingPosts: {
40
- where: { deletedAt: null },
41
38
  select: { id: true, type: true }
42
39
  }
43
40
  };
@@ -0,0 +1,108 @@
1
+ import { POST_ERROR_CODES, OperationError } from 'sitero-server';
2
+
3
+ async function lockPostWrites(tx) {
4
+ await tx.$queryRaw`SELECT pg_advisory_xact_lock(1936286821, 1)::text`;
5
+ }
6
+ function fail(code, ids = []) {
7
+ throw new OperationError({ code, details: { postIds: ids } });
8
+ }
9
+ async function requirePost(tx, id, deleted = false) {
10
+ const post = await tx.post.findUnique({ where: { id } });
11
+ if (!post) fail(POST_ERROR_CODES.NOT_FOUND);
12
+ if (!!post.deletedAt !== deleted) fail(POST_ERROR_CODES.INVALID_STATE);
13
+ return post;
14
+ }
15
+ async function assertNoPostReferences(tx, id) {
16
+ const references = await tx.post.findMany({
17
+ where: {
18
+ id: { not: id },
19
+ OR: [
20
+ { parents: { some: { id } } },
21
+ { tags: { some: { id } } },
22
+ { relatedPosts: { some: { id } } }
23
+ ]
24
+ },
25
+ select: { id: true }
26
+ });
27
+ if (references.length)
28
+ fail(
29
+ POST_ERROR_CODES.IN_USE,
30
+ references.map(({ id: id2 }) => id2)
31
+ );
32
+ }
33
+ async function assertPublishedAncestors(tx, ids) {
34
+ const visited = /* @__PURE__ */ new Set();
35
+ let pending = ids;
36
+ while (pending.length) {
37
+ const batch = [...new Set(pending)].filter((id) => !visited.has(id));
38
+ if (!batch.length) break;
39
+ batch.forEach((id) => visited.add(id));
40
+ const parents = await tx.post.findMany({
41
+ where: { id: { in: batch } },
42
+ include: { parents: { select: { id: true } } }
43
+ });
44
+ const unavailable = batch.filter(
45
+ (id) => !parents.some((p) => p.id === id && p.isActive && !p.deletedAt)
46
+ );
47
+ if (unavailable.length)
48
+ fail(POST_ERROR_CODES.PARENT_UNPUBLISHED, unavailable);
49
+ pending = parents.flatMap((p) => p.parents.map(({ id }) => id));
50
+ }
51
+ }
52
+ async function assertNoPublishedDescendants(tx, id) {
53
+ const visited = /* @__PURE__ */ new Set([id]);
54
+ let pending = [id];
55
+ while (pending.length) {
56
+ const children = await tx.post.findMany({
57
+ where: { parents: { some: { id: { in: pending } } } },
58
+ select: { id: true, isActive: true, deletedAt: true }
59
+ });
60
+ const published = children.filter(
61
+ (child) => child.isActive && !child.deletedAt
62
+ );
63
+ if (published.length)
64
+ fail(
65
+ POST_ERROR_CODES.HAS_PUBLISHED_CHILDREN,
66
+ published.map(({ id: id2 }) => id2)
67
+ );
68
+ pending = children.map(({ id: id2 }) => id2).filter((id2) => !visited.has(id2));
69
+ pending.forEach((id2) => visited.add(id2));
70
+ }
71
+ }
72
+ async function assertPostWrite(tx, input, id, previous) {
73
+ const type = previous?.type ?? input.type;
74
+ const topicKey = previous ? previous.topicKey : input.topicKey;
75
+ const slug = input.slug?.trim() || id;
76
+ const conflict = await tx.post.findFirst({
77
+ where: { type, topicKey, slug, id: { not: id } },
78
+ select: { id: true }
79
+ });
80
+ if (conflict) fail(POST_ERROR_CODES.SLUG_CONFLICT, [conflict.id]);
81
+ const ids = [
82
+ ...new Set(
83
+ [...input.parents, ...input.tags, ...input.relatedPosts].map(
84
+ ({ id: id2 }) => id2
85
+ )
86
+ )
87
+ ];
88
+ if (ids.length) {
89
+ const records = await tx.post.findMany({
90
+ where: { id: { in: ids }, deletedAt: null },
91
+ select: { id: true }
92
+ });
93
+ const unavailable = ids.filter(
94
+ (id2) => !records.some((record) => record.id === id2)
95
+ );
96
+ if (unavailable.length)
97
+ fail(POST_ERROR_CODES.REFERENCE_UNAVAILABLE, unavailable);
98
+ }
99
+ if (input.isActive)
100
+ await assertPublishedAncestors(
101
+ tx,
102
+ input.parents.map(({ id: id2 }) => id2)
103
+ );
104
+ if (!input.isActive && (type === "CATEGORY" || type === "SUBCATEGORY"))
105
+ await assertNoPublishedDescendants(tx, id);
106
+ }
107
+
108
+ export { assertNoPostReferences, assertPostWrite, lockPostWrites, requirePost };
@@ -27,7 +27,6 @@ function postReferenceWithCoverToDomain(post) {
27
27
  function postListCardToDomain(post) {
28
28
  return {
29
29
  ...postReferenceWithCoverToDomain(post),
30
- topic: post.topic ? postReferenceToDomain(post.topic) : null,
31
30
  parents: post.parents.map(postReferenceWithCoverToDomain)
32
31
  };
33
32
  }
@@ -36,7 +35,6 @@ function postDetailToDomain(post) {
36
35
  return {
37
36
  ...postListCardToDomain(post),
38
37
  author,
39
- postsInTopic: post.postsInTopic.map(postReferenceToDomain),
40
38
  children: post.children.map(postReferenceToDomain),
41
39
  tags: post.tags.map(postReferenceToDomain),
42
40
  taggedPosts: post.taggedPosts.map(postReferenceToDomain),