@endora-commerce/mod-blog 0.100.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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -0
  3. package/dist/admin/api/blog-client.d.ts +70 -0
  4. package/dist/admin/api/blog-client.d.ts.map +1 -0
  5. package/dist/admin/api/blog-client.js +137 -0
  6. package/dist/admin/api/blog-client.js.map +1 -0
  7. package/dist/admin/components/CategoryTreeNode.d.ts +25 -0
  8. package/dist/admin/components/CategoryTreeNode.d.ts.map +1 -0
  9. package/dist/admin/components/CategoryTreeNode.js +14 -0
  10. package/dist/admin/components/CategoryTreeNode.js.map +1 -0
  11. package/dist/admin/components/PostStatusBadge.d.ts +7 -0
  12. package/dist/admin/components/PostStatusBadge.d.ts.map +1 -0
  13. package/dist/admin/components/PostStatusBadge.js +16 -0
  14. package/dist/admin/components/PostStatusBadge.js.map +1 -0
  15. package/dist/admin/components/RelatedPostsPicker.d.ts +11 -0
  16. package/dist/admin/components/RelatedPostsPicker.d.ts.map +1 -0
  17. package/dist/admin/components/RelatedPostsPicker.js +77 -0
  18. package/dist/admin/components/RelatedPostsPicker.js.map +1 -0
  19. package/dist/admin/components/RelatedProductsPicker.d.ts +9 -0
  20. package/dist/admin/components/RelatedProductsPicker.d.ts.map +1 -0
  21. package/dist/admin/components/RelatedProductsPicker.js +66 -0
  22. package/dist/admin/components/RelatedProductsPicker.js.map +1 -0
  23. package/dist/admin/components/TagPicker.d.ts +9 -0
  24. package/dist/admin/components/TagPicker.d.ts.map +1 -0
  25. package/dist/admin/components/TagPicker.js +66 -0
  26. package/dist/admin/components/TagPicker.js.map +1 -0
  27. package/dist/admin/index.d.ts +33 -0
  28. package/dist/admin/index.d.ts.map +1 -0
  29. package/dist/admin/index.js +114 -0
  30. package/dist/admin/index.js.map +1 -0
  31. package/dist/admin/pages/BlogCategoryEditor.d.ts +9 -0
  32. package/dist/admin/pages/BlogCategoryEditor.d.ts.map +1 -0
  33. package/dist/admin/pages/BlogCategoryEditor.js +196 -0
  34. package/dist/admin/pages/BlogCategoryEditor.js.map +1 -0
  35. package/dist/admin/pages/BlogCategoryTreePage.d.ts +9 -0
  36. package/dist/admin/pages/BlogCategoryTreePage.d.ts.map +1 -0
  37. package/dist/admin/pages/BlogCategoryTreePage.js +122 -0
  38. package/dist/admin/pages/BlogCategoryTreePage.js.map +1 -0
  39. package/dist/admin/pages/BlogPostEditor.d.ts +9 -0
  40. package/dist/admin/pages/BlogPostEditor.d.ts.map +1 -0
  41. package/dist/admin/pages/BlogPostEditor.js +314 -0
  42. package/dist/admin/pages/BlogPostEditor.js.map +1 -0
  43. package/dist/admin/pages/BlogPostListPage.d.ts +9 -0
  44. package/dist/admin/pages/BlogPostListPage.d.ts.map +1 -0
  45. package/dist/admin/pages/BlogPostListPage.js +75 -0
  46. package/dist/admin/pages/BlogPostListPage.js.map +1 -0
  47. package/dist/admin/pages/BlogTagListPage.d.ts +9 -0
  48. package/dist/admin/pages/BlogTagListPage.d.ts.map +1 -0
  49. package/dist/admin/pages/BlogTagListPage.js +145 -0
  50. package/dist/admin/pages/BlogTagListPage.js.map +1 -0
  51. package/dist/backend/entities/blog-category-language.entity.d.ts +11 -0
  52. package/dist/backend/entities/blog-category-language.entity.d.ts.map +1 -0
  53. package/dist/backend/entities/blog-category-language.entity.js +35 -0
  54. package/dist/backend/entities/blog-category-language.entity.js.map +1 -0
  55. package/dist/backend/entities/blog-category-sales-channel.entity.d.ts +17 -0
  56. package/dist/backend/entities/blog-category-sales-channel.entity.d.ts.map +1 -0
  57. package/dist/backend/entities/blog-category-sales-channel.entity.js +48 -0
  58. package/dist/backend/entities/blog-category-sales-channel.entity.js.map +1 -0
  59. package/dist/backend/entities/blog-category.entity.d.ts +32 -0
  60. package/dist/backend/entities/blog-category.entity.d.ts.map +1 -0
  61. package/dist/backend/entities/blog-category.entity.js +113 -0
  62. package/dist/backend/entities/blog-category.entity.js.map +1 -0
  63. package/dist/backend/entities/blog-post-category.entity.d.ts +10 -0
  64. package/dist/backend/entities/blog-post-category.entity.d.ts.map +1 -0
  65. package/dist/backend/entities/blog-post-category.entity.js +34 -0
  66. package/dist/backend/entities/blog-post-category.entity.js.map +1 -0
  67. package/dist/backend/entities/blog-post-language.entity.d.ts +9 -0
  68. package/dist/backend/entities/blog-post-language.entity.d.ts.map +1 -0
  69. package/dist/backend/entities/blog-post-language.entity.js +33 -0
  70. package/dist/backend/entities/blog-post-language.entity.js.map +1 -0
  71. package/dist/backend/entities/blog-post-related-post.entity.d.ts +15 -0
  72. package/dist/backend/entities/blog-post-related-post.entity.d.ts.map +1 -0
  73. package/dist/backend/entities/blog-post-related-post.entity.js +42 -0
  74. package/dist/backend/entities/blog-post-related-post.entity.js.map +1 -0
  75. package/dist/backend/entities/blog-post-related-product.entity.d.ts +14 -0
  76. package/dist/backend/entities/blog-post-related-product.entity.d.ts.map +1 -0
  77. package/dist/backend/entities/blog-post-related-product.entity.js +41 -0
  78. package/dist/backend/entities/blog-post-related-product.entity.js.map +1 -0
  79. package/dist/backend/entities/blog-post-sales-channel.entity.d.ts +16 -0
  80. package/dist/backend/entities/blog-post-sales-channel.entity.d.ts.map +1 -0
  81. package/dist/backend/entities/blog-post-sales-channel.entity.js +47 -0
  82. package/dist/backend/entities/blog-post-sales-channel.entity.js.map +1 -0
  83. package/dist/backend/entities/blog-post-tag.entity.d.ts +14 -0
  84. package/dist/backend/entities/blog-post-tag.entity.d.ts.map +1 -0
  85. package/dist/backend/entities/blog-post-tag.entity.js +41 -0
  86. package/dist/backend/entities/blog-post-tag.entity.js.map +1 -0
  87. package/dist/backend/entities/blog-post.entity.d.ts +31 -0
  88. package/dist/backend/entities/blog-post.entity.d.ts.map +1 -0
  89. package/dist/backend/entities/blog-post.entity.js +106 -0
  90. package/dist/backend/entities/blog-post.entity.js.map +1 -0
  91. package/dist/backend/entities/blog-tag.entity.d.ts +18 -0
  92. package/dist/backend/entities/blog-tag.entity.d.ts.map +1 -0
  93. package/dist/backend/entities/blog-tag.entity.js +66 -0
  94. package/dist/backend/entities/blog-tag.entity.js.map +1 -0
  95. package/dist/backend/index.d.ts +100 -0
  96. package/dist/backend/index.d.ts.map +1 -0
  97. package/dist/backend/index.js +182 -0
  98. package/dist/backend/index.js.map +1 -0
  99. package/dist/backend/routes.admin.d.ts +12 -0
  100. package/dist/backend/routes.admin.d.ts.map +1 -0
  101. package/dist/backend/routes.admin.js +148 -0
  102. package/dist/backend/routes.admin.js.map +1 -0
  103. package/dist/backend/routes.storefront.d.ts +6 -0
  104. package/dist/backend/routes.storefront.d.ts.map +1 -0
  105. package/dist/backend/routes.storefront.js +72 -0
  106. package/dist/backend/routes.storefront.js.map +1 -0
  107. package/dist/backend/services/blog-asset-references.d.ts +4 -0
  108. package/dist/backend/services/blog-asset-references.d.ts.map +1 -0
  109. package/dist/backend/services/blog-asset-references.js +79 -0
  110. package/dist/backend/services/blog-asset-references.js.map +1 -0
  111. package/dist/backend/services/blog-cache.d.ts +55 -0
  112. package/dist/backend/services/blog-cache.d.ts.map +1 -0
  113. package/dist/backend/services/blog-cache.js +111 -0
  114. package/dist/backend/services/blog-cache.js.map +1 -0
  115. package/dist/backend/services/blog-category-service.d.ts +53 -0
  116. package/dist/backend/services/blog-category-service.d.ts.map +1 -0
  117. package/dist/backend/services/blog-category-service.js +446 -0
  118. package/dist/backend/services/blog-category-service.js.map +1 -0
  119. package/dist/backend/services/blog-language-reference.d.ts +18 -0
  120. package/dist/backend/services/blog-language-reference.d.ts.map +1 -0
  121. package/dist/backend/services/blog-language-reference.js +43 -0
  122. package/dist/backend/services/blog-language-reference.js.map +1 -0
  123. package/dist/backend/services/blog-post-service.d.ts +79 -0
  124. package/dist/backend/services/blog-post-service.d.ts.map +1 -0
  125. package/dist/backend/services/blog-post-service.js +539 -0
  126. package/dist/backend/services/blog-post-service.js.map +1 -0
  127. package/dist/backend/services/blog-settings-resolver.d.ts +36 -0
  128. package/dist/backend/services/blog-settings-resolver.d.ts.map +1 -0
  129. package/dist/backend/services/blog-settings-resolver.js +68 -0
  130. package/dist/backend/services/blog-settings-resolver.js.map +1 -0
  131. package/dist/backend/services/blog-slug-collision.d.ts +35 -0
  132. package/dist/backend/services/blog-slug-collision.d.ts.map +1 -0
  133. package/dist/backend/services/blog-slug-collision.js +84 -0
  134. package/dist/backend/services/blog-slug-collision.js.map +1 -0
  135. package/dist/backend/services/blog-storefront-resolver.d.ts +107 -0
  136. package/dist/backend/services/blog-storefront-resolver.d.ts.map +1 -0
  137. package/dist/backend/services/blog-storefront-resolver.js +492 -0
  138. package/dist/backend/services/blog-storefront-resolver.js.map +1 -0
  139. package/dist/backend/services/blog-tag-service.d.ts +45 -0
  140. package/dist/backend/services/blog-tag-service.d.ts.map +1 -0
  141. package/dist/backend/services/blog-tag-service.js +198 -0
  142. package/dist/backend/services/blog-tag-service.js.map +1 -0
  143. package/dist/backend/services/seed-default-category.d.ts +25 -0
  144. package/dist/backend/services/seed-default-category.d.ts.map +1 -0
  145. package/dist/backend/services/seed-default-category.js +48 -0
  146. package/dist/backend/services/seed-default-category.js.map +1 -0
  147. package/dist/backend/services/seed-roles.d.ts +41 -0
  148. package/dist/backend/services/seed-roles.d.ts.map +1 -0
  149. package/dist/backend/services/seed-roles.js +98 -0
  150. package/dist/backend/services/seed-roles.js.map +1 -0
  151. package/dist/manifest.d.ts +226 -0
  152. package/dist/manifest.d.ts.map +1 -0
  153. package/dist/manifest.js +236 -0
  154. package/dist/manifest.js.map +1 -0
  155. package/dist/migrations/20260506T081055_blog_init.d.ts +33 -0
  156. package/dist/migrations/20260506T081055_blog_init.d.ts.map +1 -0
  157. package/dist/migrations/20260506T081055_blog_init.js +260 -0
  158. package/dist/migrations/20260506T081055_blog_init.js.map +1 -0
  159. package/dist/migrations/20260903T101744_blog_namespace_block_names.d.ts +6 -0
  160. package/dist/migrations/20260903T101744_blog_namespace_block_names.d.ts.map +1 -0
  161. package/dist/migrations/20260903T101744_blog_namespace_block_names.js +58 -0
  162. package/dist/migrations/20260903T101744_blog_namespace_block_names.js.map +1 -0
  163. package/dist/migrations/index.d.ts +34 -0
  164. package/dist/migrations/index.d.ts.map +1 -0
  165. package/dist/migrations/index.js +37 -0
  166. package/dist/migrations/index.js.map +1 -0
  167. package/docs/blog/index.md +199 -0
  168. package/i18n/en.json +166 -0
  169. package/i18n/pl.json +166 -0
  170. package/package.json +108 -0
  171. package/tailwind.css +14 -0
@@ -0,0 +1,145 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useState } from 'react';
3
+ import { Alert, AlertDescription, Badge, Button, Card, CardContent, CardHeader, CardTitle, Input, Label, PageHeader } from '@endora-commerce/admin-kit/ui';
4
+ import { useTranslation } from '@endora-commerce/admin-kit/i18n';
5
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@endora-commerce/admin-kit/ui';
6
+ import { blogClient } from '../api/blog-client.js';
7
+ const PER_PAGE = 50;
8
+ function pickName(name, fallback) {
9
+ if (!name)
10
+ return fallback;
11
+ return name['en-US'] ?? Object.values(name)[0] ?? fallback;
12
+ }
13
+ const blankForm = { name: '', code: '', description: '' };
14
+ export function BlogTagListPage() {
15
+ const t = useTranslation('blog');
16
+ const [rows, setRows] = useState([]);
17
+ const [q, setQ] = useState('');
18
+ const [page, setPage] = useState(1);
19
+ const [totalPages, setTotalPages] = useState(1);
20
+ const [loading, setLoading] = useState(true);
21
+ const [error, setError] = useState(null);
22
+ const [info, setInfo] = useState(null);
23
+ const [editingId, setEditingId] = useState(null);
24
+ const [form, setForm] = useState(blankForm);
25
+ const [saving, setSaving] = useState(false);
26
+ const load = useCallback(async () => {
27
+ setLoading(true);
28
+ setError(null);
29
+ try {
30
+ const out = await blogClient.listTags({
31
+ ...(q ? { q } : {}),
32
+ page,
33
+ perPage: PER_PAGE,
34
+ });
35
+ setRows(out.data);
36
+ setTotalPages(out.pagination.totalPages);
37
+ }
38
+ catch (err) {
39
+ setError(err instanceof Error ? err.message : String(err));
40
+ }
41
+ finally {
42
+ setLoading(false);
43
+ }
44
+ }, [q, page]);
45
+ useEffect(() => {
46
+ void load();
47
+ }, [load]);
48
+ const startEdit = useCallback((tag) => {
49
+ setEditingId(tag.id);
50
+ setForm({
51
+ name: pickName(tag.name, tag.code),
52
+ code: tag.code,
53
+ description: pickName(tag.description, ''),
54
+ });
55
+ setInfo(null);
56
+ }, []);
57
+ const cancelEdit = useCallback(() => {
58
+ setEditingId(null);
59
+ setForm(blankForm);
60
+ }, []);
61
+ const onSubmit = useCallback(async () => {
62
+ if (!form.name.trim() || !/^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/.test(form.code)) {
63
+ setError(t('tagList.validation.invalidForm'));
64
+ return;
65
+ }
66
+ setSaving(true);
67
+ setError(null);
68
+ setInfo(null);
69
+ try {
70
+ if (editingId) {
71
+ const existing = rows.find((r) => r.id === editingId);
72
+ if (!existing)
73
+ throw new Error(t('tagList.validation.missingTag'));
74
+ await blogClient.patchTag(editingId, {
75
+ name: { 'en-US': form.name },
76
+ code: form.code,
77
+ ...(form.description
78
+ ? { description: { 'en-US': form.description } }
79
+ : { description: null }),
80
+ version: existing.version,
81
+ });
82
+ setInfo(t('tagList.messages.updated', { code: form.code }));
83
+ }
84
+ else {
85
+ await blogClient.createTag({
86
+ name: { 'en-US': form.name },
87
+ code: form.code,
88
+ ...(form.description ? { description: { 'en-US': form.description } } : {}),
89
+ });
90
+ setInfo(t('tagList.messages.created', { code: form.code }));
91
+ }
92
+ cancelEdit();
93
+ await load();
94
+ }
95
+ catch (err) {
96
+ setError(err instanceof Error ? err.message : String(err));
97
+ }
98
+ finally {
99
+ setSaving(false);
100
+ }
101
+ }, [editingId, form, rows, cancelEdit, load]);
102
+ const onDelete = useCallback(async (tag) => {
103
+ const probe = await blogClient.getTagInboundReferences(tag.id);
104
+ if (probe.totalPosts > 0) {
105
+ const slugs = probe.posts.map((p) => p.slug).join(', ');
106
+ if (!window.confirm(t('tagList.deleteConfirm.inUse', {
107
+ code: tag.code,
108
+ count: probe.totalPosts,
109
+ slugs,
110
+ }))) {
111
+ return;
112
+ }
113
+ }
114
+ else if (!window.confirm(t('tagList.deleteConfirm.default', { code: tag.code }))) {
115
+ return;
116
+ }
117
+ setSaving(true);
118
+ setError(null);
119
+ try {
120
+ await blogClient.deleteTag(tag.id, tag.version);
121
+ setInfo(t('tagList.messages.deleted', { code: tag.code }));
122
+ await load();
123
+ }
124
+ catch (err) {
125
+ setError(err instanceof Error ? err.message : String(err));
126
+ }
127
+ finally {
128
+ setSaving(false);
129
+ }
130
+ }, [load]);
131
+ return (_jsxs("div", { className: "space-y-4", children: [_jsx(PageHeader, { title: t('tagList.title'), description: t('tagList.description') }), error ? (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: error }) })) : null, info ? (_jsx(Alert, { children: _jsx(AlertDescription, { children: info }) })) : null, _jsxs(Card, { children: [_jsx(CardHeader, { className: "flex flex-row items-center justify-between gap-2", children: _jsx(CardTitle, { className: "text-base", children: editingId ? t('tagList.editTag') : t('tagList.newTag') }) }), _jsxs(CardContent, { className: "grid gap-4", children: [_jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { children: [_jsx(Label, { htmlFor: "tag-name", children: t('tagList.nameLabel') }), _jsx(Input, { id: "tag-name", value: form.name, onChange: (event) => setForm((f) => ({ ...f, name: event.target.value })) })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "tag-code", children: t('tagList.codeLabel') }), _jsx(Input, { id: "tag-code", value: form.code, onChange: (event) => setForm((f) => ({ ...f, code: event.target.value.toLowerCase() })), className: "font-mono", placeholder: t('tagList.codePlaceholder') })] })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "tag-description", children: t('tagList.descriptionLabel') }), _jsx(Input, { id: "tag-description", value: form.description, onChange: (event) => setForm((f) => ({ ...f, description: event.target.value })) })] }), _jsxs("div", { className: "flex justify-end gap-2", children: [editingId ? (_jsx(Button, { type: "button", variant: "outline", onClick: cancelEdit, children: t('common.cancel') })) : null, _jsx(Button, { type: "button", disabled: saving, onClick: () => void onSubmit(), children: saving ? t('common.saving') : editingId ? t('tagList.saveTag') : t('tagList.createTag') })] })] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between gap-2", children: [_jsx(CardTitle, { className: "text-base", children: t('tagList.cardTitle') }), _jsx("div", { className: "flex items-center gap-2", children: _jsx(Input, { value: q, onChange: (event) => {
132
+ setQ(event.target.value);
133
+ setPage(1);
134
+ }, onKeyDown: (event) => {
135
+ if (event.key === 'Enter')
136
+ void load();
137
+ }, placeholder: t('tagList.searchPlaceholder'), className: "w-64" }) })] }), _jsx(CardContent, { children: loading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('common.loading') })) : rows.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('tagList.empty') })) : (_jsxs(_Fragment, { children: [_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: t('columns.name') }), _jsx(TableHead, { children: t('columns.code') }), _jsx(TableHead, { children: t('columns.version') }), _jsx(TableHead, { className: "text-right", children: t('columns.actions') })] }) }), _jsx(TableBody, { children: rows.map((tag) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: pickName(tag.name, tag.code) }), _jsx(TableCell, { children: _jsx(Badge, { variant: "outline", className: "font-mono text-[10px]", children: tag.code }) }), _jsxs(TableCell, { className: "text-xs text-muted-foreground", children: ["v", tag.version] }), _jsxs(TableCell, { className: "text-right", children: [_jsx(Button, { type: "button", size: "sm", variant: "outline", onClick: () => startEdit(tag), className: "mr-2", children: t('common.edit') }), _jsx(Button, { type: "button", size: "sm", variant: "outline", disabled: saving, onClick: () => void onDelete(tag), children: t('common.delete') })] })] }, tag.id))) })] }), totalPages > 1 ? (_jsxs("div", { className: "mt-4 flex items-center justify-between text-sm", children: [_jsx("span", { className: "text-muted-foreground", children: t('pagination.page', { page, totalPages }) }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: page === 1, onClick: () => setPage((p) => Math.max(1, p - 1)), children: t('pagination.previous') }), _jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: page >= totalPages, onClick: () => setPage((p) => Math.min(totalPages, p + 1)), children: t('pagination.next') })] })] })) : null] })) })] })] }));
138
+ }
139
+ /**
140
+ * The registry loads a route component through a dynamic-import factory and
141
+ * reads its default export (feature 091, FR-013). The named export stays: it is
142
+ * the spelling this module's own code and its tests use.
143
+ */
144
+ export default BlogTagListPage;
145
+ //# sourceMappingURL=BlogTagListPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlogTagListPage.js","sourceRoot":"","sources":["../../../src/admin/pages/BlogTagListPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3J,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,GACT,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,SAAS,QAAQ,CAAC,IAA+C,EAAE,QAAgB;IACjF,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;AAC7D,CAAC;AAQD,MAAM,SAAS,GAAc,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAErE,MAAM,UAAU,eAAe;IAC7B,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAkB,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAY,SAAS,CAAC,CAAC;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;gBACpC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI;gBACJ,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAEd,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,IAAI,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,GAAkB,EAAE,EAAE;QACnD,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC;YACN,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;YAClC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;SAC3C,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnF,QAAQ,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC;YACH,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;gBACtD,IAAI,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC;gBACnE,MAAM,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE;oBACnC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;oBAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,GAAG,CAAC,IAAI,CAAC,WAAW;wBAClB,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;wBAChD,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;oBAC1B,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,CAAC,SAAS,CAAC;oBACzB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;oBAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5E,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,UAAU,EAAE,CAAC;YACb,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,WAAW,CAC1B,KAAK,EAAE,GAAkB,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,IACE,CAAC,MAAM,CAAC,OAAO,CACb,CAAC,CAAC,6BAA6B,EAAE;gBAC/B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,KAAK,CAAC,UAAU;gBACvB,KAAK;aACN,CAAC,CACH,EACD,CAAC;gBACD,OAAO;YACT,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACnF,OAAO;QACT,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,CAAC,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3D,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EACD,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,UAAU,IACT,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC,EACzB,WAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,GACrC,EAED,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,KAAK,IAAC,OAAO,EAAC,aAAa,YAC1B,KAAC,gBAAgB,cAAE,KAAK,GAAoB,GACtC,CACT,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,KAAK,cACJ,KAAC,gBAAgB,cAAE,IAAI,GAAoB,GACrC,CACT,CAAC,CAAC,CAAC,IAAI,EAER,MAAC,IAAI,eACH,KAAC,UAAU,IAAC,SAAS,EAAC,kDAAkD,YACtE,KAAC,SAAS,IAAC,SAAS,EAAC,WAAW,YAC7B,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAC7C,GACD,EACb,MAAC,WAAW,IAAC,SAAS,EAAC,YAAY,aACjC,eAAK,SAAS,EAAC,wBAAwB,aACrC,0BACE,KAAC,KAAK,IAAC,OAAO,EAAC,UAAU,YAAE,CAAC,CAAC,mBAAmB,CAAC,GAAS,EAC1D,KAAC,KAAK,IACJ,EAAE,EAAC,UAAU,EACb,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GACzE,IACE,EACN,0BACE,KAAC,KAAK,IAAC,OAAO,EAAC,UAAU,YAAE,CAAC,CAAC,mBAAmB,CAAC,GAAS,EAC1D,KAAC,KAAK,IACJ,EAAE,EAAC,UAAU,EACb,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAEpE,SAAS,EAAC,WAAW,EACrB,WAAW,EAAE,CAAC,CAAC,yBAAyB,CAAC,GACzC,IACE,IACF,EACN,0BACE,KAAC,KAAK,IAAC,OAAO,EAAC,iBAAiB,YAAE,CAAC,CAAC,0BAA0B,CAAC,GAAS,EACxE,KAAC,KAAK,IACJ,EAAE,EAAC,iBAAiB,EACpB,KAAK,EAAE,IAAI,CAAC,WAAW,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAE7D,IACE,EACN,eAAK,SAAS,EAAC,wBAAwB,aACpC,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,UAAU,YACxD,CAAC,CAAC,eAAe,CAAC,GACZ,CACV,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,YACnE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,GACjF,IACL,IACM,IACT,EAEP,MAAC,IAAI,eACH,MAAC,UAAU,IAAC,SAAS,EAAC,kDAAkD,aACtE,KAAC,SAAS,IAAC,SAAS,EAAC,WAAW,YAAE,CAAC,CAAC,mBAAmB,CAAC,GAAa,EACrE,cAAK,SAAS,EAAC,yBAAyB,YACtC,KAAC,KAAK,IACJ,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wCAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wCACzB,OAAO,CAAC,CAAC,CAAC,CAAC;oCACb,CAAC,EACD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;wCACnB,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;4CAAE,KAAK,IAAI,EAAE,CAAC;oCACzC,CAAC,EACD,WAAW,EAAE,CAAC,CAAC,2BAA2B,CAAC,EAC3C,SAAS,EAAC,MAAM,GAChB,GACE,IACK,EACb,KAAC,WAAW,cACT,OAAO,CAAC,CAAC,CAAC,CACT,YAAG,SAAS,EAAC,+BAA+B,YAAE,CAAC,CAAC,gBAAgB,CAAC,GAAK,CACvE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,YAAG,SAAS,EAAC,+BAA+B,YAAE,CAAC,CAAC,eAAe,CAAC,GAAK,CACtE,CAAC,CAAC,CAAC,CACF,8BACE,MAAC,KAAK,eACJ,KAAC,WAAW,cACV,MAAC,QAAQ,eACP,KAAC,SAAS,cAAE,CAAC,CAAC,cAAc,CAAC,GAAa,EAC1C,KAAC,SAAS,cAAE,CAAC,CAAC,cAAc,CAAC,GAAa,EAC1C,KAAC,SAAS,cAAE,CAAC,CAAC,iBAAiB,CAAC,GAAa,EAC7C,KAAC,SAAS,IAAC,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,iBAAiB,CAAC,GAAa,IAC3D,GACC,EACd,KAAC,SAAS,cACP,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,MAAC,QAAQ,eACP,KAAC,SAAS,cAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAa,EACrD,KAAC,SAAS,cACR,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,uBAAuB,YACvD,GAAG,CAAC,IAAI,GACH,GACE,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,+BAA+B,kBAChD,GAAG,CAAC,OAAO,IACH,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,YAAY,aAC/B,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAC7B,SAAS,EAAC,MAAM,YAEf,CAAC,CAAC,aAAa,CAAC,GACV,EACT,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,YAEhC,CAAC,CAAC,eAAe,CAAC,GACZ,IACC,KA7BC,GAAG,CAAC,EAAE,CA8BV,CACZ,CAAC,GACQ,IACN,EAEP,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAChB,eAAK,SAAS,EAAC,gDAAgD,aAC7D,eAAM,SAAS,EAAC,uBAAuB,YACpC,CAAC,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GACtC,EACP,eAAK,SAAS,EAAC,YAAY,aACzB,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,IAAI,KAAK,CAAC,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,YAEhD,CAAC,CAAC,qBAAqB,CAAC,GAClB,EACT,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,IAAI,IAAI,UAAU,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,YAEzD,CAAC,CAAC,iBAAiB,CAAC,GACd,IACL,IACF,CACP,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,GACW,IACT,IACH,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * BlogCategoryLanguage — composite-key M2M between blog_categories and
3
+ * BCP-47 language codes. The set is constrained to languages that live in
4
+ * one of the assigned channels' configured language sets (validated at the
5
+ * service layer per feature 005).
6
+ */
7
+ export declare class BlogCategoryLanguage {
8
+ blogCategoryId: string;
9
+ language: string;
10
+ }
11
+ //# sourceMappingURL=blog-category-language.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-category-language.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/blog-category-language.entity.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,qBAEa,oBAAoB;IAE/B,cAAc,EAAG,MAAM,CAAC;IAGxB,QAAQ,EAAG,MAAM,CAAC;CACnB"}
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Entity, PrimaryKey } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
+ /**
13
+ * BlogCategoryLanguage — composite-key M2M between blog_categories and
14
+ * BCP-47 language codes. The set is constrained to languages that live in
15
+ * one of the assigned channels' configured language sets (validated at the
16
+ * service layer per feature 005).
17
+ */
18
+ let BlogCategoryLanguage = class BlogCategoryLanguage {
19
+ blogCategoryId;
20
+ language;
21
+ };
22
+ __decorate([
23
+ PrimaryKey({ type: 'uuid', fieldName: 'blog_category_id' }),
24
+ __metadata("design:type", String)
25
+ ], BlogCategoryLanguage.prototype, "blogCategoryId", void 0);
26
+ __decorate([
27
+ PrimaryKey({ type: 'string', length: 8 }),
28
+ __metadata("design:type", String)
29
+ ], BlogCategoryLanguage.prototype, "language", void 0);
30
+ BlogCategoryLanguage = __decorate([
31
+ GlobalEntity(),
32
+ Entity({ tableName: 'blog_category_languages' })
33
+ ], BlogCategoryLanguage);
34
+ export { BlogCategoryLanguage };
35
+ //# sourceMappingURL=blog-category-language.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-category-language.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/blog-category-language.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;;;;GAKG;AAGI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAE/B,cAAc,CAAU;IAGxB,QAAQ,CAAU;CACnB,CAAA;AAJC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;;4DACpC;AAGxB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;;sDACxB;AALP,oBAAoB;IAFhC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;GACpC,oBAAoB,CAMhC"}
@@ -0,0 +1,17 @@
1
+ import { OptionalProps } from '@mikro-orm/core';
2
+ /**
3
+ * BlogCategorySalesChannel — composite-key M2M between blog_categories and
4
+ * sales_channels. The denormalised `slug` + `deleted_at` columns mirror the
5
+ * parent `blog_categories` row so the partial unique index
6
+ * `idx_blog_categories_slug_per_channel_uniq` can enforce per-(channel,
7
+ * slug) uniqueness directly at the DB level (R3). The service layer keeps
8
+ * the mirror in sync on every parent write.
9
+ */
10
+ export declare class BlogCategorySalesChannel {
11
+ [OptionalProps]?: 'deletedAt';
12
+ blogCategoryId: string;
13
+ salesChannelId: string;
14
+ slug: string;
15
+ deletedAt?: Date | null;
16
+ }
17
+ //# sourceMappingURL=blog-category-sales-channel.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-category-sales-channel.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/blog-category-sales-channel.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAG9E;;;;;;;GAOG;AACH,qBAEa,wBAAwB;IACnC,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;IAG9B,cAAc,EAAG,MAAM,CAAC;IAGxB,cAAc,EAAG,MAAM,CAAC;IAGxB,IAAI,EAAG,MAAM,CAAC;IAGd,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB"}
@@ -0,0 +1,48 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Entity, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
+ /**
13
+ * BlogCategorySalesChannel — composite-key M2M between blog_categories and
14
+ * sales_channels. The denormalised `slug` + `deleted_at` columns mirror the
15
+ * parent `blog_categories` row so the partial unique index
16
+ * `idx_blog_categories_slug_per_channel_uniq` can enforce per-(channel,
17
+ * slug) uniqueness directly at the DB level (R3). The service layer keeps
18
+ * the mirror in sync on every parent write.
19
+ */
20
+ let BlogCategorySalesChannel = class BlogCategorySalesChannel {
21
+ [OptionalProps];
22
+ blogCategoryId;
23
+ salesChannelId;
24
+ slug;
25
+ deletedAt;
26
+ };
27
+ __decorate([
28
+ PrimaryKey({ type: 'uuid', fieldName: 'blog_category_id' }),
29
+ __metadata("design:type", String)
30
+ ], BlogCategorySalesChannel.prototype, "blogCategoryId", void 0);
31
+ __decorate([
32
+ PrimaryKey({ type: 'uuid', fieldName: 'sales_channel_id' }),
33
+ __metadata("design:type", String)
34
+ ], BlogCategorySalesChannel.prototype, "salesChannelId", void 0);
35
+ __decorate([
36
+ Property({ type: 'string', length: 160 }),
37
+ __metadata("design:type", String)
38
+ ], BlogCategorySalesChannel.prototype, "slug", void 0);
39
+ __decorate([
40
+ Property({ type: 'datetime', fieldName: 'deleted_at', nullable: true }),
41
+ __metadata("design:type", Object)
42
+ ], BlogCategorySalesChannel.prototype, "deletedAt", void 0);
43
+ BlogCategorySalesChannel = __decorate([
44
+ GlobalEntity(),
45
+ Entity({ tableName: 'blog_category_sales_channels' })
46
+ ], BlogCategorySalesChannel);
47
+ export { BlogCategorySalesChannel };
48
+ //# sourceMappingURL=blog-category-sales-channel.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-category-sales-channel.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/blog-category-sales-channel.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;;;;;;GAOG;AAGI,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,CAAC,aAAa,CAAC,CAAe;IAG9B,cAAc,CAAU;IAGxB,cAAc,CAAU;IAGxB,IAAI,CAAU;IAGd,SAAS,CAAe;CACzB,CAAA;AAVC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;;gEACpC;AAGxB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;;gEACpC;AAGxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;sDAC5B;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2DAChD;AAbb,wBAAwB;IAFpC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAAC;GACzC,wBAAwB,CAcpC"}
@@ -0,0 +1,32 @@
1
+ import { OptionalProps } from '@mikro-orm/core';
2
+ /**
3
+ * BlogCategory — adjacency-list tree node. The `name`, `description`,
4
+ * `meta_*` columns are jsonb maps (per language); per-language enforcement
5
+ * happens at the Zod boundary (`packages/contracts/src/blog.ts`).
6
+ *
7
+ * `parent_id` is a self-FK with ON DELETE NO ACTION because feature spec
8
+ * FR-007 refuses deletion of a Category with children. `position` is the
9
+ * 0..N-1 sort key per `(parent_id)`. `is_system = true` flags the seeded
10
+ * `Default` Category (FR-005, R11) — protected from deletion at the
11
+ * service layer.
12
+ */
13
+ export declare class BlogCategory {
14
+ [OptionalProps]?: 'id' | 'createdAt' | 'updatedAt' | 'deletedAt' | 'parentId' | 'position' | 'enabled' | 'isSystem' | 'version' | 'name' | 'description' | 'mainImageAssetId' | 'metaTitle' | 'metaDescription' | 'metaKeywords';
15
+ id: string;
16
+ parentId?: string | null;
17
+ position: number;
18
+ name: Record<string, string>;
19
+ slug: string;
20
+ enabled: boolean;
21
+ description?: Record<string, unknown> | null;
22
+ mainImageAssetId?: string | null;
23
+ metaTitle?: Record<string, string> | null;
24
+ metaDescription?: Record<string, string> | null;
25
+ metaKeywords?: Record<string, string> | null;
26
+ isSystem: boolean;
27
+ version: number;
28
+ createdAt: Date;
29
+ updatedAt: Date;
30
+ deletedAt?: Date | null;
31
+ }
32
+ //# sourceMappingURL=blog-category.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-category.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/blog-category.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAIrF;;;;;;;;;;GAUG;AACH,qBAGa,YAAY;IACvB,CAAC,aAAa,CAAC,CAAC,EACZ,IAAI,GACJ,WAAW,GACX,WAAW,GACX,WAAW,GACX,UAAU,GACV,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,MAAM,GACN,aAAa,GACb,kBAAkB,GAClB,WAAW,GACX,iBAAiB,GACjB,cAAc,CAAC;IAGnB,EAAE,EAAE,MAAM,CAAgB;IAG1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGzB,QAAQ,EAAE,MAAM,CAAK;IAGrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAGlC,IAAI,EAAG,MAAM,CAAC;IAGd,OAAO,EAAE,OAAO,CAAQ;IAGxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAG7C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAG1C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAGhD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAG7C,QAAQ,EAAE,OAAO,CAAS;IAG1B,OAAO,EAAE,MAAM,CAAK;IAGpB,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB"}
@@ -0,0 +1,113 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Entity, Index, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
+ import { randomUUID } from 'crypto';
13
+ /**
14
+ * BlogCategory — adjacency-list tree node. The `name`, `description`,
15
+ * `meta_*` columns are jsonb maps (per language); per-language enforcement
16
+ * happens at the Zod boundary (`packages/contracts/src/blog.ts`).
17
+ *
18
+ * `parent_id` is a self-FK with ON DELETE NO ACTION because feature spec
19
+ * FR-007 refuses deletion of a Category with children. `position` is the
20
+ * 0..N-1 sort key per `(parent_id)`. `is_system = true` flags the seeded
21
+ * `Default` Category (FR-005, R11) — protected from deletion at the
22
+ * service layer.
23
+ */
24
+ let BlogCategory = class BlogCategory {
25
+ [OptionalProps];
26
+ id = randomUUID();
27
+ parentId;
28
+ position = 0;
29
+ name = {};
30
+ slug;
31
+ enabled = true;
32
+ description;
33
+ mainImageAssetId;
34
+ metaTitle;
35
+ metaDescription;
36
+ metaKeywords;
37
+ isSystem = false;
38
+ version = 1;
39
+ createdAt = new Date();
40
+ updatedAt = new Date();
41
+ deletedAt;
42
+ };
43
+ __decorate([
44
+ PrimaryKey({ type: 'uuid' }),
45
+ __metadata("design:type", String)
46
+ ], BlogCategory.prototype, "id", void 0);
47
+ __decorate([
48
+ Property({ type: 'uuid', fieldName: 'parent_id', nullable: true }),
49
+ __metadata("design:type", Object)
50
+ ], BlogCategory.prototype, "parentId", void 0);
51
+ __decorate([
52
+ Property({ type: 'integer' }),
53
+ __metadata("design:type", Number)
54
+ ], BlogCategory.prototype, "position", void 0);
55
+ __decorate([
56
+ Property({ type: 'json' }),
57
+ __metadata("design:type", Object)
58
+ ], BlogCategory.prototype, "name", void 0);
59
+ __decorate([
60
+ Property({ type: 'string', length: 160 }),
61
+ __metadata("design:type", String)
62
+ ], BlogCategory.prototype, "slug", void 0);
63
+ __decorate([
64
+ Property({ type: 'boolean' }),
65
+ __metadata("design:type", Boolean)
66
+ ], BlogCategory.prototype, "enabled", void 0);
67
+ __decorate([
68
+ Property({ type: 'json', nullable: true }),
69
+ __metadata("design:type", Object)
70
+ ], BlogCategory.prototype, "description", void 0);
71
+ __decorate([
72
+ Property({ type: 'uuid', fieldName: 'main_image_asset_id', nullable: true }),
73
+ __metadata("design:type", Object)
74
+ ], BlogCategory.prototype, "mainImageAssetId", void 0);
75
+ __decorate([
76
+ Property({ type: 'json', fieldName: 'meta_title', nullable: true }),
77
+ __metadata("design:type", Object)
78
+ ], BlogCategory.prototype, "metaTitle", void 0);
79
+ __decorate([
80
+ Property({ type: 'json', fieldName: 'meta_description', nullable: true }),
81
+ __metadata("design:type", Object)
82
+ ], BlogCategory.prototype, "metaDescription", void 0);
83
+ __decorate([
84
+ Property({ type: 'json', fieldName: 'meta_keywords', nullable: true }),
85
+ __metadata("design:type", Object)
86
+ ], BlogCategory.prototype, "metaKeywords", void 0);
87
+ __decorate([
88
+ Property({ type: 'boolean', fieldName: 'is_system' }),
89
+ __metadata("design:type", Boolean)
90
+ ], BlogCategory.prototype, "isSystem", void 0);
91
+ __decorate([
92
+ Property({ type: 'integer' }),
93
+ __metadata("design:type", Number)
94
+ ], BlogCategory.prototype, "version", void 0);
95
+ __decorate([
96
+ Property({ type: 'datetime', onCreate: () => new Date() }),
97
+ __metadata("design:type", Date)
98
+ ], BlogCategory.prototype, "createdAt", void 0);
99
+ __decorate([
100
+ Property({ type: 'datetime', onUpdate: () => new Date() }),
101
+ __metadata("design:type", Date)
102
+ ], BlogCategory.prototype, "updatedAt", void 0);
103
+ __decorate([
104
+ Property({ type: 'datetime', fieldName: 'deleted_at', nullable: true }),
105
+ __metadata("design:type", Object)
106
+ ], BlogCategory.prototype, "deletedAt", void 0);
107
+ BlogCategory = __decorate([
108
+ GlobalEntity(),
109
+ Entity({ tableName: 'blog_categories' }),
110
+ Index({ name: 'idx_blog_categories_parent_position', properties: ['parentId', 'position'] })
111
+ ], BlogCategory);
112
+ export { BlogCategory };
113
+ //# sourceMappingURL=blog-category.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-category.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/blog-category.entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * BlogPostCategory — composite-key M2M between blog_posts and
3
+ * blog_categories. The Category's FK uses ON DELETE NO ACTION (FR-006
4
+ * refuses Category delete while Posts reference it).
5
+ */
6
+ export declare class BlogPostCategory {
7
+ blogPostId: string;
8
+ blogCategoryId: string;
9
+ }
10
+ //# sourceMappingURL=blog-post-category.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-post-category.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/blog-post-category.entity.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,qBAEa,gBAAgB;IAE3B,UAAU,EAAG,MAAM,CAAC;IAGpB,cAAc,EAAG,MAAM,CAAC;CACzB"}
@@ -0,0 +1,34 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Entity, PrimaryKey } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
+ /**
13
+ * BlogPostCategory — composite-key M2M between blog_posts and
14
+ * blog_categories. The Category's FK uses ON DELETE NO ACTION (FR-006
15
+ * refuses Category delete while Posts reference it).
16
+ */
17
+ let BlogPostCategory = class BlogPostCategory {
18
+ blogPostId;
19
+ blogCategoryId;
20
+ };
21
+ __decorate([
22
+ PrimaryKey({ type: 'uuid', fieldName: 'blog_post_id' }),
23
+ __metadata("design:type", String)
24
+ ], BlogPostCategory.prototype, "blogPostId", void 0);
25
+ __decorate([
26
+ PrimaryKey({ type: 'uuid', fieldName: 'blog_category_id' }),
27
+ __metadata("design:type", String)
28
+ ], BlogPostCategory.prototype, "blogCategoryId", void 0);
29
+ BlogPostCategory = __decorate([
30
+ GlobalEntity(),
31
+ Entity({ tableName: 'blog_post_categories' })
32
+ ], BlogPostCategory);
33
+ export { BlogPostCategory };
34
+ //# sourceMappingURL=blog-post-category.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-post-category.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/blog-post-category.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;;;GAIG;AAGI,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B,UAAU,CAAU;IAGpB,cAAc,CAAU;CACzB,CAAA;AAJC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;;oDACpC;AAGpB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;;wDACpC;AALb,gBAAgB;IAF5B,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC;GACjC,gBAAgB,CAM5B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * BlogPostLanguage — per-Post language scope. Mirrors the shape of
3
+ * `blog_category_languages`.
4
+ */
5
+ export declare class BlogPostLanguage {
6
+ blogPostId: string;
7
+ language: string;
8
+ }
9
+ //# sourceMappingURL=blog-post-language.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-post-language.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/blog-post-language.entity.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAEa,gBAAgB;IAE3B,UAAU,EAAG,MAAM,CAAC;IAGpB,QAAQ,EAAG,MAAM,CAAC;CACnB"}
@@ -0,0 +1,33 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Entity, PrimaryKey } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
+ /**
13
+ * BlogPostLanguage — per-Post language scope. Mirrors the shape of
14
+ * `blog_category_languages`.
15
+ */
16
+ let BlogPostLanguage = class BlogPostLanguage {
17
+ blogPostId;
18
+ language;
19
+ };
20
+ __decorate([
21
+ PrimaryKey({ type: 'uuid', fieldName: 'blog_post_id' }),
22
+ __metadata("design:type", String)
23
+ ], BlogPostLanguage.prototype, "blogPostId", void 0);
24
+ __decorate([
25
+ PrimaryKey({ type: 'string', length: 8 }),
26
+ __metadata("design:type", String)
27
+ ], BlogPostLanguage.prototype, "language", void 0);
28
+ BlogPostLanguage = __decorate([
29
+ GlobalEntity(),
30
+ Entity({ tableName: 'blog_post_languages' })
31
+ ], BlogPostLanguage);
32
+ export { BlogPostLanguage };
33
+ //# sourceMappingURL=blog-post-language.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-post-language.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/blog-post-language.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;;GAGG;AAGI,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B,UAAU,CAAU;IAGpB,QAAQ,CAAU;CACnB,CAAA;AAJC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;;oDACpC;AAGpB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;;kDACxB;AALP,gBAAgB;IAF5B,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;GAChC,gBAAgB,CAM5B"}
@@ -0,0 +1,15 @@
1
+ import { OptionalProps } from '@mikro-orm/core';
2
+ /**
3
+ * BlogPostRelatedPost — self-join on blog_posts (parent_post_id →
4
+ * related_post_id), ordered by `position`. The detach-on-delete contract
5
+ * (R5 / FR-028) is enforced at the service layer in
6
+ * BlogPostService.softDelete: the soft-delete transaction atomically
7
+ * removes every join row where `related_post_id = id`.
8
+ */
9
+ export declare class BlogPostRelatedPost {
10
+ [OptionalProps]?: 'position';
11
+ parentPostId: string;
12
+ relatedPostId: string;
13
+ position: number;
14
+ }
15
+ //# sourceMappingURL=blog-post-related-post.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-post-related-post.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/blog-post-related-post.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAG9E;;;;;;GAMG;AACH,qBAEa,mBAAmB;IAC9B,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC;IAG7B,YAAY,EAAG,MAAM,CAAC;IAGtB,aAAa,EAAG,MAAM,CAAC;IAGvB,QAAQ,EAAE,MAAM,CAAK;CACtB"}
@@ -0,0 +1,42 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Entity, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
+ /**
13
+ * BlogPostRelatedPost — self-join on blog_posts (parent_post_id →
14
+ * related_post_id), ordered by `position`. The detach-on-delete contract
15
+ * (R5 / FR-028) is enforced at the service layer in
16
+ * BlogPostService.softDelete: the soft-delete transaction atomically
17
+ * removes every join row where `related_post_id = id`.
18
+ */
19
+ let BlogPostRelatedPost = class BlogPostRelatedPost {
20
+ [OptionalProps];
21
+ parentPostId;
22
+ relatedPostId;
23
+ position = 0;
24
+ };
25
+ __decorate([
26
+ PrimaryKey({ type: 'uuid', fieldName: 'parent_post_id' }),
27
+ __metadata("design:type", String)
28
+ ], BlogPostRelatedPost.prototype, "parentPostId", void 0);
29
+ __decorate([
30
+ PrimaryKey({ type: 'uuid', fieldName: 'related_post_id' }),
31
+ __metadata("design:type", String)
32
+ ], BlogPostRelatedPost.prototype, "relatedPostId", void 0);
33
+ __decorate([
34
+ Property({ type: 'integer' }),
35
+ __metadata("design:type", Number)
36
+ ], BlogPostRelatedPost.prototype, "position", void 0);
37
+ BlogPostRelatedPost = __decorate([
38
+ GlobalEntity(),
39
+ Entity({ tableName: 'blog_post_related_posts' })
40
+ ], BlogPostRelatedPost);
41
+ export { BlogPostRelatedPost };
42
+ //# sourceMappingURL=blog-post-related-post.entity.js.map