@spfn/cms 0.1.0-alpha.8 → 0.1.0-alpha.81

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 (233) hide show
  1. package/README.md +28 -416
  2. package/dist/{helpers/locale.actions.d.ts → actions-BEFWwQsh.d.ts} +70 -7
  3. package/dist/actions.d.ts +2 -9
  4. package/dist/actions.js +99 -10
  5. package/dist/actions.js.map +1 -1
  6. package/dist/api.d.ts +319 -0
  7. package/dist/api.js +467 -0
  8. package/dist/api.js.map +1 -0
  9. package/dist/client.d.ts +135 -127
  10. package/dist/client.js +1318 -59
  11. package/dist/client.js.map +1 -1
  12. package/dist/{types.d.ts → index-Dh5FjWzR.d.ts} +45 -7
  13. package/dist/index.d.ts +112 -16
  14. package/dist/index.js +625 -23
  15. package/dist/index.js.map +1 -1
  16. package/dist/label-sync-generator-B0EmvtWM.d.ts +32 -0
  17. package/dist/lib/contracts/labels.d.ts +244 -0
  18. package/dist/lib/contracts/labels.js +269 -0
  19. package/dist/lib/contracts/labels.js.map +1 -0
  20. package/dist/lib/contracts/published-cache.d.ts +48 -0
  21. package/dist/lib/contracts/published-cache.js +49 -0
  22. package/dist/lib/contracts/published-cache.js.map +1 -0
  23. package/dist/lib/contracts/values.d.ts +71 -0
  24. package/dist/lib/contracts/values.js +104 -0
  25. package/dist/lib/contracts/values.js.map +1 -0
  26. package/dist/locale.constants-BNkSdNP1.d.ts +108 -0
  27. package/dist/{entities → server/entities}/cms-audit-logs.d.ts +15 -70
  28. package/dist/server/entities/cms-audit-logs.js +78 -0
  29. package/dist/server/entities/cms-audit-logs.js.map +1 -0
  30. package/dist/{entities → server/entities}/cms-draft-cache.d.ts +13 -73
  31. package/dist/server/entities/cms-draft-cache.js +38 -0
  32. package/dist/server/entities/cms-draft-cache.js.map +1 -0
  33. package/dist/{entities → server/entities}/cms-label-values.d.ts +16 -67
  34. package/dist/server/entities/cms-label-values.js +81 -0
  35. package/dist/server/entities/cms-label-values.js.map +1 -0
  36. package/dist/{entities → server/entities}/cms-labels.d.ts +17 -14
  37. package/dist/server/entities/cms-labels.js +42 -0
  38. package/dist/server/entities/cms-labels.js.map +1 -0
  39. package/dist/{entities → server/entities}/cms-published-cache.d.ts +14 -69
  40. package/dist/server/entities/cms-published-cache.js +36 -0
  41. package/dist/server/entities/cms-published-cache.js.map +1 -0
  42. package/dist/server/entities/index.d.ts +6 -0
  43. package/dist/server/entities/index.js +185 -0
  44. package/dist/server/entities/index.js.map +1 -0
  45. package/dist/server/generators/index.d.ts +19 -0
  46. package/dist/server/generators/index.js +731 -0
  47. package/dist/server/generators/index.js.map +1 -0
  48. package/dist/server/labels/index.d.ts +1 -0
  49. package/dist/server/labels/index.js +33 -0
  50. package/dist/server/labels/index.js.map +1 -0
  51. package/dist/server/repositories/index.d.ts +212 -0
  52. package/dist/server/repositories/index.js +418 -0
  53. package/dist/server/repositories/index.js.map +1 -0
  54. package/dist/server/routes/labels/[id]/admin/index.js +679 -0
  55. package/dist/server/routes/labels/[id]/admin/index.js.map +1 -0
  56. package/dist/server/routes/labels/[id]/index.js +576 -0
  57. package/dist/server/routes/labels/[id]/index.js.map +1 -0
  58. package/dist/server/routes/labels/[id]/publish/index.js +720 -0
  59. package/dist/server/routes/labels/[id]/publish/index.js.map +1 -0
  60. package/dist/server/routes/labels/[id]/versions/index.js +548 -0
  61. package/dist/server/routes/labels/[id]/versions/index.js.map +1 -0
  62. package/dist/server/routes/labels/_id_/admin/index.d.ts +11 -0
  63. package/dist/{routes/labels/[id] → server/routes/labels/_id_}/index.d.ts +5 -3
  64. package/dist/server/routes/labels/_id_/publish/index.d.ts +11 -0
  65. package/dist/server/routes/labels/_id_/versions/index.d.ts +11 -0
  66. package/dist/server/routes/labels/by-key/[key]/index.js +525 -0
  67. package/dist/server/routes/labels/by-key/[key]/index.js.map +1 -0
  68. package/dist/server/routes/labels/by-key/_key_/index.d.ts +10 -0
  69. package/dist/server/routes/labels/index.d.ts +12 -0
  70. package/dist/server/routes/labels/index.js +684 -0
  71. package/dist/server/routes/labels/index.js.map +1 -0
  72. package/dist/server/routes/published-cache/index.d.ts +11 -0
  73. package/dist/server/routes/published-cache/index.js +337 -0
  74. package/dist/server/routes/published-cache/index.js.map +1 -0
  75. package/dist/server/routes/values/[labelId]/[version]/index.js +457 -0
  76. package/dist/server/routes/values/[labelId]/[version]/index.js.map +1 -0
  77. package/dist/server/routes/values/[labelId]/index.js +452 -0
  78. package/dist/server/routes/values/[labelId]/index.js.map +1 -0
  79. package/dist/server/routes/values/_labelId_/_version_/index.d.ts +10 -0
  80. package/dist/server/routes/values/_labelId_/index.d.ts +10 -0
  81. package/dist/server.d.ts +77 -7
  82. package/dist/server.js +1747 -247
  83. package/dist/server.js.map +1 -1
  84. package/migrations/0000_init.sql +3 -0
  85. package/migrations/0001_far_lady_vermin.sql +86 -0
  86. package/migrations/0002_heavy_the_enforcers.sql +2 -0
  87. package/migrations/0003_rare_runaways.sql +1 -0
  88. package/migrations/meta/0000_snapshot.json +15 -0
  89. package/migrations/meta/0001_snapshot.json +687 -0
  90. package/migrations/meta/0002_snapshot.json +686 -0
  91. package/migrations/meta/0003_snapshot.json +563 -0
  92. package/migrations/meta/_journal.json +34 -0
  93. package/package.json +55 -36
  94. package/dist/actions.d.ts.map +0 -1
  95. package/dist/client.d.ts.map +0 -1
  96. package/dist/cms.config.d.ts +0 -77
  97. package/dist/cms.config.d.ts.map +0 -1
  98. package/dist/cms.config.js +0 -111
  99. package/dist/cms.config.js.map +0 -1
  100. package/dist/entities/cms-audit-logs.d.ts.map +0 -1
  101. package/dist/entities/cms-audit-logs.js +0 -103
  102. package/dist/entities/cms-audit-logs.js.map +0 -1
  103. package/dist/entities/cms-draft-cache.d.ts.map +0 -1
  104. package/dist/entities/cms-draft-cache.js +0 -112
  105. package/dist/entities/cms-draft-cache.js.map +0 -1
  106. package/dist/entities/cms-label-values.d.ts.map +0 -1
  107. package/dist/entities/cms-label-values.js +0 -105
  108. package/dist/entities/cms-label-values.js.map +0 -1
  109. package/dist/entities/cms-label-versions.d.ts +0 -207
  110. package/dist/entities/cms-label-versions.d.ts.map +0 -1
  111. package/dist/entities/cms-label-versions.js +0 -80
  112. package/dist/entities/cms-label-versions.js.map +0 -1
  113. package/dist/entities/cms-labels.d.ts.map +0 -1
  114. package/dist/entities/cms-labels.js +0 -48
  115. package/dist/entities/cms-labels.js.map +0 -1
  116. package/dist/entities/cms-published-cache.d.ts.map +0 -1
  117. package/dist/entities/cms-published-cache.js +0 -103
  118. package/dist/entities/cms-published-cache.js.map +0 -1
  119. package/dist/entities/index.d.ts +0 -10
  120. package/dist/entities/index.d.ts.map +0 -1
  121. package/dist/entities/index.js +0 -10
  122. package/dist/entities/index.js.map +0 -1
  123. package/dist/generators/index.d.ts +0 -19
  124. package/dist/generators/index.d.ts.map +0 -1
  125. package/dist/generators/index.js +0 -19
  126. package/dist/generators/index.js.map +0 -1
  127. package/dist/generators/label-sync-generator.d.ts +0 -33
  128. package/dist/generators/label-sync-generator.d.ts.map +0 -1
  129. package/dist/generators/label-sync-generator.js +0 -86
  130. package/dist/generators/label-sync-generator.js.map +0 -1
  131. package/dist/helpers/locale.actions.d.ts.map +0 -1
  132. package/dist/helpers/locale.actions.js +0 -210
  133. package/dist/helpers/locale.actions.js.map +0 -1
  134. package/dist/helpers/locale.constants.d.ts +0 -10
  135. package/dist/helpers/locale.constants.d.ts.map +0 -1
  136. package/dist/helpers/locale.constants.js +0 -10
  137. package/dist/helpers/locale.constants.js.map +0 -1
  138. package/dist/helpers/locale.d.ts +0 -17
  139. package/dist/helpers/locale.d.ts.map +0 -1
  140. package/dist/helpers/locale.js +0 -20
  141. package/dist/helpers/locale.js.map +0 -1
  142. package/dist/helpers/sync.d.ts +0 -41
  143. package/dist/helpers/sync.d.ts.map +0 -1
  144. package/dist/helpers/sync.js +0 -309
  145. package/dist/helpers/sync.js.map +0 -1
  146. package/dist/index.d.ts.map +0 -1
  147. package/dist/init.d.ts +0 -31
  148. package/dist/init.d.ts.map +0 -1
  149. package/dist/init.js +0 -36
  150. package/dist/init.js.map +0 -1
  151. package/dist/labels/helpers.d.ts +0 -31
  152. package/dist/labels/helpers.d.ts.map +0 -1
  153. package/dist/labels/helpers.js +0 -60
  154. package/dist/labels/helpers.js.map +0 -1
  155. package/dist/labels/index.d.ts +0 -7
  156. package/dist/labels/index.d.ts.map +0 -1
  157. package/dist/labels/index.js +0 -7
  158. package/dist/labels/index.js.map +0 -1
  159. package/dist/repositories/cms-draft-cache.repository.d.ts +0 -62
  160. package/dist/repositories/cms-draft-cache.repository.d.ts.map +0 -1
  161. package/dist/repositories/cms-draft-cache.repository.js +0 -56
  162. package/dist/repositories/cms-draft-cache.repository.js.map +0 -1
  163. package/dist/repositories/cms-label-values.repository.d.ts +0 -32
  164. package/dist/repositories/cms-label-values.repository.d.ts.map +0 -1
  165. package/dist/repositories/cms-label-values.repository.js +0 -72
  166. package/dist/repositories/cms-label-values.repository.js.map +0 -1
  167. package/dist/repositories/cms-labels.repository.d.ts +0 -53
  168. package/dist/repositories/cms-labels.repository.d.ts.map +0 -1
  169. package/dist/repositories/cms-labels.repository.js +0 -77
  170. package/dist/repositories/cms-labels.repository.js.map +0 -1
  171. package/dist/repositories/cms-published-cache.repository.d.ts +0 -53
  172. package/dist/repositories/cms-published-cache.repository.d.ts.map +0 -1
  173. package/dist/repositories/cms-published-cache.repository.js +0 -54
  174. package/dist/repositories/cms-published-cache.repository.js.map +0 -1
  175. package/dist/repositories/index.d.ts +0 -8
  176. package/dist/repositories/index.d.ts.map +0 -1
  177. package/dist/repositories/index.js +0 -9
  178. package/dist/repositories/index.js.map +0 -1
  179. package/dist/routes/labels/[id]/contract.d.ts +0 -68
  180. package/dist/routes/labels/[id]/contract.d.ts.map +0 -1
  181. package/dist/routes/labels/[id]/contract.js +0 -84
  182. package/dist/routes/labels/[id]/contract.js.map +0 -1
  183. package/dist/routes/labels/[id]/index.d.ts.map +0 -1
  184. package/dist/routes/labels/[id]/index.js +0 -96
  185. package/dist/routes/labels/[id]/index.js.map +0 -1
  186. package/dist/routes/labels/by-key/[key]/contract.d.ts +0 -24
  187. package/dist/routes/labels/by-key/[key]/contract.d.ts.map +0 -1
  188. package/dist/routes/labels/by-key/[key]/contract.js +0 -28
  189. package/dist/routes/labels/by-key/[key]/contract.js.map +0 -1
  190. package/dist/routes/labels/by-key/[key]/index.d.ts +0 -8
  191. package/dist/routes/labels/by-key/[key]/index.d.ts.map +0 -1
  192. package/dist/routes/labels/by-key/[key]/index.js +0 -32
  193. package/dist/routes/labels/by-key/[key]/index.js.map +0 -1
  194. package/dist/routes/labels/contract.d.ts +0 -59
  195. package/dist/routes/labels/contract.d.ts.map +0 -1
  196. package/dist/routes/labels/contract.js +0 -75
  197. package/dist/routes/labels/contract.js.map +0 -1
  198. package/dist/routes/labels/index.d.ts +0 -10
  199. package/dist/routes/labels/index.d.ts.map +0 -1
  200. package/dist/routes/labels/index.js +0 -73
  201. package/dist/routes/labels/index.js.map +0 -1
  202. package/dist/routes/published-cache/contract.d.ts +0 -25
  203. package/dist/routes/published-cache/contract.d.ts.map +0 -1
  204. package/dist/routes/published-cache/contract.js +0 -35
  205. package/dist/routes/published-cache/contract.js.map +0 -1
  206. package/dist/routes/published-cache/index.d.ts +0 -8
  207. package/dist/routes/published-cache/index.d.ts.map +0 -1
  208. package/dist/routes/published-cache/index.js +0 -33
  209. package/dist/routes/published-cache/index.js.map +0 -1
  210. package/dist/routes/values/[labelId]/[version]/contract.d.ts +0 -29
  211. package/dist/routes/values/[labelId]/[version]/contract.d.ts.map +0 -1
  212. package/dist/routes/values/[labelId]/[version]/contract.js +0 -33
  213. package/dist/routes/values/[labelId]/[version]/contract.js.map +0 -1
  214. package/dist/routes/values/[labelId]/[version]/index.d.ts +0 -8
  215. package/dist/routes/values/[labelId]/[version]/index.d.ts.map +0 -1
  216. package/dist/routes/values/[labelId]/[version]/index.js +0 -45
  217. package/dist/routes/values/[labelId]/[version]/index.js.map +0 -1
  218. package/dist/routes/values/[labelId]/contract.d.ts +0 -38
  219. package/dist/routes/values/[labelId]/contract.d.ts.map +0 -1
  220. package/dist/routes/values/[labelId]/contract.js +0 -59
  221. package/dist/routes/values/[labelId]/contract.js.map +0 -1
  222. package/dist/routes/values/[labelId]/index.d.ts +0 -8
  223. package/dist/routes/values/[labelId]/index.d.ts.map +0 -1
  224. package/dist/routes/values/[labelId]/index.js +0 -42
  225. package/dist/routes/values/[labelId]/index.js.map +0 -1
  226. package/dist/server.d.ts.map +0 -1
  227. package/dist/store.d.ts +0 -87
  228. package/dist/store.d.ts.map +0 -1
  229. package/dist/store.js +0 -205
  230. package/dist/store.js.map +0 -1
  231. package/dist/types.d.ts.map +0 -1
  232. package/dist/types.js +0 -7
  233. package/dist/types.js.map +0 -1
@@ -1,105 +0,0 @@
1
- /**
2
- * CMS Label Values Entity
3
- *
4
- * 라벨의 실제 값을 저장합니다.
5
- * - 다국어 지원 (locale)
6
- * - 반응형 지원 (breakpoint)
7
- * - 버전 관리 (version)
8
- * - JSONB로 유연한 값 저장
9
- */
10
- import { serial, integer, text, jsonb, timestamp, index, unique } from 'drizzle-orm/pg-core';
11
- import { createFunctionSchema } from '@spfn/core/db';
12
- import { cmsLabels } from './cms-labels.js';
13
- // Create isolated schema for @spfn/cms
14
- const schema = createFunctionSchema('@spfn/cms');
15
- export const cmsLabelValues = schema.table('label_values', {
16
- // Primary Key
17
- id: serial('id').primaryKey(),
18
- // Foreign Key: cms_labels
19
- labelId: integer('label_id')
20
- .notNull()
21
- .references(() => cmsLabels.id, { onDelete: 'cascade' }),
22
- // 버전 번호
23
- version: integer('version').notNull().default(1),
24
- // 언어 코드
25
- locale: text('locale').notNull().default('ko'),
26
- // "ko" | "en" | "ja"
27
- // 반응형 브레이크포인트
28
- breakpoint: text('breakpoint'),
29
- // null = 기본값 (모든 화면 크기)
30
- // "sm" | "md" | "lg" | "xl" | "2xl"
31
- // 실제 값 (JSONB)
32
- value: jsonb('value').notNull(),
33
- // LabelValue 타입:
34
- // - TextValue: { type: "text", content: string }
35
- // - ImageValue: { type: "image", url: string, alt?: string, width?: number, height?: number }
36
- // - VideoValue: { type: "video", url: string, thumbnail?: string, duration?: number }
37
- // - FileValue: { type: "file", url: string, filename: string, size?: number }
38
- // - ObjectValue: { type: "object", fields: Record<string, LabelValue> }
39
- // 생성 시각
40
- createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
41
- }, (table) => [
42
- // UNIQUE 제약: 같은 버전에서 locale + breakpoint 조합은 유일
43
- unique('cms_label_values_locale_breakpoint_unique')
44
- .on(table.labelId, table.version, table.locale, table.breakpoint),
45
- // 인덱스: labelId + version 복합 조회 최적화
46
- index('cms_label_values_label_version_idx')
47
- .on(table.labelId, table.version),
48
- // 인덱스: locale 필터링 최적화
49
- index('cms_label_values_locale_idx').on(table.locale),
50
- ]);
51
- /**
52
- * 사용 예시:
53
- *
54
- * // 텍스트 값 저장
55
- * await db.insert(cmsLabelValues).values({
56
- * labelId: 1,
57
- * version: 1,
58
- * locale: 'ko',
59
- * breakpoint: null,
60
- * value: {
61
- * type: 'text',
62
- * content: '미래를 만드는 기업'
63
- * }
64
- * });
65
- *
66
- * // 반응형 이미지 저장 (모바일용)
67
- * await db.insert(cmsLabelValues).values({
68
- * labelId: 2,
69
- * version: 1,
70
- * locale: 'ko',
71
- * breakpoint: 'sm',
72
- * value: {
73
- * type: 'image',
74
- * url: '/uploads/hero-mobile.jpg',
75
- * alt: 'Hero Image',
76
- * width: 640,
77
- * height: 480
78
- * }
79
- * });
80
- *
81
- * // 특정 버전의 한국어 값 조회
82
- * const values = await db.select()
83
- * .from(cmsLabelValues)
84
- * .where(and(
85
- * eq(cmsLabelValues.labelId, 1),
86
- * eq(cmsLabelValues.version, 2),
87
- * eq(cmsLabelValues.locale, 'ko')
88
- * ));
89
- *
90
- * // Object 타입 값 저장 (재귀 구조)
91
- * await db.insert(cmsLabelValues).values({
92
- * labelId: 3,
93
- * version: 1,
94
- * locale: 'ko',
95
- * value: {
96
- * type: 'object',
97
- * fields: {
98
- * title: { type: 'text', content: '특징 1' },
99
- * icon: { type: 'image', url: '/icons/feature1.svg', alt: 'Icon' },
100
- * description: { type: 'text', content: '상세 설명...' }
101
- * }
102
- * }
103
- * });
104
- */
105
- //# sourceMappingURL=cms-label-values.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-label-values.js","sourceRoot":"","sources":["../../src/entities/cms-label-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,uCAAuC;AACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;IACvD,cAAc;IACd,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAE7B,0BAA0B;IAC1B,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;SACvB,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAE5D,QAAQ;IACR,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhD,QAAQ;IACR,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9C,qBAAqB;IAErB,cAAc;IACd,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;IAC9B,wBAAwB;IACxB,oCAAoC;IAEpC,eAAe;IACf,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;IAC/B,iBAAiB;IACjB,iDAAiD;IACjD,8FAA8F;IAC9F,sFAAsF;IACtF,8EAA8E;IAC9E,wEAAwE;IAExE,QAAQ;IACR,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;CACpF,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACV,gDAAgD;IAChD,MAAM,CAAC,2CAA2C,CAAC;SAC9C,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC;IAErE,mCAAmC;IACnC,KAAK,CAAC,oCAAoC,CAAC;SACtC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;IAErC,sBAAsB;IACtB,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;CACxD,CAAC,CAAC;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG"}
@@ -1,207 +0,0 @@
1
- /**
2
- * CMS Label Versions Entity
3
- *
4
- * 라벨의 버전 메타데이터를 관리합니다.
5
- * - 버전별 상태 (draft/published/archived)
6
- * - 발행 정보 (publishedAt, publishedBy)
7
- * - 버전 노트
8
- */
9
- export declare const cmsLabelVersions: import("drizzle-orm/pg-core").PgTableWithColumns<{
10
- name: "label_versions";
11
- schema: string;
12
- columns: {
13
- id: import("drizzle-orm/pg-core").PgColumn<{
14
- name: "id";
15
- tableName: "label_versions";
16
- dataType: "number";
17
- columnType: "PgSerial";
18
- data: number;
19
- driverParam: number;
20
- notNull: true;
21
- hasDefault: true;
22
- isPrimaryKey: true;
23
- isAutoincrement: false;
24
- hasRuntimeDefault: false;
25
- enumValues: undefined;
26
- baseColumn: never;
27
- identity: undefined;
28
- generated: undefined;
29
- }, {}, {}>;
30
- labelId: import("drizzle-orm/pg-core").PgColumn<{
31
- name: "label_id";
32
- tableName: "label_versions";
33
- dataType: "number";
34
- columnType: "PgInteger";
35
- data: number;
36
- driverParam: string | number;
37
- notNull: true;
38
- hasDefault: false;
39
- isPrimaryKey: false;
40
- isAutoincrement: false;
41
- hasRuntimeDefault: false;
42
- enumValues: undefined;
43
- baseColumn: never;
44
- identity: undefined;
45
- generated: undefined;
46
- }, {}, {}>;
47
- version: import("drizzle-orm/pg-core").PgColumn<{
48
- name: "version";
49
- tableName: "label_versions";
50
- dataType: "number";
51
- columnType: "PgInteger";
52
- data: number;
53
- driverParam: string | number;
54
- notNull: true;
55
- hasDefault: false;
56
- isPrimaryKey: false;
57
- isAutoincrement: false;
58
- hasRuntimeDefault: false;
59
- enumValues: undefined;
60
- baseColumn: never;
61
- identity: undefined;
62
- generated: undefined;
63
- }, {}, {}>;
64
- status: import("drizzle-orm/pg-core").PgColumn<{
65
- name: "status";
66
- tableName: "label_versions";
67
- dataType: "string";
68
- columnType: "PgText";
69
- data: string;
70
- driverParam: string;
71
- notNull: true;
72
- hasDefault: false;
73
- isPrimaryKey: false;
74
- isAutoincrement: false;
75
- hasRuntimeDefault: false;
76
- enumValues: [string, ...string[]];
77
- baseColumn: never;
78
- identity: undefined;
79
- generated: undefined;
80
- }, {}, {}>;
81
- publishedAt: import("drizzle-orm/pg-core").PgColumn<{
82
- name: "published_at";
83
- tableName: "label_versions";
84
- dataType: "date";
85
- columnType: "PgTimestamp";
86
- data: Date;
87
- driverParam: string;
88
- notNull: false;
89
- hasDefault: false;
90
- isPrimaryKey: false;
91
- isAutoincrement: false;
92
- hasRuntimeDefault: false;
93
- enumValues: undefined;
94
- baseColumn: never;
95
- identity: undefined;
96
- generated: undefined;
97
- }, {}, {}>;
98
- publishedBy: import("drizzle-orm/pg-core").PgColumn<{
99
- name: "published_by";
100
- tableName: "label_versions";
101
- dataType: "string";
102
- columnType: "PgText";
103
- data: string;
104
- driverParam: string;
105
- notNull: false;
106
- hasDefault: false;
107
- isPrimaryKey: false;
108
- isAutoincrement: false;
109
- hasRuntimeDefault: false;
110
- enumValues: [string, ...string[]];
111
- baseColumn: never;
112
- identity: undefined;
113
- generated: undefined;
114
- }, {}, {}>;
115
- notes: import("drizzle-orm/pg-core").PgColumn<{
116
- name: "notes";
117
- tableName: "label_versions";
118
- dataType: "string";
119
- columnType: "PgText";
120
- data: string;
121
- driverParam: string;
122
- notNull: false;
123
- hasDefault: false;
124
- isPrimaryKey: false;
125
- isAutoincrement: false;
126
- hasRuntimeDefault: false;
127
- enumValues: [string, ...string[]];
128
- baseColumn: never;
129
- identity: undefined;
130
- generated: undefined;
131
- }, {}, {}>;
132
- createdBy: import("drizzle-orm/pg-core").PgColumn<{
133
- name: "created_by";
134
- tableName: "label_versions";
135
- dataType: "string";
136
- columnType: "PgText";
137
- data: string;
138
- driverParam: string;
139
- notNull: false;
140
- hasDefault: false;
141
- isPrimaryKey: false;
142
- isAutoincrement: false;
143
- hasRuntimeDefault: false;
144
- enumValues: [string, ...string[]];
145
- baseColumn: never;
146
- identity: undefined;
147
- generated: undefined;
148
- }, {}, {}>;
149
- createdAt: import("drizzle-orm/pg-core").PgColumn<{
150
- name: "created_at";
151
- tableName: "label_versions";
152
- dataType: "date";
153
- columnType: "PgTimestamp";
154
- data: Date;
155
- driverParam: string;
156
- notNull: true;
157
- hasDefault: true;
158
- isPrimaryKey: false;
159
- isAutoincrement: false;
160
- hasRuntimeDefault: false;
161
- enumValues: undefined;
162
- baseColumn: never;
163
- identity: undefined;
164
- generated: undefined;
165
- }, {}, {}>;
166
- };
167
- dialect: "pg";
168
- }>;
169
- export type CmsLabelVersion = typeof cmsLabelVersions.$inferSelect;
170
- export type NewCmsLabelVersion = typeof cmsLabelVersions.$inferInsert;
171
- /**
172
- * 사용 예시:
173
- *
174
- * // 새 버전 생성 (draft)
175
- * await db.insert(cmsLabelVersions).values({
176
- * labelId: 1,
177
- * version: 2,
178
- * status: 'draft',
179
- * notes: '문구 개선',
180
- * createdBy: 'editor@futureplay.com'
181
- * });
182
- *
183
- * // 버전 발행
184
- * await db.update(cmsLabelVersions)
185
- * .set({
186
- * status: 'published',
187
- * publishedAt: new Date(),
188
- * publishedBy: 'admin@futureplay.com'
189
- * })
190
- * .where(and(
191
- * eq(cmsLabelVersions.labelId, 1),
192
- * eq(cmsLabelVersions.version, 2)
193
- * ));
194
- *
195
- * // 라벨의 모든 버전 조회
196
- * const versions = await db.select()
197
- * .from(cmsLabelVersions)
198
- * .where(eq(cmsLabelVersions.labelId, 1))
199
- * .orderBy(desc(cmsLabelVersions.version));
200
- *
201
- * // 발행된 버전만 조회
202
- * const published = await db.select()
203
- * .from(cmsLabelVersions)
204
- * .where(eq(cmsLabelVersions.status, 'published'))
205
- * .orderBy(desc(cmsLabelVersions.publishedAt));
206
- */
207
- //# sourceMappingURL=cms-label-versions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-label-versions.d.ts","sourceRoot":"","sources":["../../src/entities/cms-label-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsC3B,CAAC;AAGH,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG"}
@@ -1,80 +0,0 @@
1
- /**
2
- * CMS Label Versions Entity
3
- *
4
- * 라벨의 버전 메타데이터를 관리합니다.
5
- * - 버전별 상태 (draft/published/archived)
6
- * - 발행 정보 (publishedAt, publishedBy)
7
- * - 버전 노트
8
- */
9
- import { serial, integer, text, timestamp, index, unique } from 'drizzle-orm/pg-core';
10
- import { createFunctionSchema } from '@spfn/core/db';
11
- import { cmsLabels } from './cms-labels.js';
12
- // Create isolated schema for @spfn/cms
13
- const schema = createFunctionSchema('@spfn/cms');
14
- export const cmsLabelVersions = schema.table('label_versions', {
15
- // Primary Key
16
- id: serial('id').primaryKey(),
17
- // Foreign Key: cms_labels
18
- labelId: integer('label_id')
19
- .notNull()
20
- .references(() => cmsLabels.id, { onDelete: 'cascade' }),
21
- // 버전 번호
22
- version: integer('version').notNull(),
23
- // 버전 상태
24
- status: text('status').notNull(),
25
- // "draft" | "published" | "archived"
26
- // 발행 정보
27
- publishedAt: timestamp('published_at', { withTimezone: true }),
28
- publishedBy: text('published_by'),
29
- // 버전 노트 (변경사항 설명)
30
- notes: text('notes'),
31
- // 버전 생성자
32
- createdBy: text('created_by'),
33
- // 생성 시각
34
- createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
35
- }, (table) => [
36
- // UNIQUE 제약: 각 라벨의 버전 번호는 고유
37
- unique('cms_label_versions_label_version_unique')
38
- .on(table.labelId, table.version),
39
- // 인덱스: labelId로 버전 목록 조회 최적화
40
- index('cms_label_versions_label_id_idx').on(table.labelId),
41
- // 인덱스: status 필터링 최적화
42
- index('cms_label_versions_status_idx').on(table.status),
43
- ]);
44
- /**
45
- * 사용 예시:
46
- *
47
- * // 새 버전 생성 (draft)
48
- * await db.insert(cmsLabelVersions).values({
49
- * labelId: 1,
50
- * version: 2,
51
- * status: 'draft',
52
- * notes: '문구 개선',
53
- * createdBy: 'editor@futureplay.com'
54
- * });
55
- *
56
- * // 버전 발행
57
- * await db.update(cmsLabelVersions)
58
- * .set({
59
- * status: 'published',
60
- * publishedAt: new Date(),
61
- * publishedBy: 'admin@futureplay.com'
62
- * })
63
- * .where(and(
64
- * eq(cmsLabelVersions.labelId, 1),
65
- * eq(cmsLabelVersions.version, 2)
66
- * ));
67
- *
68
- * // 라벨의 모든 버전 조회
69
- * const versions = await db.select()
70
- * .from(cmsLabelVersions)
71
- * .where(eq(cmsLabelVersions.labelId, 1))
72
- * .orderBy(desc(cmsLabelVersions.version));
73
- *
74
- * // 발행된 버전만 조회
75
- * const published = await db.select()
76
- * .from(cmsLabelVersions)
77
- * .where(eq(cmsLabelVersions.status, 'published'))
78
- * .orderBy(desc(cmsLabelVersions.publishedAt));
79
- */
80
- //# sourceMappingURL=cms-label-versions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-label-versions.js","sourceRoot":"","sources":["../../src/entities/cms-label-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,uCAAuC;AACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE;IAC3D,cAAc;IACd,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAE7B,0BAA0B;IAC1B,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;SAC3B,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAExD,QAAQ;IACR,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAErC,QAAQ;IACR,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAChC,qCAAqC;IAErC,QAAQ;IACR,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC9D,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IAEjC,kBAAkB;IAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;IAEpB,SAAS;IACT,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;IAE7B,QAAQ;IACR,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;CACpF,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACV,6BAA6B;IAC7B,MAAM,CAAC,yCAAyC,CAAC;SAChD,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;IAEjC,6BAA6B;IAC7B,KAAK,CAAC,iCAAiC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;IAE1D,sBAAsB;IACtB,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;CAC1D,CAAC,CAAC;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-labels.d.ts","sourceRoot":"","sources":["../../src/entities/cms-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CpB,CAAC;AAGH,MAAM,MAAM,QAAQ,GAAG,OAAO,SAAS,CAAC,YAAY,CAAC;AACrD,MAAM,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,YAAY,CAAC"}
@@ -1,48 +0,0 @@
1
- /**
2
- * CMS Labels Entity
3
- *
4
- * 라벨의 메타데이터와 현재 발행 상태를 관리합니다.
5
- * - 라벨 식별 (id, key)
6
- * - 섹션 분류 (section)
7
- * - 타입 정의 (type)
8
- * - 발행 상태 (publishedVersion)
9
- */
10
- import { index, integer, serial, text, timestamp } from 'drizzle-orm/pg-core';
11
- import { createFunctionSchema } from '@spfn/core/db';
12
- // Create isolated schema for @spfn/cms
13
- const schema = createFunctionSchema('@spfn/cms');
14
- export const cmsLabels = schema.table('labels', {
15
- // Primary Key
16
- id: serial('id').primaryKey(),
17
- // 라벨 식별자
18
- key: text('key').notNull().unique(),
19
- // 예: "home.hero.title", "why-futureplay.hero.subtitle"
20
- // 구조: {section}.{component}.{property}
21
- // 섹션 분류 (페이지 단위)
22
- section: text('section').notNull(),
23
- // 예: "home", "why-futureplay", "team"
24
- // 값 타입
25
- type: text('type').notNull(),
26
- // "text" | "image" | "video" | "file" | "object"
27
- // 기본값
28
- defaultValue: text('default_value'),
29
- // 라벨의 기본값 (sync 시 설정)
30
- // 설명
31
- description: text('description'),
32
- // 라벨에 대한 설명 (optional)
33
- // 현재 발행된 버전 번호
34
- publishedVersion: integer('published_version'),
35
- // null = 미발행 상태
36
- // 1, 2, 3... = 발행된 버전 번호
37
- // 생성자 추적
38
- createdBy: text('created_by'),
39
- // 타임스탬프
40
- createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
41
- updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
42
- }, (table) => [
43
- // 인덱스: 섹션별 조회 최적화
44
- index('cms_labels_section_idx').on(table.section),
45
- // 인덱스: key로 조회 최적화 (unique 제약으로 자동 생성되지만 명시)
46
- index('cms_labels_key_idx').on(table.key),
47
- ]);
48
- //# sourceMappingURL=cms-labels.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-labels.js","sourceRoot":"","sources":["../../src/entities/cms-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,uCAAuC;AACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;IAC5C,cAAc;IACd,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAE7B,SAAS;IACT,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;IACnC,uDAAuD;IACvD,uCAAuC;IAEvC,iBAAiB;IACjB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAClC,sCAAsC;IAEtC,OAAO;IACP,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAC5B,iDAAiD;IAEjD,MAAM;IACN,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC;IACnC,sBAAsB;IAEtB,KAAK;IACL,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;IAChC,uBAAuB;IAEvB,eAAe;IACf,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAC9C,gBAAgB;IAChB,yBAAyB;IAEzB,SAAS;IACT,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;IAE7B,QAAQ;IACR,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;IACjF,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;CACpF,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACV,kBAAkB;IAClB,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;IAEjD,6CAA6C;IAC7C,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;CAC5C,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-published-cache.d.ts","sourceRoot":"","sources":["../../src/entities/cms-published-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiC5B,CAAC;AAGH,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,YAAY,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAG,OAAO,iBAAiB,CAAC,YAAY,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG"}
@@ -1,103 +0,0 @@
1
- /**
2
- * CMS Published Cache Entity
3
- *
4
- * 발행된 콘텐츠를 섹션+언어 단위로 캐싱합니다.
5
- * - 초고속 읽기 성능 (5ms)
6
- * - 단일 쿼리로 섹션 전체 로드
7
- * - JSONB로 즉시 사용 가능한 데이터
8
- *
9
- * 성능 비교:
10
- * - 정규화 테이블 JOIN: 87ms
11
- * - 캐시 테이블: 5ms (17배 빠름!)
12
- */
13
- import { serial, text, jsonb, integer, timestamp, index, unique } from 'drizzle-orm/pg-core';
14
- import { createFunctionSchema } from '@spfn/core/db';
15
- // Create isolated schema for @spfn/cms
16
- const schema = createFunctionSchema('@spfn/cms');
17
- export const cmsPublishedCache = schema.table('published_cache', {
18
- // Primary Key
19
- id: serial('id').primaryKey(),
20
- // 섹션 (페이지 단위)
21
- section: text('section').notNull(),
22
- // "home" | "why-futureplay" | "team" | "our-companies" | "apply"
23
- // 언어
24
- locale: text('locale').notNull(),
25
- // "ko" | "en" | "ja"
26
- // 캐시된 콘텐츠 (JSONB)
27
- content: jsonb('content').notNull(),
28
- // Record<string, LabelValue>
29
- // {
30
- // "home.hero.title": { type: "text", content: "..." },
31
- // "home.hero.image": { type: "image", url: "...", alt: "..." },
32
- // ...
33
- // }
34
- // 발행 정보
35
- publishedAt: timestamp('published_at', { withTimezone: true }).notNull(),
36
- publishedBy: text('published_by'),
37
- // 캐시 버전 (클라이언트 캐싱용)
38
- version: integer('version').notNull().default(1),
39
- }, (table) => [
40
- // UNIQUE 제약: section + locale 조합은 유일
41
- unique('cms_published_cache_unique').on(table.section, table.locale),
42
- // 인덱스: section으로 조회 최적화
43
- index('cms_published_cache_section_idx').on(table.section),
44
- ]);
45
- /**
46
- * 사용 예시:
47
- *
48
- * // 캐시 생성/업데이트 (UPSERT)
49
- * await db.insert(cmsPublishedCache)
50
- * .values({
51
- * section: 'home',
52
- * locale: 'ko',
53
- * content: {
54
- * 'home.hero.title': {
55
- * type: 'text',
56
- * content: '미래를 만드는 기업'
57
- * },
58
- * 'home.hero.image': {
59
- * type: 'image',
60
- * url: '/uploads/hero.jpg',
61
- * alt: 'Hero',
62
- * width: 1920,
63
- * height: 1080
64
- * }
65
- * },
66
- * publishedAt: new Date(),
67
- * publishedBy: 'admin@futureplay.com'
68
- * })
69
- * .onConflictDoUpdate({
70
- * target: [cmsPublishedCache.section, cmsPublishedCache.locale],
71
- * set: {
72
- * content: sql`EXCLUDED.content`,
73
- * publishedAt: sql`EXCLUDED.published_at`,
74
- * publishedBy: sql`EXCLUDED.published_by`,
75
- * version: sql`${cmsPublishedCache.version} + 1`
76
- * }
77
- * });
78
- *
79
- * // 캐시 조회 (초고속!)
80
- * const cache = await db.select()
81
- * .from(cmsPublishedCache)
82
- * .where(and(
83
- * eq(cmsPublishedCache.section, 'home'),
84
- * eq(cmsPublishedCache.locale, 'ko')
85
- * ))
86
- * .limit(1);
87
- *
88
- * const labels = cache[0].content; // 즉시 사용 가능!
89
- *
90
- * // 섹션의 모든 언어 캐시 조회
91
- * const allLocales = await db.select()
92
- * .from(cmsPublishedCache)
93
- * .where(eq(cmsPublishedCache.section, 'home'));
94
- *
95
- * // 오래된 캐시 감지
96
- * const stale = await db.select()
97
- * .from(cmsPublishedCache)
98
- * .where(lt(
99
- * cmsPublishedCache.publishedAt,
100
- * new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
101
- * ));
102
- */
103
- //# sourceMappingURL=cms-published-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-published-cache.js","sourceRoot":"","sources":["../../src/entities/cms-published-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,uCAAuC;AACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;IAC7D,cAAc;IACd,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAE7B,cAAc;IACd,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAClC,iEAAiE;IAEjE,KAAK;IACL,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAChC,qBAAqB;IAErB,kBAAkB;IAClB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IACnC,6BAA6B;IAC7B,IAAI;IACJ,yDAAyD;IACzD,kEAAkE;IAClE,QAAQ;IACR,IAAI;IAEJ,QAAQ;IACR,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IACxE,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IAEjC,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CACnD,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACV,qCAAqC;IACrC,MAAM,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;IAEpE,wBAAwB;IACxB,KAAK,CAAC,iCAAiC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;CAC7D,CAAC,CAAC;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG"}
@@ -1,10 +0,0 @@
1
- /**
2
- * CMS Database Entities
3
- */
4
- export * from './cms-labels.js';
5
- export * from './cms-label-values.js';
6
- export * from './cms-label-versions.js';
7
- export * from './cms-draft-cache.js';
8
- export * from './cms-published-cache.js';
9
- export * from './cms-audit-logs.js';
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * CMS Database Entities
3
- */
4
- export * from './cms-labels.js';
5
- export * from './cms-label-values.js';
6
- export * from './cms-label-versions.js';
7
- export * from './cms-draft-cache.js';
8
- export * from './cms-published-cache.js';
9
- export * from './cms-audit-logs.js';
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * SPFN CMS Generators Registry
3
- *
4
- * Exports generators for use with package-based naming convention
5
- * e.g., @spfn/cms:label-sync
6
- */
7
- import { createLabelSyncGenerator } from './label-sync-generator.js';
8
- /**
9
- * Generators registry
10
- * Maps generator names to their factory functions
11
- */
12
- export declare const generators: {
13
- 'label-sync': typeof createLabelSyncGenerator;
14
- };
15
- /**
16
- * Re-export individual generator factories
17
- */
18
- export { createLabelSyncGenerator, LabelSyncGenerator } from './label-sync-generator.js';
19
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,UAAU;;CAEtB,CAAC;AAEF;;GAEG;AACH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * SPFN CMS Generators Registry
3
- *
4
- * Exports generators for use with package-based naming convention
5
- * e.g., @spfn/cms:label-sync
6
- */
7
- import { createLabelSyncGenerator } from './label-sync-generator.js';
8
- /**
9
- * Generators registry
10
- * Maps generator names to their factory functions
11
- */
12
- export const generators = {
13
- 'label-sync': createLabelSyncGenerator,
14
- };
15
- /**
16
- * Re-export individual generator factories
17
- */
18
- export { createLabelSyncGenerator, LabelSyncGenerator } from './label-sync-generator.js';
19
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,YAAY,EAAE,wBAAwB;CACzC,CAAC;AAEF;;GAEG;AACH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}