@spfn/cms 0.1.0-alpha.76 → 0.1.0-alpha.78

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 (38) hide show
  1. package/dist/api.d.ts +2 -2
  2. package/dist/client.d.ts +0 -1
  3. package/dist/index.d.ts +0 -1
  4. package/dist/server/entities/index.d.ts +0 -1
  5. package/dist/server/entities/index.js +36 -69
  6. package/dist/server/entities/index.js.map +1 -1
  7. package/dist/server/generators/index.js +38 -70
  8. package/dist/server/generators/index.js.map +1 -1
  9. package/dist/server/repositories/index.js +36 -68
  10. package/dist/server/repositories/index.js.map +1 -1
  11. package/dist/server/routes/labels/[id]/index.js +36 -68
  12. package/dist/server/routes/labels/[id]/index.js.map +1 -1
  13. package/dist/server/routes/labels/[labelId]/admin/index.js +36 -68
  14. package/dist/server/routes/labels/[labelId]/admin/index.js.map +1 -1
  15. package/dist/server/routes/labels/[labelId]/publish/index.js +36 -68
  16. package/dist/server/routes/labels/[labelId]/publish/index.js.map +1 -1
  17. package/dist/server/routes/labels/[labelId]/versions/index.js +58 -164
  18. package/dist/server/routes/labels/[labelId]/versions/index.js.map +1 -1
  19. package/dist/server/routes/labels/by-key/[key]/index.js +36 -68
  20. package/dist/server/routes/labels/by-key/[key]/index.js.map +1 -1
  21. package/dist/server/routes/labels/index.js +36 -68
  22. package/dist/server/routes/labels/index.js.map +1 -1
  23. package/dist/server/routes/published-cache/index.js +36 -68
  24. package/dist/server/routes/published-cache/index.js.map +1 -1
  25. package/dist/server/routes/values/[labelId]/[version]/index.js +36 -68
  26. package/dist/server/routes/values/[labelId]/[version]/index.js.map +1 -1
  27. package/dist/server/routes/values/[labelId]/index.js +36 -68
  28. package/dist/server/routes/values/[labelId]/index.js.map +1 -1
  29. package/dist/server.d.ts +0 -1
  30. package/dist/server.js +46 -73
  31. package/dist/server.js.map +1 -1
  32. package/migrations/0003_rare_runaways.sql +1 -0
  33. package/migrations/meta/0003_snapshot.json +563 -0
  34. package/migrations/meta/_journal.json +7 -0
  35. package/package.json +1 -1
  36. package/dist/server/entities/cms-label-versions.d.ts +0 -174
  37. package/dist/server/entities/cms-label-versions.js +0 -76
  38. package/dist/server/entities/cms-label-versions.js.map +0 -1
@@ -1,174 +0,0 @@
1
- import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
2
-
3
- /**
4
- * CMS Label Versions Entity
5
- *
6
- * 라벨의 버전 메타데이터를 관리합니다.
7
- * - 버전별 상태 (draft/published/archived)
8
- * - 발행 정보 (publishedAt, publishedBy)
9
- * - 버전 노트
10
- */
11
- declare const cmsLabelVersions: drizzle_orm_pg_core.PgTableWithColumns<{
12
- name: "label_versions";
13
- schema: string;
14
- columns: {
15
- id: drizzle_orm_pg_core.PgColumn<{
16
- name: "id";
17
- tableName: "label_versions";
18
- dataType: "number";
19
- columnType: "PgSerial";
20
- data: number;
21
- driverParam: number;
22
- notNull: true;
23
- hasDefault: true;
24
- isPrimaryKey: true;
25
- isAutoincrement: false;
26
- hasRuntimeDefault: false;
27
- enumValues: undefined;
28
- baseColumn: never;
29
- identity: undefined;
30
- generated: undefined;
31
- }, {}, {}>;
32
- labelId: drizzle_orm_pg_core.PgColumn<{
33
- name: "label_id";
34
- tableName: "label_versions";
35
- dataType: "number";
36
- columnType: "PgInteger";
37
- data: number;
38
- driverParam: string | number;
39
- notNull: true;
40
- hasDefault: false;
41
- isPrimaryKey: false;
42
- isAutoincrement: false;
43
- hasRuntimeDefault: false;
44
- enumValues: undefined;
45
- baseColumn: never;
46
- identity: undefined;
47
- generated: undefined;
48
- }, {}, {}>;
49
- version: drizzle_orm_pg_core.PgColumn<{
50
- name: "version";
51
- tableName: "label_versions";
52
- dataType: "number";
53
- columnType: "PgInteger";
54
- data: number;
55
- driverParam: string | number;
56
- notNull: true;
57
- hasDefault: false;
58
- isPrimaryKey: false;
59
- isAutoincrement: false;
60
- hasRuntimeDefault: false;
61
- enumValues: undefined;
62
- baseColumn: never;
63
- identity: undefined;
64
- generated: undefined;
65
- }, {}, {}>;
66
- status: drizzle_orm_pg_core.PgColumn<{
67
- name: "status";
68
- tableName: "label_versions";
69
- dataType: "string";
70
- columnType: "PgText";
71
- data: string;
72
- driverParam: string;
73
- notNull: true;
74
- hasDefault: false;
75
- isPrimaryKey: false;
76
- isAutoincrement: false;
77
- hasRuntimeDefault: false;
78
- enumValues: [string, ...string[]];
79
- baseColumn: never;
80
- identity: undefined;
81
- generated: undefined;
82
- }, {}, {}>;
83
- publishedAt: drizzle_orm_pg_core.PgColumn<{
84
- name: "published_at";
85
- tableName: "label_versions";
86
- dataType: "date";
87
- columnType: "PgTimestamp";
88
- data: Date;
89
- driverParam: string;
90
- notNull: false;
91
- hasDefault: false;
92
- isPrimaryKey: false;
93
- isAutoincrement: false;
94
- hasRuntimeDefault: false;
95
- enumValues: undefined;
96
- baseColumn: never;
97
- identity: undefined;
98
- generated: undefined;
99
- }, {}, {}>;
100
- publishedBy: drizzle_orm_pg_core.PgColumn<{
101
- name: "published_by";
102
- tableName: "label_versions";
103
- dataType: "string";
104
- columnType: "PgText";
105
- data: string;
106
- driverParam: string;
107
- notNull: false;
108
- hasDefault: false;
109
- isPrimaryKey: false;
110
- isAutoincrement: false;
111
- hasRuntimeDefault: false;
112
- enumValues: [string, ...string[]];
113
- baseColumn: never;
114
- identity: undefined;
115
- generated: undefined;
116
- }, {}, {}>;
117
- notes: drizzle_orm_pg_core.PgColumn<{
118
- name: "notes";
119
- tableName: "label_versions";
120
- dataType: "string";
121
- columnType: "PgText";
122
- data: string;
123
- driverParam: string;
124
- notNull: false;
125
- hasDefault: false;
126
- isPrimaryKey: false;
127
- isAutoincrement: false;
128
- hasRuntimeDefault: false;
129
- enumValues: [string, ...string[]];
130
- baseColumn: never;
131
- identity: undefined;
132
- generated: undefined;
133
- }, {}, {}>;
134
- createdBy: drizzle_orm_pg_core.PgColumn<{
135
- name: "created_by";
136
- tableName: "label_versions";
137
- dataType: "string";
138
- columnType: "PgText";
139
- data: string;
140
- driverParam: string;
141
- notNull: false;
142
- hasDefault: false;
143
- isPrimaryKey: false;
144
- isAutoincrement: false;
145
- hasRuntimeDefault: false;
146
- enumValues: [string, ...string[]];
147
- baseColumn: never;
148
- identity: undefined;
149
- generated: undefined;
150
- }, {}, {}>;
151
- createdAt: drizzle_orm_pg_core.PgColumn<{
152
- name: "created_at";
153
- tableName: "label_versions";
154
- dataType: "date";
155
- columnType: "PgTimestamp";
156
- data: Date;
157
- driverParam: string;
158
- notNull: true;
159
- hasDefault: true;
160
- isPrimaryKey: false;
161
- isAutoincrement: false;
162
- hasRuntimeDefault: false;
163
- enumValues: undefined;
164
- baseColumn: never;
165
- identity: undefined;
166
- generated: undefined;
167
- }, {}, {}>;
168
- };
169
- dialect: "pg";
170
- }>;
171
- type CmsLabelVersion = typeof cmsLabelVersions.$inferSelect;
172
- type NewCmsLabelVersion = typeof cmsLabelVersions.$inferInsert;
173
-
174
- export { type CmsLabelVersion, type NewCmsLabelVersion, cmsLabelVersions };
@@ -1,76 +0,0 @@
1
- // src/server/entities/cms-label-versions.ts
2
- import { serial as serial2, integer as integer2, text as text2, timestamp as timestamp2, index as index2, unique } from "drizzle-orm/pg-core";
3
- import { createFunctionSchema as createFunctionSchema2 } from "@spfn/core/db";
4
-
5
- // src/server/entities/cms-labels.ts
6
- import { index, integer, serial, text, timestamp } from "drizzle-orm/pg-core";
7
- import { createFunctionSchema } from "@spfn/core/db";
8
- var schema = createFunctionSchema("@spfn/cms");
9
- var cmsLabels = schema.table("labels", {
10
- // Primary Key
11
- id: serial("id").primaryKey(),
12
- // 라벨 식별자
13
- key: text("key").notNull().unique(),
14
- // 예: "home.hero.title", "why-futureplay.hero.subtitle"
15
- // 구조: {section}.{component}.{property}
16
- // 섹션 분류 (페이지 단위)
17
- section: text("section").notNull(),
18
- // 예: "home", "why-futureplay", "team"
19
- // 값 타입
20
- type: text("type").notNull(),
21
- // "text" | "image" | "video" | "file" | "object"
22
- // 기본값
23
- defaultValue: text("default_value"),
24
- // 라벨의 기본값 (sync 시 설정)
25
- // 설명
26
- description: text("description"),
27
- // 라벨에 대한 설명 (optional)
28
- // 현재 발행된 버전 번호
29
- publishedVersion: integer("published_version"),
30
- // null = 미발행 상태
31
- // 1, 2, 3... = 발행된 버전 번호
32
- // 생성자 추적
33
- createdBy: text("created_by"),
34
- // 타임스탬프
35
- createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
36
- updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
37
- }, (table) => [
38
- // 인덱스: 섹션별 조회 최적화
39
- index("cms_labels_section_idx").on(table.section),
40
- // 인덱스: key로 조회 최적화 (unique 제약으로 자동 생성되지만 명시)
41
- index("cms_labels_key_idx").on(table.key)
42
- ]);
43
-
44
- // src/server/entities/cms-label-versions.ts
45
- var schema2 = createFunctionSchema2("@spfn/cms");
46
- var cmsLabelVersions = schema2.table("label_versions", {
47
- // Primary Key
48
- id: serial2("id").primaryKey(),
49
- // Foreign Key: cms_labels
50
- labelId: integer2("label_id").notNull().references(() => cmsLabels.id, { onDelete: "cascade" }),
51
- // 버전 번호
52
- version: integer2("version").notNull(),
53
- // 버전 상태
54
- status: text2("status").notNull(),
55
- // "draft" | "published" | "archived"
56
- // 발행 정보
57
- publishedAt: timestamp2("published_at", { withTimezone: true }),
58
- publishedBy: text2("published_by"),
59
- // 버전 노트 (변경사항 설명)
60
- notes: text2("notes"),
61
- // 버전 생성자
62
- createdBy: text2("created_by"),
63
- // 생성 시각
64
- createdAt: timestamp2("created_at", { withTimezone: true }).notNull().defaultNow()
65
- }, (table) => [
66
- // UNIQUE 제약: 각 라벨의 버전 번호는 고유
67
- unique("cms_label_versions_label_version_unique").on(table.labelId, table.version),
68
- // 인덱스: labelId로 버전 목록 조회 최적화
69
- index2("cms_label_versions_label_id_idx").on(table.labelId),
70
- // 인덱스: status 필터링 최적화
71
- index2("cms_label_versions_status_idx").on(table.status)
72
- ]);
73
- export {
74
- cmsLabelVersions
75
- };
76
- //# sourceMappingURL=cms-label-versions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/server/entities/cms-label-versions.ts","../../../src/server/entities/cms-labels.ts"],"sourcesContent":["/**\n * CMS Label Versions Entity\n *\n * 라벨의 버전 메타데이터를 관리합니다.\n * - 버전별 상태 (draft/published/archived)\n * - 발행 정보 (publishedAt, publishedBy)\n * - 버전 노트\n */\n\nimport { serial, integer, text, timestamp, index, unique } from 'drizzle-orm/pg-core';\nimport { createFunctionSchema } from '@spfn/core/db';\nimport { cmsLabels } from '@/server/entities/cms-labels';\n\n// Create isolated schema for @spfn/cms\nconst schema = createFunctionSchema('@spfn/cms');\n\nexport const cmsLabelVersions = schema.table('label_versions', {\n // Primary Key\n id: serial('id').primaryKey(),\n\n // Foreign Key: cms_labels\n labelId: integer('label_id')\n .notNull()\n .references(() => cmsLabels.id, { onDelete: 'cascade' }),\n\n // 버전 번호\n version: integer('version').notNull(),\n\n // 버전 상태\n status: text('status').notNull(),\n // \"draft\" | \"published\" | \"archived\"\n\n // 발행 정보\n publishedAt: timestamp('published_at', { withTimezone: true }),\n publishedBy: text('published_by'),\n\n // 버전 노트 (변경사항 설명)\n notes: text('notes'),\n\n // 버전 생성자\n createdBy: text('created_by'),\n\n // 생성 시각\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n}, (table) => [\n // UNIQUE 제약: 각 라벨의 버전 번호는 고유\n unique('cms_label_versions_label_version_unique')\n .on(table.labelId, table.version),\n\n // 인덱스: labelId로 버전 목록 조회 최적화\n index('cms_label_versions_label_id_idx').on(table.labelId),\n\n // 인덱스: status 필터링 최적화\n index('cms_label_versions_status_idx').on(table.status),\n]);\n\n// 타입 추론\nexport type CmsLabelVersion = typeof cmsLabelVersions.$inferSelect;\nexport type NewCmsLabelVersion = typeof cmsLabelVersions.$inferInsert;\n\n/**\n * 사용 예시:\n *\n * // 새 버전 생성 (draft)\n * await db.insert(cmsLabelVersions).values({\n * labelId: 1,\n * version: 2,\n * status: 'draft',\n * notes: '문구 개선',\n * createdBy: 'editor@futureplay.com'\n * });\n *\n * // 버전 발행\n * await db.update(cmsLabelVersions)\n * .set({\n * status: 'published',\n * publishedAt: new Date(),\n * publishedBy: 'admin@futureplay.com'\n * })\n * .where(and(\n * eq(cmsLabelVersions.labelId, 1),\n * eq(cmsLabelVersions.version, 2)\n * ));\n *\n * // 라벨의 모든 버전 조회\n * const versions = await db.select()\n * .from(cmsLabelVersions)\n * .where(eq(cmsLabelVersions.labelId, 1))\n * .orderBy(desc(cmsLabelVersions.version));\n *\n * // 발행된 버전만 조회\n * const published = await db.select()\n * .from(cmsLabelVersions)\n * .where(eq(cmsLabelVersions.status, 'published'))\n * .orderBy(desc(cmsLabelVersions.publishedAt));\n */","/**\n * CMS Labels Entity\n *\n * 라벨의 메타데이터와 현재 발행 상태를 관리합니다.\n * - 라벨 식별 (id, key)\n * - 섹션 분류 (section)\n * - 타입 정의 (type)\n * - 발행 상태 (publishedVersion)\n */\n\nimport { index, integer, serial, text, timestamp } from 'drizzle-orm/pg-core';\nimport { createFunctionSchema } from '@spfn/core/db';\n\n// Create isolated schema for @spfn/cms\nconst schema = createFunctionSchema('@spfn/cms');\n\nexport const cmsLabels = schema.table('labels', {\n // Primary Key\n id: serial('id').primaryKey(),\n\n // 라벨 식별자\n key: text('key').notNull().unique(),\n // 예: \"home.hero.title\", \"why-futureplay.hero.subtitle\"\n // 구조: {section}.{component}.{property}\n\n // 섹션 분류 (페이지 단위)\n section: text('section').notNull(),\n // 예: \"home\", \"why-futureplay\", \"team\"\n\n // 값 타입\n type: text('type').notNull(),\n // \"text\" | \"image\" | \"video\" | \"file\" | \"object\"\n\n // 기본값\n defaultValue: text('default_value'),\n // 라벨의 기본값 (sync 시 설정)\n\n // 설명\n description: text('description'),\n // 라벨에 대한 설명 (optional)\n\n // 현재 발행된 버전 번호\n publishedVersion: integer('published_version'),\n // null = 미발행 상태\n // 1, 2, 3... = 발행된 버전 번호\n\n // 생성자 추적\n createdBy: text('created_by'),\n\n // 타임스탬프\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n}, (table) => [\n // 인덱스: 섹션별 조회 최적화\n index('cms_labels_section_idx').on(table.section),\n\n // 인덱스: key로 조회 최적화 (unique 제약으로 자동 생성되지만 명시)\n index('cms_labels_key_idx').on(table.key),\n]);\n\n// 타입 추론\nexport type CmsLabel = typeof cmsLabels.$inferSelect;\nexport type NewCmsLabel = typeof cmsLabels.$inferInsert;"],"mappings":";AASA,SAAS,UAAAA,SAAQ,WAAAC,UAAS,QAAAC,OAAM,aAAAC,YAAW,SAAAC,QAAO,cAAc;AAChE,SAAS,wBAAAC,6BAA4B;;;ACArC,SAAS,OAAO,SAAS,QAAQ,MAAM,iBAAiB;AACxD,SAAS,4BAA4B;AAGrC,IAAM,SAAS,qBAAqB,WAAW;AAExC,IAAM,YAAY,OAAO,MAAM,UAAU;AAAA;AAAA,EAE5C,IAAI,OAAO,IAAI,EAAE,WAAW;AAAA;AAAA,EAG5B,KAAK,KAAK,KAAK,EAAE,QAAQ,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAKlC,SAAS,KAAK,SAAS,EAAE,QAAQ;AAAA;AAAA;AAAA,EAIjC,MAAM,KAAK,MAAM,EAAE,QAAQ;AAAA;AAAA;AAAA,EAI3B,cAAc,KAAK,eAAe;AAAA;AAAA;AAAA,EAIlC,aAAa,KAAK,aAAa;AAAA;AAAA;AAAA,EAI/B,kBAAkB,QAAQ,mBAAmB;AAAA;AAAA;AAAA;AAAA,EAK7C,WAAW,KAAK,YAAY;AAAA;AAAA,EAG5B,WAAW,UAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,EAChF,WAAW,UAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AACpF,GAAG,CAAC,UAAU;AAAA;AAAA,EAEV,MAAM,wBAAwB,EAAE,GAAG,MAAM,OAAO;AAAA;AAAA,EAGhD,MAAM,oBAAoB,EAAE,GAAG,MAAM,GAAG;AAC5C,CAAC;;;AD5CD,IAAMC,UAASC,sBAAqB,WAAW;AAExC,IAAM,mBAAmBD,QAAO,MAAM,kBAAkB;AAAA;AAAA,EAE3D,IAAIE,QAAO,IAAI,EAAE,WAAW;AAAA;AAAA,EAG5B,SAASC,SAAQ,UAAU,EAC1B,QAAQ,EACR,WAAW,MAAM,UAAU,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,EAGvD,SAASA,SAAQ,SAAS,EAAE,QAAQ;AAAA;AAAA,EAGpC,QAAQC,MAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA,EAI/B,aAAaC,WAAU,gBAAgB,EAAE,cAAc,KAAK,CAAC;AAAA,EAC7D,aAAaD,MAAK,cAAc;AAAA;AAAA,EAGhC,OAAOA,MAAK,OAAO;AAAA;AAAA,EAGnB,WAAWA,MAAK,YAAY;AAAA;AAAA,EAG5B,WAAWC,WAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AACpF,GAAG,CAAC,UAAU;AAAA;AAAA,EAEV,OAAO,yCAAyC,EAC/C,GAAG,MAAM,SAAS,MAAM,OAAO;AAAA;AAAA,EAGhCC,OAAM,iCAAiC,EAAE,GAAG,MAAM,OAAO;AAAA;AAAA,EAGzDA,OAAM,+BAA+B,EAAE,GAAG,MAAM,MAAM;AAC1D,CAAC;","names":["serial","integer","text","timestamp","index","createFunctionSchema","schema","createFunctionSchema","serial","integer","text","timestamp","index"]}