@spfn/cms 0.1.0-alpha.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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +490 -0
  3. package/dist/actions.d.ts +9 -0
  4. package/dist/actions.d.ts.map +1 -0
  5. package/dist/actions.js +11 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/client.d.ts +138 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +62 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/cms.config.d.ts +77 -0
  12. package/dist/cms.config.d.ts.map +1 -0
  13. package/dist/cms.config.js +111 -0
  14. package/dist/cms.config.js.map +1 -0
  15. package/dist/entities/cms-audit-logs.d.ts +213 -0
  16. package/dist/entities/cms-audit-logs.d.ts.map +1 -0
  17. package/dist/entities/cms-audit-logs.js +103 -0
  18. package/dist/entities/cms-audit-logs.js.map +1 -0
  19. package/dist/entities/cms-draft-cache.d.ts +188 -0
  20. package/dist/entities/cms-draft-cache.d.ts.map +1 -0
  21. package/dist/entities/cms-draft-cache.js +112 -0
  22. package/dist/entities/cms-draft-cache.js.map +1 -0
  23. package/dist/entities/cms-label-values.d.ts +192 -0
  24. package/dist/entities/cms-label-values.d.ts.map +1 -0
  25. package/dist/entities/cms-label-values.js +105 -0
  26. package/dist/entities/cms-label-values.js.map +1 -0
  27. package/dist/entities/cms-label-versions.d.ts +207 -0
  28. package/dist/entities/cms-label-versions.d.ts.map +1 -0
  29. package/dist/entities/cms-label-versions.js +80 -0
  30. package/dist/entities/cms-label-versions.js.map +1 -0
  31. package/dist/entities/cms-labels.d.ts +189 -0
  32. package/dist/entities/cms-labels.d.ts.map +1 -0
  33. package/dist/entities/cms-labels.js +48 -0
  34. package/dist/entities/cms-labels.js.map +1 -0
  35. package/dist/entities/cms-published-cache.d.ts +199 -0
  36. package/dist/entities/cms-published-cache.d.ts.map +1 -0
  37. package/dist/entities/cms-published-cache.js +103 -0
  38. package/dist/entities/cms-published-cache.js.map +1 -0
  39. package/dist/entities/index.d.ts +10 -0
  40. package/dist/entities/index.d.ts.map +1 -0
  41. package/dist/entities/index.js +10 -0
  42. package/dist/entities/index.js.map +1 -0
  43. package/dist/generators/index.d.ts +19 -0
  44. package/dist/generators/index.d.ts.map +1 -0
  45. package/dist/generators/index.js +19 -0
  46. package/dist/generators/index.js.map +1 -0
  47. package/dist/generators/label-sync-generator.d.ts +33 -0
  48. package/dist/generators/label-sync-generator.d.ts.map +1 -0
  49. package/dist/generators/label-sync-generator.js +86 -0
  50. package/dist/generators/label-sync-generator.js.map +1 -0
  51. package/dist/helpers/locale.actions.d.ts +132 -0
  52. package/dist/helpers/locale.actions.d.ts.map +1 -0
  53. package/dist/helpers/locale.actions.js +210 -0
  54. package/dist/helpers/locale.actions.js.map +1 -0
  55. package/dist/helpers/locale.constants.d.ts +10 -0
  56. package/dist/helpers/locale.constants.d.ts.map +1 -0
  57. package/dist/helpers/locale.constants.js +10 -0
  58. package/dist/helpers/locale.constants.js.map +1 -0
  59. package/dist/helpers/locale.d.ts +17 -0
  60. package/dist/helpers/locale.d.ts.map +1 -0
  61. package/dist/helpers/locale.js +20 -0
  62. package/dist/helpers/locale.js.map +1 -0
  63. package/dist/helpers/sync.d.ts +41 -0
  64. package/dist/helpers/sync.d.ts.map +1 -0
  65. package/dist/helpers/sync.js +309 -0
  66. package/dist/helpers/sync.js.map +1 -0
  67. package/dist/index.d.ts +20 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +24 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/init.d.ts +31 -0
  72. package/dist/init.d.ts.map +1 -0
  73. package/dist/init.js +36 -0
  74. package/dist/init.js.map +1 -0
  75. package/dist/labels/helpers.d.ts +31 -0
  76. package/dist/labels/helpers.d.ts.map +1 -0
  77. package/dist/labels/helpers.js +60 -0
  78. package/dist/labels/helpers.js.map +1 -0
  79. package/dist/labels/index.d.ts +7 -0
  80. package/dist/labels/index.d.ts.map +1 -0
  81. package/dist/labels/index.js +7 -0
  82. package/dist/labels/index.js.map +1 -0
  83. package/dist/repositories/cms-draft-cache.repository.d.ts +62 -0
  84. package/dist/repositories/cms-draft-cache.repository.d.ts.map +1 -0
  85. package/dist/repositories/cms-draft-cache.repository.js +56 -0
  86. package/dist/repositories/cms-draft-cache.repository.js.map +1 -0
  87. package/dist/repositories/cms-label-values.repository.d.ts +32 -0
  88. package/dist/repositories/cms-label-values.repository.d.ts.map +1 -0
  89. package/dist/repositories/cms-label-values.repository.js +72 -0
  90. package/dist/repositories/cms-label-values.repository.js.map +1 -0
  91. package/dist/repositories/cms-labels.repository.d.ts +53 -0
  92. package/dist/repositories/cms-labels.repository.d.ts.map +1 -0
  93. package/dist/repositories/cms-labels.repository.js +77 -0
  94. package/dist/repositories/cms-labels.repository.js.map +1 -0
  95. package/dist/repositories/cms-published-cache.repository.d.ts +53 -0
  96. package/dist/repositories/cms-published-cache.repository.d.ts.map +1 -0
  97. package/dist/repositories/cms-published-cache.repository.js +54 -0
  98. package/dist/repositories/cms-published-cache.repository.js.map +1 -0
  99. package/dist/repositories/index.d.ts +8 -0
  100. package/dist/repositories/index.d.ts.map +1 -0
  101. package/dist/repositories/index.js +9 -0
  102. package/dist/repositories/index.js.map +1 -0
  103. package/dist/routes/labels/[id]/contract.d.ts +68 -0
  104. package/dist/routes/labels/[id]/contract.d.ts.map +1 -0
  105. package/dist/routes/labels/[id]/contract.js +84 -0
  106. package/dist/routes/labels/[id]/contract.js.map +1 -0
  107. package/dist/routes/labels/[id]/index.d.ts +10 -0
  108. package/dist/routes/labels/[id]/index.d.ts.map +1 -0
  109. package/dist/routes/labels/[id]/index.js +96 -0
  110. package/dist/routes/labels/[id]/index.js.map +1 -0
  111. package/dist/routes/labels/by-key/[key]/contract.d.ts +24 -0
  112. package/dist/routes/labels/by-key/[key]/contract.d.ts.map +1 -0
  113. package/dist/routes/labels/by-key/[key]/contract.js +28 -0
  114. package/dist/routes/labels/by-key/[key]/contract.js.map +1 -0
  115. package/dist/routes/labels/by-key/[key]/index.d.ts +8 -0
  116. package/dist/routes/labels/by-key/[key]/index.d.ts.map +1 -0
  117. package/dist/routes/labels/by-key/[key]/index.js +32 -0
  118. package/dist/routes/labels/by-key/[key]/index.js.map +1 -0
  119. package/dist/routes/labels/contract.d.ts +59 -0
  120. package/dist/routes/labels/contract.d.ts.map +1 -0
  121. package/dist/routes/labels/contract.js +75 -0
  122. package/dist/routes/labels/contract.js.map +1 -0
  123. package/dist/routes/labels/index.d.ts +10 -0
  124. package/dist/routes/labels/index.d.ts.map +1 -0
  125. package/dist/routes/labels/index.js +73 -0
  126. package/dist/routes/labels/index.js.map +1 -0
  127. package/dist/routes/published-cache/contract.d.ts +25 -0
  128. package/dist/routes/published-cache/contract.d.ts.map +1 -0
  129. package/dist/routes/published-cache/contract.js +35 -0
  130. package/dist/routes/published-cache/contract.js.map +1 -0
  131. package/dist/routes/published-cache/index.d.ts +8 -0
  132. package/dist/routes/published-cache/index.d.ts.map +1 -0
  133. package/dist/routes/published-cache/index.js +33 -0
  134. package/dist/routes/published-cache/index.js.map +1 -0
  135. package/dist/routes/sync/contract.d.ts +33 -0
  136. package/dist/routes/sync/contract.d.ts.map +1 -0
  137. package/dist/routes/sync/contract.js +34 -0
  138. package/dist/routes/sync/contract.js.map +1 -0
  139. package/dist/routes/sync/index.d.ts +13 -0
  140. package/dist/routes/sync/index.d.ts.map +1 -0
  141. package/dist/routes/sync/index.js +241 -0
  142. package/dist/routes/sync/index.js.map +1 -0
  143. package/dist/routes/values/[labelId]/[version]/contract.d.ts +29 -0
  144. package/dist/routes/values/[labelId]/[version]/contract.d.ts.map +1 -0
  145. package/dist/routes/values/[labelId]/[version]/contract.js +33 -0
  146. package/dist/routes/values/[labelId]/[version]/contract.js.map +1 -0
  147. package/dist/routes/values/[labelId]/[version]/index.d.ts +8 -0
  148. package/dist/routes/values/[labelId]/[version]/index.d.ts.map +1 -0
  149. package/dist/routes/values/[labelId]/[version]/index.js +45 -0
  150. package/dist/routes/values/[labelId]/[version]/index.js.map +1 -0
  151. package/dist/routes/values/[labelId]/contract.d.ts +38 -0
  152. package/dist/routes/values/[labelId]/contract.d.ts.map +1 -0
  153. package/dist/routes/values/[labelId]/contract.js +59 -0
  154. package/dist/routes/values/[labelId]/contract.js.map +1 -0
  155. package/dist/routes/values/[labelId]/index.d.ts +8 -0
  156. package/dist/routes/values/[labelId]/index.d.ts.map +1 -0
  157. package/dist/routes/values/[labelId]/index.js +42 -0
  158. package/dist/routes/values/[labelId]/index.js.map +1 -0
  159. package/dist/server.d.ts +99 -0
  160. package/dist/server.d.ts.map +1 -0
  161. package/dist/server.js +256 -0
  162. package/dist/server.js.map +1 -0
  163. package/dist/store.d.ts +87 -0
  164. package/dist/store.d.ts.map +1 -0
  165. package/dist/store.js +205 -0
  166. package/dist/store.js.map +1 -0
  167. package/dist/sync.d.ts +11 -0
  168. package/dist/sync.d.ts.map +1 -0
  169. package/dist/sync.js +179 -0
  170. package/dist/sync.js.map +1 -0
  171. package/dist/types.d.ts +74 -0
  172. package/dist/types.d.ts.map +1 -0
  173. package/dist/types.js +7 -0
  174. package/dist/types.js.map +1 -0
  175. package/package.json +95 -0
@@ -0,0 +1,207 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,80 @@
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';
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
@@ -0,0 +1 @@
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,cAAc,CAAC;AAEzC,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"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * CMS Labels Entity
3
+ *
4
+ * 라벨의 메타데이터와 현재 발행 상태를 관리합니다.
5
+ * - 라벨 식별 (id, key)
6
+ * - 섹션 분류 (section)
7
+ * - 타입 정의 (type)
8
+ * - 발행 상태 (publishedVersion)
9
+ */
10
+ export declare const cmsLabels: import("drizzle-orm/pg-core").PgTableWithColumns<{
11
+ name: "labels";
12
+ schema: string;
13
+ columns: {
14
+ id: import("drizzle-orm/pg-core").PgColumn<{
15
+ name: "id";
16
+ tableName: "labels";
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
+ key: import("drizzle-orm/pg-core").PgColumn<{
32
+ name: "key";
33
+ tableName: "labels";
34
+ dataType: "string";
35
+ columnType: "PgText";
36
+ data: string;
37
+ driverParam: string;
38
+ notNull: true;
39
+ hasDefault: false;
40
+ isPrimaryKey: false;
41
+ isAutoincrement: false;
42
+ hasRuntimeDefault: false;
43
+ enumValues: [string, ...string[]];
44
+ baseColumn: never;
45
+ identity: undefined;
46
+ generated: undefined;
47
+ }, {}, {}>;
48
+ section: import("drizzle-orm/pg-core").PgColumn<{
49
+ name: "section";
50
+ tableName: "labels";
51
+ dataType: "string";
52
+ columnType: "PgText";
53
+ data: string;
54
+ driverParam: string;
55
+ notNull: true;
56
+ hasDefault: false;
57
+ isPrimaryKey: false;
58
+ isAutoincrement: false;
59
+ hasRuntimeDefault: false;
60
+ enumValues: [string, ...string[]];
61
+ baseColumn: never;
62
+ identity: undefined;
63
+ generated: undefined;
64
+ }, {}, {}>;
65
+ type: import("drizzle-orm/pg-core").PgColumn<{
66
+ name: "type";
67
+ tableName: "labels";
68
+ dataType: "string";
69
+ columnType: "PgText";
70
+ data: string;
71
+ driverParam: string;
72
+ notNull: true;
73
+ hasDefault: false;
74
+ isPrimaryKey: false;
75
+ isAutoincrement: false;
76
+ hasRuntimeDefault: false;
77
+ enumValues: [string, ...string[]];
78
+ baseColumn: never;
79
+ identity: undefined;
80
+ generated: undefined;
81
+ }, {}, {}>;
82
+ defaultValue: import("drizzle-orm/pg-core").PgColumn<{
83
+ name: "default_value";
84
+ tableName: "labels";
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
+ description: import("drizzle-orm/pg-core").PgColumn<{
100
+ name: "description";
101
+ tableName: "labels";
102
+ dataType: "string";
103
+ columnType: "PgText";
104
+ data: string;
105
+ driverParam: string;
106
+ notNull: false;
107
+ hasDefault: false;
108
+ isPrimaryKey: false;
109
+ isAutoincrement: false;
110
+ hasRuntimeDefault: false;
111
+ enumValues: [string, ...string[]];
112
+ baseColumn: never;
113
+ identity: undefined;
114
+ generated: undefined;
115
+ }, {}, {}>;
116
+ publishedVersion: import("drizzle-orm/pg-core").PgColumn<{
117
+ name: "published_version";
118
+ tableName: "labels";
119
+ dataType: "number";
120
+ columnType: "PgInteger";
121
+ data: number;
122
+ driverParam: string | number;
123
+ notNull: false;
124
+ hasDefault: false;
125
+ isPrimaryKey: false;
126
+ isAutoincrement: false;
127
+ hasRuntimeDefault: false;
128
+ enumValues: undefined;
129
+ baseColumn: never;
130
+ identity: undefined;
131
+ generated: undefined;
132
+ }, {}, {}>;
133
+ createdBy: import("drizzle-orm/pg-core").PgColumn<{
134
+ name: "created_by";
135
+ tableName: "labels";
136
+ dataType: "string";
137
+ columnType: "PgText";
138
+ data: string;
139
+ driverParam: string;
140
+ notNull: false;
141
+ hasDefault: false;
142
+ isPrimaryKey: false;
143
+ isAutoincrement: false;
144
+ hasRuntimeDefault: false;
145
+ enumValues: [string, ...string[]];
146
+ baseColumn: never;
147
+ identity: undefined;
148
+ generated: undefined;
149
+ }, {}, {}>;
150
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
151
+ name: "created_at";
152
+ tableName: "labels";
153
+ dataType: "date";
154
+ columnType: "PgTimestamp";
155
+ data: Date;
156
+ driverParam: string;
157
+ notNull: true;
158
+ hasDefault: true;
159
+ isPrimaryKey: false;
160
+ isAutoincrement: false;
161
+ hasRuntimeDefault: false;
162
+ enumValues: undefined;
163
+ baseColumn: never;
164
+ identity: undefined;
165
+ generated: undefined;
166
+ }, {}, {}>;
167
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
168
+ name: "updated_at";
169
+ tableName: "labels";
170
+ dataType: "date";
171
+ columnType: "PgTimestamp";
172
+ data: Date;
173
+ driverParam: string;
174
+ notNull: true;
175
+ hasDefault: true;
176
+ isPrimaryKey: false;
177
+ isAutoincrement: false;
178
+ hasRuntimeDefault: false;
179
+ enumValues: undefined;
180
+ baseColumn: never;
181
+ identity: undefined;
182
+ generated: undefined;
183
+ }, {}, {}>;
184
+ };
185
+ dialect: "pg";
186
+ }>;
187
+ export type CmsLabel = typeof cmsLabels.$inferSelect;
188
+ export type NewCmsLabel = typeof cmsLabels.$inferInsert;
189
+ //# sourceMappingURL=cms-labels.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,48 @@
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
@@ -0,0 +1 @@
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"}