@spfn/cms 0.1.0-alpha.9 → 0.2.0-beta.2

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/README.md +320 -359
  2. package/dist/actions.d.ts +12 -6
  3. package/dist/actions.js +25 -10
  4. package/dist/actions.js.map +1 -1
  5. package/dist/config.d.ts +39 -0
  6. package/dist/config.js +39 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/errors.d.ts +149 -0
  9. package/dist/errors.js +164 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/index.d.ts +138 -20
  12. package/dist/index.js +212 -23
  13. package/dist/index.js.map +1 -1
  14. package/dist/server.d.ts +44 -81
  15. package/dist/server.js +610 -256
  16. package/dist/server.js.map +1 -1
  17. package/migrations/0000_medical_ozymandias.sql +54 -0
  18. package/migrations/meta/0000_snapshot.json +336 -0
  19. package/migrations/meta/_journal.json +13 -0
  20. package/package.json +54 -44
  21. package/dist/actions.d.ts.map +0 -1
  22. package/dist/client.d.ts +0 -138
  23. package/dist/client.d.ts.map +0 -1
  24. package/dist/client.js +0 -62
  25. package/dist/client.js.map +0 -1
  26. package/dist/cms.config.d.ts +0 -77
  27. package/dist/cms.config.d.ts.map +0 -1
  28. package/dist/cms.config.js +0 -111
  29. package/dist/cms.config.js.map +0 -1
  30. package/dist/entities/cms-audit-logs.d.ts +0 -213
  31. package/dist/entities/cms-audit-logs.d.ts.map +0 -1
  32. package/dist/entities/cms-audit-logs.js +0 -103
  33. package/dist/entities/cms-audit-logs.js.map +0 -1
  34. package/dist/entities/cms-draft-cache.d.ts +0 -188
  35. package/dist/entities/cms-draft-cache.d.ts.map +0 -1
  36. package/dist/entities/cms-draft-cache.js +0 -112
  37. package/dist/entities/cms-draft-cache.js.map +0 -1
  38. package/dist/entities/cms-label-values.d.ts +0 -192
  39. package/dist/entities/cms-label-values.d.ts.map +0 -1
  40. package/dist/entities/cms-label-values.js +0 -105
  41. package/dist/entities/cms-label-values.js.map +0 -1
  42. package/dist/entities/cms-label-versions.d.ts +0 -207
  43. package/dist/entities/cms-label-versions.d.ts.map +0 -1
  44. package/dist/entities/cms-label-versions.js +0 -80
  45. package/dist/entities/cms-label-versions.js.map +0 -1
  46. package/dist/entities/cms-labels.d.ts +0 -189
  47. package/dist/entities/cms-labels.d.ts.map +0 -1
  48. package/dist/entities/cms-labels.js +0 -48
  49. package/dist/entities/cms-labels.js.map +0 -1
  50. package/dist/entities/cms-published-cache.d.ts +0 -199
  51. package/dist/entities/cms-published-cache.d.ts.map +0 -1
  52. package/dist/entities/cms-published-cache.js +0 -103
  53. package/dist/entities/cms-published-cache.js.map +0 -1
  54. package/dist/entities/index.d.ts +0 -10
  55. package/dist/entities/index.d.ts.map +0 -1
  56. package/dist/entities/index.js +0 -10
  57. package/dist/entities/index.js.map +0 -1
  58. package/dist/generators/index.d.ts +0 -19
  59. package/dist/generators/index.d.ts.map +0 -1
  60. package/dist/generators/index.js +0 -19
  61. package/dist/generators/index.js.map +0 -1
  62. package/dist/generators/label-sync-generator.d.ts +0 -33
  63. package/dist/generators/label-sync-generator.d.ts.map +0 -1
  64. package/dist/generators/label-sync-generator.js +0 -86
  65. package/dist/generators/label-sync-generator.js.map +0 -1
  66. package/dist/helpers/locale.actions.d.ts +0 -132
  67. package/dist/helpers/locale.actions.d.ts.map +0 -1
  68. package/dist/helpers/locale.actions.js +0 -210
  69. package/dist/helpers/locale.actions.js.map +0 -1
  70. package/dist/helpers/locale.constants.d.ts +0 -10
  71. package/dist/helpers/locale.constants.d.ts.map +0 -1
  72. package/dist/helpers/locale.constants.js +0 -10
  73. package/dist/helpers/locale.constants.js.map +0 -1
  74. package/dist/helpers/locale.d.ts +0 -17
  75. package/dist/helpers/locale.d.ts.map +0 -1
  76. package/dist/helpers/locale.js +0 -20
  77. package/dist/helpers/locale.js.map +0 -1
  78. package/dist/helpers/sync.d.ts +0 -41
  79. package/dist/helpers/sync.d.ts.map +0 -1
  80. package/dist/helpers/sync.js +0 -309
  81. package/dist/helpers/sync.js.map +0 -1
  82. package/dist/index.d.ts.map +0 -1
  83. package/dist/init.d.ts +0 -31
  84. package/dist/init.d.ts.map +0 -1
  85. package/dist/init.js +0 -36
  86. package/dist/init.js.map +0 -1
  87. package/dist/labels/helpers.d.ts +0 -31
  88. package/dist/labels/helpers.d.ts.map +0 -1
  89. package/dist/labels/helpers.js +0 -60
  90. package/dist/labels/helpers.js.map +0 -1
  91. package/dist/labels/index.d.ts +0 -7
  92. package/dist/labels/index.d.ts.map +0 -1
  93. package/dist/labels/index.js +0 -7
  94. package/dist/labels/index.js.map +0 -1
  95. package/dist/repositories/cms-draft-cache.repository.d.ts +0 -62
  96. package/dist/repositories/cms-draft-cache.repository.d.ts.map +0 -1
  97. package/dist/repositories/cms-draft-cache.repository.js +0 -56
  98. package/dist/repositories/cms-draft-cache.repository.js.map +0 -1
  99. package/dist/repositories/cms-label-values.repository.d.ts +0 -32
  100. package/dist/repositories/cms-label-values.repository.d.ts.map +0 -1
  101. package/dist/repositories/cms-label-values.repository.js +0 -72
  102. package/dist/repositories/cms-label-values.repository.js.map +0 -1
  103. package/dist/repositories/cms-labels.repository.d.ts +0 -53
  104. package/dist/repositories/cms-labels.repository.d.ts.map +0 -1
  105. package/dist/repositories/cms-labels.repository.js +0 -77
  106. package/dist/repositories/cms-labels.repository.js.map +0 -1
  107. package/dist/repositories/cms-published-cache.repository.d.ts +0 -53
  108. package/dist/repositories/cms-published-cache.repository.d.ts.map +0 -1
  109. package/dist/repositories/cms-published-cache.repository.js +0 -54
  110. package/dist/repositories/cms-published-cache.repository.js.map +0 -1
  111. package/dist/repositories/index.d.ts +0 -8
  112. package/dist/repositories/index.d.ts.map +0 -1
  113. package/dist/repositories/index.js +0 -9
  114. package/dist/repositories/index.js.map +0 -1
  115. package/dist/routes/labels/[id]/contract.d.ts +0 -68
  116. package/dist/routes/labels/[id]/contract.d.ts.map +0 -1
  117. package/dist/routes/labels/[id]/contract.js +0 -84
  118. package/dist/routes/labels/[id]/contract.js.map +0 -1
  119. package/dist/routes/labels/[id]/index.d.ts +0 -10
  120. package/dist/routes/labels/[id]/index.d.ts.map +0 -1
  121. package/dist/routes/labels/[id]/index.js +0 -96
  122. package/dist/routes/labels/[id]/index.js.map +0 -1
  123. package/dist/routes/labels/by-key/[key]/contract.d.ts +0 -24
  124. package/dist/routes/labels/by-key/[key]/contract.d.ts.map +0 -1
  125. package/dist/routes/labels/by-key/[key]/contract.js +0 -28
  126. package/dist/routes/labels/by-key/[key]/contract.js.map +0 -1
  127. package/dist/routes/labels/by-key/[key]/index.d.ts +0 -8
  128. package/dist/routes/labels/by-key/[key]/index.d.ts.map +0 -1
  129. package/dist/routes/labels/by-key/[key]/index.js +0 -32
  130. package/dist/routes/labels/by-key/[key]/index.js.map +0 -1
  131. package/dist/routes/labels/contract.d.ts +0 -59
  132. package/dist/routes/labels/contract.d.ts.map +0 -1
  133. package/dist/routes/labels/contract.js +0 -75
  134. package/dist/routes/labels/contract.js.map +0 -1
  135. package/dist/routes/labels/index.d.ts +0 -10
  136. package/dist/routes/labels/index.d.ts.map +0 -1
  137. package/dist/routes/labels/index.js +0 -73
  138. package/dist/routes/labels/index.js.map +0 -1
  139. package/dist/routes/published-cache/contract.d.ts +0 -25
  140. package/dist/routes/published-cache/contract.d.ts.map +0 -1
  141. package/dist/routes/published-cache/contract.js +0 -35
  142. package/dist/routes/published-cache/contract.js.map +0 -1
  143. package/dist/routes/published-cache/index.d.ts +0 -8
  144. package/dist/routes/published-cache/index.d.ts.map +0 -1
  145. package/dist/routes/published-cache/index.js +0 -33
  146. package/dist/routes/published-cache/index.js.map +0 -1
  147. package/dist/routes/values/[labelId]/[version]/contract.d.ts +0 -29
  148. package/dist/routes/values/[labelId]/[version]/contract.d.ts.map +0 -1
  149. package/dist/routes/values/[labelId]/[version]/contract.js +0 -33
  150. package/dist/routes/values/[labelId]/[version]/contract.js.map +0 -1
  151. package/dist/routes/values/[labelId]/[version]/index.d.ts +0 -8
  152. package/dist/routes/values/[labelId]/[version]/index.d.ts.map +0 -1
  153. package/dist/routes/values/[labelId]/[version]/index.js +0 -45
  154. package/dist/routes/values/[labelId]/[version]/index.js.map +0 -1
  155. package/dist/routes/values/[labelId]/contract.d.ts +0 -38
  156. package/dist/routes/values/[labelId]/contract.d.ts.map +0 -1
  157. package/dist/routes/values/[labelId]/contract.js +0 -59
  158. package/dist/routes/values/[labelId]/contract.js.map +0 -1
  159. package/dist/routes/values/[labelId]/index.d.ts +0 -8
  160. package/dist/routes/values/[labelId]/index.d.ts.map +0 -1
  161. package/dist/routes/values/[labelId]/index.js +0 -42
  162. package/dist/routes/values/[labelId]/index.js.map +0 -1
  163. package/dist/server.d.ts.map +0 -1
  164. package/dist/store.d.ts +0 -87
  165. package/dist/store.d.ts.map +0 -1
  166. package/dist/store.js +0 -205
  167. package/dist/store.js.map +0 -1
  168. package/dist/types.d.ts +0 -74
  169. package/dist/types.d.ts.map +0 -1
  170. package/dist/types.js +0 -7
  171. package/dist/types.js.map +0 -1
@@ -1,192 +0,0 @@
1
- /**
2
- * CMS Label Values Entity
3
- *
4
- * 라벨의 실제 값을 저장합니다.
5
- * - 다국어 지원 (locale)
6
- * - 반응형 지원 (breakpoint)
7
- * - 버전 관리 (version)
8
- * - JSONB로 유연한 값 저장
9
- */
10
- export declare const cmsLabelValues: import("drizzle-orm/pg-core").PgTableWithColumns<{
11
- name: "label_values";
12
- schema: string;
13
- columns: {
14
- id: import("drizzle-orm/pg-core").PgColumn<{
15
- name: "id";
16
- tableName: "label_values";
17
- dataType: "number";
18
- columnType: "PgSerial";
19
- data: number;
20
- driverParam: number;
21
- notNull: true;
22
- hasDefault: true;
23
- isPrimaryKey: true;
24
- isAutoincrement: false;
25
- hasRuntimeDefault: false;
26
- enumValues: undefined;
27
- baseColumn: never;
28
- identity: undefined;
29
- generated: undefined;
30
- }, {}, {}>;
31
- labelId: import("drizzle-orm/pg-core").PgColumn<{
32
- name: "label_id";
33
- tableName: "label_values";
34
- dataType: "number";
35
- columnType: "PgInteger";
36
- data: number;
37
- driverParam: string | number;
38
- notNull: true;
39
- hasDefault: false;
40
- isPrimaryKey: false;
41
- isAutoincrement: false;
42
- hasRuntimeDefault: false;
43
- enumValues: undefined;
44
- baseColumn: never;
45
- identity: undefined;
46
- generated: undefined;
47
- }, {}, {}>;
48
- version: import("drizzle-orm/pg-core").PgColumn<{
49
- name: "version";
50
- tableName: "label_values";
51
- dataType: "number";
52
- columnType: "PgInteger";
53
- data: number;
54
- driverParam: string | number;
55
- notNull: true;
56
- hasDefault: true;
57
- isPrimaryKey: false;
58
- isAutoincrement: false;
59
- hasRuntimeDefault: false;
60
- enumValues: undefined;
61
- baseColumn: never;
62
- identity: undefined;
63
- generated: undefined;
64
- }, {}, {}>;
65
- locale: import("drizzle-orm/pg-core").PgColumn<{
66
- name: "locale";
67
- tableName: "label_values";
68
- dataType: "string";
69
- columnType: "PgText";
70
- data: string;
71
- driverParam: string;
72
- notNull: true;
73
- hasDefault: true;
74
- isPrimaryKey: false;
75
- isAutoincrement: false;
76
- hasRuntimeDefault: false;
77
- enumValues: [string, ...string[]];
78
- baseColumn: never;
79
- identity: undefined;
80
- generated: undefined;
81
- }, {}, {}>;
82
- breakpoint: import("drizzle-orm/pg-core").PgColumn<{
83
- name: "breakpoint";
84
- tableName: "label_values";
85
- dataType: "string";
86
- columnType: "PgText";
87
- data: string;
88
- driverParam: string;
89
- notNull: false;
90
- hasDefault: false;
91
- isPrimaryKey: false;
92
- isAutoincrement: false;
93
- hasRuntimeDefault: false;
94
- enumValues: [string, ...string[]];
95
- baseColumn: never;
96
- identity: undefined;
97
- generated: undefined;
98
- }, {}, {}>;
99
- value: import("drizzle-orm/pg-core").PgColumn<{
100
- name: "value";
101
- tableName: "label_values";
102
- dataType: "json";
103
- columnType: "PgJsonb";
104
- data: unknown;
105
- driverParam: unknown;
106
- notNull: true;
107
- hasDefault: false;
108
- isPrimaryKey: false;
109
- isAutoincrement: false;
110
- hasRuntimeDefault: false;
111
- enumValues: undefined;
112
- baseColumn: never;
113
- identity: undefined;
114
- generated: undefined;
115
- }, {}, {}>;
116
- createdAt: import("drizzle-orm/pg-core").PgColumn<{
117
- name: "created_at";
118
- tableName: "label_values";
119
- dataType: "date";
120
- columnType: "PgTimestamp";
121
- data: Date;
122
- driverParam: string;
123
- notNull: true;
124
- hasDefault: true;
125
- isPrimaryKey: false;
126
- isAutoincrement: false;
127
- hasRuntimeDefault: false;
128
- enumValues: undefined;
129
- baseColumn: never;
130
- identity: undefined;
131
- generated: undefined;
132
- }, {}, {}>;
133
- };
134
- dialect: "pg";
135
- }>;
136
- export type CmsLabelValue = typeof cmsLabelValues.$inferSelect;
137
- export type NewCmsLabelValue = typeof cmsLabelValues.$inferInsert;
138
- /**
139
- * 사용 예시:
140
- *
141
- * // 텍스트 값 저장
142
- * await db.insert(cmsLabelValues).values({
143
- * labelId: 1,
144
- * version: 1,
145
- * locale: 'ko',
146
- * breakpoint: null,
147
- * value: {
148
- * type: 'text',
149
- * content: '미래를 만드는 기업'
150
- * }
151
- * });
152
- *
153
- * // 반응형 이미지 저장 (모바일용)
154
- * await db.insert(cmsLabelValues).values({
155
- * labelId: 2,
156
- * version: 1,
157
- * locale: 'ko',
158
- * breakpoint: 'sm',
159
- * value: {
160
- * type: 'image',
161
- * url: '/uploads/hero-mobile.jpg',
162
- * alt: 'Hero Image',
163
- * width: 640,
164
- * height: 480
165
- * }
166
- * });
167
- *
168
- * // 특정 버전의 한국어 값 조회
169
- * const values = await db.select()
170
- * .from(cmsLabelValues)
171
- * .where(and(
172
- * eq(cmsLabelValues.labelId, 1),
173
- * eq(cmsLabelValues.version, 2),
174
- * eq(cmsLabelValues.locale, 'ko')
175
- * ));
176
- *
177
- * // Object 타입 값 저장 (재귀 구조)
178
- * await db.insert(cmsLabelValues).values({
179
- * labelId: 3,
180
- * version: 1,
181
- * locale: 'ko',
182
- * value: {
183
- * type: 'object',
184
- * fields: {
185
- * title: { type: 'text', content: '특징 1' },
186
- * icon: { type: 'image', url: '/icons/feature1.svg', alt: 'Icon' },
187
- * description: { type: 'text', content: '상세 설명...' }
188
- * }
189
- * }
190
- * });
191
- */
192
- //# sourceMappingURL=cms-label-values.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-label-values.d.ts","sourceRoot":"","sources":["../../src/entities/cms-label-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CzB,CAAC;AAGH,MAAM,MAAM,aAAa,GAAG,OAAO,cAAc,CAAC,YAAY,CAAC;AAC/D,MAAM,MAAM,gBAAgB,GAAG,OAAO,cAAc,CAAC,YAAY,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG"}
@@ -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"}