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.
- package/dist/export/cms/client/components/index.js +6 -2
- package/dist/export/cms/client/index.js +2 -0
- package/dist/export/cms/client/pages/index.js +1 -4
- package/dist/export/cms/server/index.js +1 -0
- package/dist/export/core/server/index.js +2 -0
- package/dist/export/index.js +1 -0
- package/dist/export/web/server/index.js +1 -0
- package/dist/prisma/generated/internal/class.js +4 -4
- package/dist/src/cms/client/applications/create-applications.js +5 -0
- package/dist/src/cms/client/applications/resources/page/form-data.js +56 -0
- package/dist/src/cms/client/applications/resources/page/use-page-update-form-data.js +30 -0
- package/dist/src/cms/client/applications/resources/post/use-create-form-data.js +5 -5
- package/dist/src/cms/client/applications/resources/post/use-update-form-data.js +1 -1
- package/dist/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.js +35 -0
- package/dist/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.js +15 -31
- package/dist/src/cms/client/applications/ui/use-nav-items.js +28 -39
- package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.js +5 -4
- package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.js +7 -0
- package/dist/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.js +32 -1
- package/dist/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.js +8 -1
- package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.js +6 -5
- package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.js +7 -0
- package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.js +18 -1
- package/dist/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.js +12 -7
- package/dist/src/cms/client/infrastructure/operation-result/presentation/message.js +15 -0
- package/dist/src/cms/client/interfaces/components/create-components.js +7 -8
- package/dist/src/cms/client/interfaces/components/create-page-contents.js +28 -0
- package/dist/src/cms/client/interfaces/components/resources/page/content/field-groups.js +16 -0
- package/dist/src/cms/client/interfaces/components/resources/page/content/page-edit-content.js +216 -0
- package/dist/src/cms/client/interfaces/components/resources/page/content/page-show-content.js +114 -0
- package/dist/src/cms/client/interfaces/components/resources/page/content/types.js +12 -0
- package/dist/src/cms/client/interfaces/components/resources/post/category/category-card.js +17 -5
- package/dist/src/cms/client/interfaces/components/resources/post/category/category-table.js +16 -5
- package/dist/src/cms/client/interfaces/components/resources/post/content/post-create-content.js +13 -8
- package/dist/src/cms/client/interfaces/components/resources/post/content/post-edit-content.js +11 -7
- package/dist/src/cms/client/interfaces/components/resources/post/content/post-show-content.js +7 -2
- package/dist/src/cms/client/interfaces/components/resources/post/post-card.js +17 -5
- package/dist/src/cms/client/interfaces/components/resources/post/post-list.js +49 -10
- package/dist/src/cms/client/interfaces/components/resources/post/post-state-icons.js +37 -6
- package/dist/src/cms/client/interfaces/components/resources/post/post-table.js +18 -5
- package/dist/src/cms/client/interfaces/components/resources/post/search/control-fields-filters.js +5 -1
- package/dist/src/cms/client/interfaces/components/resources/post/tag/tag-card.js +12 -2
- package/dist/src/cms/client/interfaces/components/resources/post/tag/tag-table.js +10 -1
- package/dist/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.js +90 -67
- package/dist/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.js +11 -1
- package/dist/src/cms/client/interfaces/components/ui/blocks/list-container/list-container.js +1 -1
- package/dist/src/cms/client/interfaces/components/ui/blocks/list-container/pagination.js +9 -9
- package/dist/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.js +15 -3
- package/dist/src/cms/client/interfaces/components/ui/features/accordion/accordion.js +5 -7
- package/dist/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-display.js +1 -1
- package/dist/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-input.js +1 -1
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/edit/page.js +11 -11
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/page.js +12 -16
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/_id_/relations/page.js +6 -2
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/category/create/page.js +15 -16
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/page.js +18 -41
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/edit/page.js +10 -11
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/page.js +11 -16
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/_id_/relations/page.js +1 -0
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/post/create/page.js +14 -16
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/edit/page.js +11 -11
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/page.js +12 -16
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/_id_/relations/page.js +1 -0
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/_topicSlug_/subcategory/create/page.js +15 -16
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/page.js +18 -32
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/edit/page.js +2 -2
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/page.js +9 -9
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/_id_/relations/page.js +6 -2
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/create/page.js +2 -2
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.js +204 -0
- package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/admin-refresh-token/page.js +1 -0
- package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/page.js +1 -0
- package/dist/src/cms/client/interfaces/pages/dashboard/system/access/admin/_id_/relations/page.js +8 -3
- package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/_id_/page.js +3 -2
- package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/_id_/relations/page.js +41 -30
- package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/delete-many/page.js +3 -3
- package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/file/page.js +1 -1
- package/dist/src/cms/client/interfaces/pages/dashboard/system/storage/trash/page.js +3 -2
- package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/_slug_/edit/page.js +19 -11
- package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/_slug_/page.js +23 -10
- package/dist/src/cms/client/interfaces/pages/dashboard/website/website-page/page.js +7 -7
- package/dist/src/cms/server/create-cms-server.js +2 -0
- package/dist/src/cms/server/resources/page/actions.js +31 -0
- package/dist/src/cms/server/resources/post/actions.js +27 -6
- package/dist/src/cms/server/resources/seo-metadata/actions.js +7 -16
- package/dist/src/config/content-ui.js +24 -0
- package/dist/src/config/topics.js +1 -1
- package/dist/src/constants/paths/cms-paths.js +2 -2
- package/dist/src/core/infrastructure/prisma/file/include.js +44 -0
- package/dist/src/core/infrastructure/prisma/file/mappers.js +51 -3
- package/dist/src/core/infrastructure/prisma/helpers/active-file-references.js +2 -1
- package/dist/src/core/infrastructure/prisma/page/include.js +20 -0
- package/dist/src/core/infrastructure/prisma/page/mappers.js +44 -0
- package/dist/src/core/infrastructure/prisma/page/page-prisma-ports.js +91 -0
- package/dist/src/core/infrastructure/prisma/post/include.js +2 -5
- package/dist/src/core/infrastructure/prisma/post/lifecycle.js +108 -0
- package/dist/src/core/infrastructure/prisma/post/mappers.js +0 -2
- package/dist/src/core/infrastructure/prisma/post/post-prisma-ports.js +76 -24
- package/dist/src/core/infrastructure/prisma/post/read-scope.js +45 -0
- package/dist/src/core/infrastructure/prisma/seo-metadata/mappers.js +6 -1
- package/dist/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.js +32 -11
- package/dist/src/core/seeders/page/seeder.js +9 -29
- package/dist/src/core/seeders/seed.js +0 -3
- package/dist/src/core/sitero-server/create-sitero-server.js +10 -0
- package/dist/src/web/server/create-web-server.js +5 -1
- package/dist/src/web/server/resources/page/actions.js +20 -0
- package/dist/src/web/server/resources/post/actions.js +3 -13
- package/dist/src/web/server/seo/sitemap/get-page-items.js +7 -6
- package/dist/src/web/server/seo/sitemap/get-post-items.js +2 -2
- package/dist/src/web/server/seo/sitemap/get-subcategory-items.js +1 -1
- package/dist/types/export/cms/client/components/index.d.ts +3 -0
- package/dist/types/export/cms/client/components/index.d.ts.map +1 -1
- package/dist/types/export/cms/client/index.d.ts +2 -0
- package/dist/types/export/cms/client/index.d.ts.map +1 -1
- package/dist/types/export/cms/client/pages/index.d.ts +3 -2
- package/dist/types/export/cms/client/pages/index.d.ts.map +1 -1
- package/dist/types/export/cms/server/index.d.ts +2 -1
- package/dist/types/export/cms/server/index.d.ts.map +1 -1
- package/dist/types/export/index.d.ts +1 -1
- package/dist/types/export/index.d.ts.map +1 -1
- package/dist/types/export/web/server/index.d.ts +2 -1
- package/dist/types/export/web/server/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/applications/create-applications.d.ts.map +1 -1
- package/dist/types/src/cms/client/applications/index.d.ts +1 -0
- package/dist/types/src/cms/client/applications/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/applications/resources/index.d.ts +1 -0
- package/dist/types/src/cms/client/applications/resources/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/applications/resources/page/form-data.d.ts +21 -0
- package/dist/types/src/cms/client/applications/resources/page/form-data.d.ts.map +1 -0
- package/dist/types/src/cms/client/applications/resources/page/index.d.ts +3 -0
- package/dist/types/src/cms/client/applications/resources/page/index.d.ts.map +1 -0
- package/dist/types/src/cms/client/applications/resources/page/use-page-update-form-data.d.ts +12 -0
- package/dist/types/src/cms/client/applications/resources/page/use-page-update-form-data.d.ts.map +1 -0
- package/dist/types/src/cms/client/applications/resources/post/use-create-form-data.d.ts +3 -5
- package/dist/types/src/cms/client/applications/resources/post/use-create-form-data.d.ts.map +1 -1
- package/dist/types/src/cms/client/applications/resources/post/use-update-form-data.d.ts.map +1 -1
- package/dist/types/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.d.ts +6 -0
- package/dist/types/src/cms/client/applications/resources/seo-metadata/build-seo-metadata-translations.d.ts.map +1 -0
- package/dist/types/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.d.ts +5 -4
- package/dist/types/src/cms/client/applications/resources/seo-metadata/use-upsert-form-data.d.ts.map +1 -1
- package/dist/types/src/cms/client/applications/types.d.ts +2 -1
- package/dist/types/src/cms/client/applications/types.d.ts.map +1 -1
- package/dist/types/src/cms/client/applications/ui/use-nav-items.d.ts +3 -4
- package/dist/types/src/cms/client/applications/ui/use-nav-items.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/index.d.ts +86 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.d.ts +3 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/file.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.d.ts +71 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.d.ts +51 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/resources/post.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.d.ts +15 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/en-US/ui/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/index.d.ts +172 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/index.d.ts +86 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.d.ts +3 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/file.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.d.ts +71 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.d.ts +51 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/resources/post.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.d.ts +15 -0
- package/dist/types/src/cms/client/infrastructure/i18n/messages/zh-TW/ui/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/infrastructure/operation-result/presentation/message.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/create-components.d.ts +6 -3
- package/dist/types/src/cms/client/interfaces/components/create-components.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/create-page-contents.d.ts +30 -0
- package/dist/types/src/cms/client/interfaces/components/create-page-contents.d.ts.map +1 -0
- package/dist/types/src/cms/client/interfaces/components/resources/index.d.ts +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/index.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/page/content/field-groups.d.ts +3 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/content/field-groups.d.ts.map +1 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-edit-content.d.ts +14 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-edit-content.d.ts.map +1 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-show-content.d.ts +7 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/content/page-show-content.d.ts.map +1 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/content/types.d.ts +27 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/content/types.d.ts.map +1 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/index.d.ts +4 -0
- package/dist/types/src/cms/client/interfaces/components/resources/page/index.d.ts.map +1 -0
- package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-card.d.ts +5 -2
- package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-card.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-table.d.ts +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/category/category-table.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-create-content.d.ts +3 -5
- package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-create-content.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-edit-content.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/content/post-show-content.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/post-card.d.ts +6 -3
- package/dist/types/src/cms/client/interfaces/components/resources/post/post-card.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/post-list.d.ts +6 -3
- package/dist/types/src/cms/client/interfaces/components/resources/post/post-list.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/post-state-icons.d.ts +7 -2
- package/dist/types/src/cms/client/interfaces/components/resources/post/post-state-icons.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/post-table.d.ts +5 -2
- package/dist/types/src/cms/client/interfaces/components/resources/post/post-table.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/search/control-fields-filters.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/tag/tag-card.d.ts +3 -2
- package/dist/types/src/cms/client/interfaces/components/resources/post/tag/tag-card.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/tag/tag-table.d.ts +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/tag/tag-table.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.d.ts +5 -2
- package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-form/seo-form.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.d.ts +2 -1
- package/dist/types/src/cms/client/interfaces/components/resources/seo-metadata/seo-metadata-dialog.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/ui/blocks/list-container/list-container.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.d.ts +3 -1
- package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion-header.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion.d.ts +2 -1
- package/dist/types/src/cms/client/interfaces/components/ui/features/accordion/accordion.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-display.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/components/ui/form/control-fields/control-fields-input.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/edit/page.d.ts +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/edit/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/page.d.ts +3 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/relations/page.d.ts +3 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/[id]/relations/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/create/page.d.ts +4 -7
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/category/create/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/page.d.ts +1 -4
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/edit/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/[id]/relations/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/create/page.d.ts +4 -7
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/post/create/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/edit/page.d.ts +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/edit/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/page.d.ts +3 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/[id]/relations/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/create/page.d.ts +4 -7
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/[topicSlug]/subcategory/create/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/page.d.ts +1 -3
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/relations/page.d.ts +3 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/tag/[id]/relations/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/index.d.ts +2 -0
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/index.d.ts.map +1 -0
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.d.ts +18 -0
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/trash/page.d.ts.map +1 -0
- package/dist/types/src/cms/client/interfaces/pages/dashboard/system/access/admin/[id]/relations/page.d.ts +3 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/system/access/admin/[id]/relations/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/file/[id]/relations/page.d.ts +5 -6
- package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/file/[id]/relations/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/system/storage/trash/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/edit/page.d.ts +7 -9
- package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/edit/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/page.d.ts +7 -9
- package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/[slug]/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/page.d.ts +3 -3
- package/dist/types/src/cms/client/interfaces/pages/dashboard/website/website-page/page.d.ts.map +1 -1
- package/dist/types/src/cms/client/interfaces/pages/index.d.ts +1 -2
- package/dist/types/src/cms/client/interfaces/pages/index.d.ts.map +1 -1
- package/dist/types/src/cms/contracts/resources/page/actions.d.ts +7 -0
- package/dist/types/src/cms/contracts/resources/page/actions.d.ts.map +1 -0
- package/dist/types/src/cms/contracts/resources/post/actions.d.ts +2 -0
- package/dist/types/src/cms/contracts/resources/post/actions.d.ts.map +1 -1
- package/dist/types/src/cms/contracts/resources/post/form-data.d.ts +1 -1
- package/dist/types/src/cms/contracts/resources/post/form-data.d.ts.map +1 -1
- package/dist/types/src/cms/contracts/resources/seo-metadata/form-data.d.ts +2 -2
- package/dist/types/src/cms/contracts/resources/seo-metadata/form-data.d.ts.map +1 -1
- package/dist/types/src/cms/server/create-cms-server.d.ts +7 -0
- package/dist/types/src/cms/server/create-cms-server.d.ts.map +1 -1
- package/dist/types/src/cms/server/index.d.ts +1 -1
- package/dist/types/src/cms/server/index.d.ts.map +1 -1
- package/dist/types/src/cms/server/resources/index.d.ts +1 -0
- package/dist/types/src/cms/server/resources/index.d.ts.map +1 -1
- package/dist/types/src/cms/server/resources/page/actions.d.ts +8 -0
- package/dist/types/src/cms/server/resources/page/actions.d.ts.map +1 -0
- package/dist/types/src/cms/server/resources/post/actions.d.ts +2 -0
- package/dist/types/src/cms/server/resources/post/actions.d.ts.map +1 -1
- package/dist/types/src/cms/server/resources/seo-metadata/actions.d.ts.map +1 -1
- package/dist/types/src/config/content-ui.d.ts +14 -0
- package/dist/types/src/config/content-ui.d.ts.map +1 -0
- package/dist/types/src/config/index.d.ts +2 -0
- package/dist/types/src/config/index.d.ts.map +1 -1
- package/dist/types/src/config/page.d.ts +4 -0
- package/dist/types/src/config/page.d.ts.map +1 -0
- package/dist/types/src/config/topics.d.ts +2 -2
- package/dist/types/src/config/topics.d.ts.map +1 -1
- package/dist/types/src/constants/paths/cms-paths.d.ts +3 -3
- package/dist/types/src/core/infrastructure/index.d.ts +1 -0
- package/dist/types/src/core/infrastructure/index.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/file/include.d.ts +121 -0
- package/dist/types/src/core/infrastructure/prisma/file/include.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/file/mappers.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/helpers/active-file-references.d.ts +1 -1
- package/dist/types/src/core/infrastructure/prisma/helpers/active-file-references.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/index.d.ts +1 -0
- package/dist/types/src/core/infrastructure/prisma/index.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/page/include.d.ts +63 -0
- package/dist/types/src/core/infrastructure/prisma/page/include.d.ts.map +1 -0
- package/dist/types/src/core/infrastructure/prisma/page/index.d.ts +4 -0
- package/dist/types/src/core/infrastructure/prisma/page/index.d.ts.map +1 -0
- package/dist/types/src/core/infrastructure/prisma/page/mappers.d.ts +9 -0
- package/dist/types/src/core/infrastructure/prisma/page/mappers.d.ts.map +1 -0
- package/dist/types/src/core/infrastructure/prisma/page/page-prisma-ports.d.ts +7 -0
- package/dist/types/src/core/infrastructure/prisma/page/page-prisma-ports.d.ts.map +1 -0
- package/dist/types/src/core/infrastructure/prisma/page/types.d.ts +10 -0
- package/dist/types/src/core/infrastructure/prisma/page/types.d.ts.map +1 -0
- package/dist/types/src/core/infrastructure/prisma/post/include.d.ts +0 -29
- package/dist/types/src/core/infrastructure/prisma/post/include.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/post/lifecycle.d.ts +66 -0
- package/dist/types/src/core/infrastructure/prisma/post/lifecycle.d.ts.map +1 -0
- package/dist/types/src/core/infrastructure/prisma/post/mappers.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/post/post-prisma-ports.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/post/read-scope.d.ts +271 -0
- package/dist/types/src/core/infrastructure/prisma/post/read-scope.d.ts.map +1 -0
- package/dist/types/src/core/infrastructure/prisma/seo-metadata/mappers.d.ts +1 -1
- package/dist/types/src/core/infrastructure/prisma/seo-metadata/mappers.d.ts.map +1 -1
- package/dist/types/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.d.ts +2 -2
- package/dist/types/src/core/infrastructure/prisma/seo-metadata/seo-metadata-prisma-ports.d.ts.map +1 -1
- package/dist/types/src/core/seeders/page/seeder.d.ts +3 -3
- package/dist/types/src/core/seeders/page/seeder.d.ts.map +1 -1
- package/dist/types/src/core/seeders/seed.d.ts +2 -3
- package/dist/types/src/core/seeders/seed.d.ts.map +1 -1
- package/dist/types/src/core/sitero-server/create-sitero-server.d.ts.map +1 -1
- package/dist/types/src/core/sitero-server/types.d.ts +2 -0
- package/dist/types/src/core/sitero-server/types.d.ts.map +1 -1
- package/dist/types/src/shared/list-item.d.ts +1 -0
- package/dist/types/src/shared/list-item.d.ts.map +1 -1
- package/dist/types/src/web/contracts/index.d.ts +1 -0
- package/dist/types/src/web/contracts/index.d.ts.map +1 -1
- package/dist/types/src/web/contracts/resources/page/actions.d.ts +5 -0
- package/dist/types/src/web/contracts/resources/page/actions.d.ts.map +1 -0
- package/dist/types/src/web/contracts/resources/post/actions.d.ts +1 -1
- package/dist/types/src/web/contracts/resources/post/actions.d.ts.map +1 -1
- package/dist/types/src/web/server/create-web-server.d.ts.map +1 -1
- package/dist/types/src/web/server/index.d.ts +1 -1
- package/dist/types/src/web/server/index.d.ts.map +1 -1
- package/dist/types/src/web/server/resources/index.d.ts +1 -0
- package/dist/types/src/web/server/resources/index.d.ts.map +1 -1
- package/dist/types/src/web/server/resources/page/actions.d.ts +17 -0
- package/dist/types/src/web/server/resources/page/actions.d.ts.map +1 -0
- package/dist/types/src/web/server/resources/post/actions.d.ts +1 -6
- package/dist/types/src/web/server/resources/post/actions.d.ts.map +1 -1
- package/dist/types/src/web/server/seo/metadata/build-metadata.d.ts +5 -2
- package/dist/types/src/web/server/seo/metadata/build-metadata.d.ts.map +1 -1
- package/dist/types/src/web/server/seo/sitemap/build-entries.d.ts +2 -2
- package/dist/types/src/web/server/seo/sitemap/build-entries.d.ts.map +1 -1
- package/dist/types/src/web/server/seo/sitemap/get-page-items.d.ts +6 -2
- package/dist/types/src/web/server/seo/sitemap/get-page-items.d.ts.map +1 -1
- package/dist/types/src/web/server/seo/sitemap/get-post-items.d.ts.map +1 -1
- package/dist/types/src/web/server/seo/sitemap/get-subcategory-items.d.ts.map +1 -1
- package/dist/types/src/web/server/types.d.ts +6 -2
- package/dist/types/src/web/server/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/src/cms/client/interfaces/components/resources/post/topic/topic-card.js +0 -81
- package/dist/src/cms/client/interfaces/components/resources/post/topic/topic-table.js +0 -120
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/_id_/edit/page.js +0 -110
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/_id_/page.js +0 -161
- package/dist/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.js +0 -103
- package/dist/src/cms/client/interfaces/pages/page.js +0 -17
- package/dist/src/core/seeders/topic/seeder.js +0 -47
- package/dist/types/src/cms/client/interfaces/components/resources/post/topic/index.d.ts +0 -3
- package/dist/types/src/cms/client/interfaces/components/resources/post/topic/index.d.ts.map +0 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-card.d.ts +0 -5
- package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-card.d.ts.map +0 -1
- package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-table.d.ts +0 -3
- package/dist/types/src/cms/client/interfaces/components/resources/post/topic/topic-table.d.ts.map +0 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/edit/page.d.ts +0 -20
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/edit/page.d.ts.map +0 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/page.d.ts +0 -20
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/[id]/page.d.ts.map +0 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/index.d.ts +0 -4
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/index.d.ts.map +0 -1
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.d.ts +0 -14
- package/dist/types/src/cms/client/interfaces/pages/dashboard/content/content-management/topic/page.d.ts.map +0 -1
- package/dist/types/src/cms/client/interfaces/pages/page.d.ts +0 -2
- package/dist/types/src/cms/client/interfaces/pages/page.d.ts.map +0 -1
- package/dist/types/src/core/seeders/topic/seeder.d.ts +0 -10
- 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(
|
|
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: {
|
|
38
|
-
taggedPosts: {
|
|
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),
|