@spfn/cms 0.1.0-alpha.7 → 0.1.0-alpha.71

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 (224) hide show
  1. package/README.md +28 -416
  2. package/dist/{helpers/locale.actions.d.ts → actions-BpTAYuBA.d.ts} +70 -7
  3. package/dist/actions.d.ts +2 -9
  4. package/dist/actions.js +97 -10
  5. package/dist/actions.js.map +1 -1
  6. package/dist/api.d.ts +214 -0
  7. package/dist/api.js +353 -0
  8. package/dist/api.js.map +1 -0
  9. package/dist/client.d.ts +136 -127
  10. package/dist/client.js +1199 -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 +108 -16
  14. package/dist/index.js +610 -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 +151 -0
  18. package/dist/lib/contracts/labels.js +168 -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 +103 -0
  25. package/dist/lib/contracts/values.js.map +1 -0
  26. package/dist/locale.constants-BMBK70YM.d.ts +104 -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-label-versions.d.ts +16 -49
  37. package/dist/server/entities/cms-label-versions.js +76 -0
  38. package/dist/server/entities/cms-label-versions.js.map +1 -0
  39. package/dist/{entities → server/entities}/cms-labels.d.ts +17 -14
  40. package/dist/server/entities/cms-labels.js +42 -0
  41. package/dist/server/entities/cms-labels.js.map +1 -0
  42. package/dist/{entities → server/entities}/cms-published-cache.d.ts +14 -69
  43. package/dist/server/entities/cms-published-cache.js +36 -0
  44. package/dist/server/entities/cms-published-cache.js.map +1 -0
  45. package/dist/server/entities/index.d.ts +7 -0
  46. package/dist/server/entities/index.js +218 -0
  47. package/dist/server/entities/index.js.map +1 -0
  48. package/dist/server/generators/index.d.ts +19 -0
  49. package/dist/server/generators/index.js +753 -0
  50. package/dist/server/generators/index.js.map +1 -0
  51. package/dist/server/labels/index.d.ts +1 -0
  52. package/dist/server/labels/index.js +32 -0
  53. package/dist/server/labels/index.js.map +1 -0
  54. package/dist/server/repositories/index.d.ts +209 -0
  55. package/dist/server/repositories/index.js +441 -0
  56. package/dist/server/repositories/index.js.map +1 -0
  57. package/dist/server/routes/labels/[id]/index.js +508 -0
  58. package/dist/server/routes/labels/[id]/index.js.map +1 -0
  59. package/dist/{routes/labels/[id] → server/routes/labels/_id_}/index.d.ts +5 -3
  60. package/dist/server/routes/labels/by-key/[key]/index.js +458 -0
  61. package/dist/server/routes/labels/by-key/[key]/index.js.map +1 -0
  62. package/dist/server/routes/labels/by-key/_key_/index.d.ts +10 -0
  63. package/dist/server/routes/labels/index.d.ts +12 -0
  64. package/dist/server/routes/labels/index.js +620 -0
  65. package/dist/server/routes/labels/index.js.map +1 -0
  66. package/dist/server/routes/published-cache/index.d.ts +11 -0
  67. package/dist/server/routes/published-cache/index.js +369 -0
  68. package/dist/server/routes/published-cache/index.js.map +1 -0
  69. package/dist/server/routes/values/[labelId]/[version]/index.js +479 -0
  70. package/dist/server/routes/values/[labelId]/[version]/index.js.map +1 -0
  71. package/dist/server/routes/values/[labelId]/index.js +474 -0
  72. package/dist/server/routes/values/[labelId]/index.js.map +1 -0
  73. package/dist/server/routes/values/_labelId_/_version_/index.d.ts +10 -0
  74. package/dist/server/routes/values/_labelId_/index.d.ts +10 -0
  75. package/dist/server.d.ts +78 -7
  76. package/dist/server.js +1750 -247
  77. package/dist/server.js.map +1 -1
  78. package/migrations/0000_init.sql +3 -0
  79. package/migrations/0001_far_lady_vermin.sql +86 -0
  80. package/migrations/0002_heavy_the_enforcers.sql +2 -0
  81. package/migrations/meta/0000_snapshot.json +15 -0
  82. package/migrations/meta/0001_snapshot.json +687 -0
  83. package/migrations/meta/0002_snapshot.json +686 -0
  84. package/migrations/meta/_journal.json +27 -0
  85. package/package.json +55 -36
  86. package/dist/actions.d.ts.map +0 -1
  87. package/dist/client.d.ts.map +0 -1
  88. package/dist/cms.config.d.ts +0 -77
  89. package/dist/cms.config.d.ts.map +0 -1
  90. package/dist/cms.config.js +0 -111
  91. package/dist/cms.config.js.map +0 -1
  92. package/dist/entities/cms-audit-logs.d.ts.map +0 -1
  93. package/dist/entities/cms-audit-logs.js +0 -103
  94. package/dist/entities/cms-audit-logs.js.map +0 -1
  95. package/dist/entities/cms-draft-cache.d.ts.map +0 -1
  96. package/dist/entities/cms-draft-cache.js +0 -112
  97. package/dist/entities/cms-draft-cache.js.map +0 -1
  98. package/dist/entities/cms-label-values.d.ts.map +0 -1
  99. package/dist/entities/cms-label-values.js +0 -105
  100. package/dist/entities/cms-label-values.js.map +0 -1
  101. package/dist/entities/cms-label-versions.d.ts.map +0 -1
  102. package/dist/entities/cms-label-versions.js +0 -80
  103. package/dist/entities/cms-label-versions.js.map +0 -1
  104. package/dist/entities/cms-labels.d.ts.map +0 -1
  105. package/dist/entities/cms-labels.js +0 -48
  106. package/dist/entities/cms-labels.js.map +0 -1
  107. package/dist/entities/cms-published-cache.d.ts.map +0 -1
  108. package/dist/entities/cms-published-cache.js +0 -103
  109. package/dist/entities/cms-published-cache.js.map +0 -1
  110. package/dist/entities/index.d.ts +0 -10
  111. package/dist/entities/index.d.ts.map +0 -1
  112. package/dist/entities/index.js +0 -10
  113. package/dist/entities/index.js.map +0 -1
  114. package/dist/generators/index.d.ts +0 -19
  115. package/dist/generators/index.d.ts.map +0 -1
  116. package/dist/generators/index.js +0 -19
  117. package/dist/generators/index.js.map +0 -1
  118. package/dist/generators/label-sync-generator.d.ts +0 -33
  119. package/dist/generators/label-sync-generator.d.ts.map +0 -1
  120. package/dist/generators/label-sync-generator.js +0 -87
  121. package/dist/generators/label-sync-generator.js.map +0 -1
  122. package/dist/helpers/locale.actions.d.ts.map +0 -1
  123. package/dist/helpers/locale.actions.js +0 -210
  124. package/dist/helpers/locale.actions.js.map +0 -1
  125. package/dist/helpers/locale.constants.d.ts +0 -10
  126. package/dist/helpers/locale.constants.d.ts.map +0 -1
  127. package/dist/helpers/locale.constants.js +0 -10
  128. package/dist/helpers/locale.constants.js.map +0 -1
  129. package/dist/helpers/locale.d.ts +0 -17
  130. package/dist/helpers/locale.d.ts.map +0 -1
  131. package/dist/helpers/locale.js +0 -20
  132. package/dist/helpers/locale.js.map +0 -1
  133. package/dist/helpers/sync.d.ts +0 -41
  134. package/dist/helpers/sync.d.ts.map +0 -1
  135. package/dist/helpers/sync.js +0 -309
  136. package/dist/helpers/sync.js.map +0 -1
  137. package/dist/index.d.ts.map +0 -1
  138. package/dist/init.d.ts +0 -31
  139. package/dist/init.d.ts.map +0 -1
  140. package/dist/init.js +0 -36
  141. package/dist/init.js.map +0 -1
  142. package/dist/labels/helpers.d.ts +0 -31
  143. package/dist/labels/helpers.d.ts.map +0 -1
  144. package/dist/labels/helpers.js +0 -60
  145. package/dist/labels/helpers.js.map +0 -1
  146. package/dist/labels/index.d.ts +0 -7
  147. package/dist/labels/index.d.ts.map +0 -1
  148. package/dist/labels/index.js +0 -7
  149. package/dist/labels/index.js.map +0 -1
  150. package/dist/repositories/cms-draft-cache.repository.d.ts +0 -62
  151. package/dist/repositories/cms-draft-cache.repository.d.ts.map +0 -1
  152. package/dist/repositories/cms-draft-cache.repository.js +0 -56
  153. package/dist/repositories/cms-draft-cache.repository.js.map +0 -1
  154. package/dist/repositories/cms-label-values.repository.d.ts +0 -32
  155. package/dist/repositories/cms-label-values.repository.d.ts.map +0 -1
  156. package/dist/repositories/cms-label-values.repository.js +0 -72
  157. package/dist/repositories/cms-label-values.repository.js.map +0 -1
  158. package/dist/repositories/cms-labels.repository.d.ts +0 -53
  159. package/dist/repositories/cms-labels.repository.d.ts.map +0 -1
  160. package/dist/repositories/cms-labels.repository.js +0 -77
  161. package/dist/repositories/cms-labels.repository.js.map +0 -1
  162. package/dist/repositories/cms-published-cache.repository.d.ts +0 -53
  163. package/dist/repositories/cms-published-cache.repository.d.ts.map +0 -1
  164. package/dist/repositories/cms-published-cache.repository.js +0 -54
  165. package/dist/repositories/cms-published-cache.repository.js.map +0 -1
  166. package/dist/repositories/index.d.ts +0 -8
  167. package/dist/repositories/index.d.ts.map +0 -1
  168. package/dist/repositories/index.js +0 -9
  169. package/dist/repositories/index.js.map +0 -1
  170. package/dist/routes/labels/[id]/contract.d.ts +0 -68
  171. package/dist/routes/labels/[id]/contract.d.ts.map +0 -1
  172. package/dist/routes/labels/[id]/contract.js +0 -84
  173. package/dist/routes/labels/[id]/contract.js.map +0 -1
  174. package/dist/routes/labels/[id]/index.d.ts.map +0 -1
  175. package/dist/routes/labels/[id]/index.js +0 -96
  176. package/dist/routes/labels/[id]/index.js.map +0 -1
  177. package/dist/routes/labels/by-key/[key]/contract.d.ts +0 -24
  178. package/dist/routes/labels/by-key/[key]/contract.d.ts.map +0 -1
  179. package/dist/routes/labels/by-key/[key]/contract.js +0 -28
  180. package/dist/routes/labels/by-key/[key]/contract.js.map +0 -1
  181. package/dist/routes/labels/by-key/[key]/index.d.ts +0 -8
  182. package/dist/routes/labels/by-key/[key]/index.d.ts.map +0 -1
  183. package/dist/routes/labels/by-key/[key]/index.js +0 -32
  184. package/dist/routes/labels/by-key/[key]/index.js.map +0 -1
  185. package/dist/routes/labels/contract.d.ts +0 -59
  186. package/dist/routes/labels/contract.d.ts.map +0 -1
  187. package/dist/routes/labels/contract.js +0 -75
  188. package/dist/routes/labels/contract.js.map +0 -1
  189. package/dist/routes/labels/index.d.ts +0 -10
  190. package/dist/routes/labels/index.d.ts.map +0 -1
  191. package/dist/routes/labels/index.js +0 -73
  192. package/dist/routes/labels/index.js.map +0 -1
  193. package/dist/routes/published-cache/contract.d.ts +0 -25
  194. package/dist/routes/published-cache/contract.d.ts.map +0 -1
  195. package/dist/routes/published-cache/contract.js +0 -35
  196. package/dist/routes/published-cache/contract.js.map +0 -1
  197. package/dist/routes/published-cache/index.d.ts +0 -8
  198. package/dist/routes/published-cache/index.d.ts.map +0 -1
  199. package/dist/routes/published-cache/index.js +0 -33
  200. package/dist/routes/published-cache/index.js.map +0 -1
  201. package/dist/routes/values/[labelId]/[version]/contract.d.ts +0 -29
  202. package/dist/routes/values/[labelId]/[version]/contract.d.ts.map +0 -1
  203. package/dist/routes/values/[labelId]/[version]/contract.js +0 -33
  204. package/dist/routes/values/[labelId]/[version]/contract.js.map +0 -1
  205. package/dist/routes/values/[labelId]/[version]/index.d.ts +0 -8
  206. package/dist/routes/values/[labelId]/[version]/index.d.ts.map +0 -1
  207. package/dist/routes/values/[labelId]/[version]/index.js +0 -45
  208. package/dist/routes/values/[labelId]/[version]/index.js.map +0 -1
  209. package/dist/routes/values/[labelId]/contract.d.ts +0 -38
  210. package/dist/routes/values/[labelId]/contract.d.ts.map +0 -1
  211. package/dist/routes/values/[labelId]/contract.js +0 -59
  212. package/dist/routes/values/[labelId]/contract.js.map +0 -1
  213. package/dist/routes/values/[labelId]/index.d.ts +0 -8
  214. package/dist/routes/values/[labelId]/index.d.ts.map +0 -1
  215. package/dist/routes/values/[labelId]/index.js +0 -42
  216. package/dist/routes/values/[labelId]/index.js.map +0 -1
  217. package/dist/server.d.ts.map +0 -1
  218. package/dist/store.d.ts +0 -87
  219. package/dist/store.d.ts.map +0 -1
  220. package/dist/store.js +0 -205
  221. package/dist/store.js.map +0 -1
  222. package/dist/types.d.ts.map +0 -1
  223. package/dist/types.js +0 -7
  224. package/dist/types.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spfn/cms",
3
- "version": "0.1.0-alpha.7",
3
+ "version": "0.1.0-alpha.71",
4
4
  "description": "SPFN CMS - Content Management System with type-safe labels and Next.js integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,47 +8,38 @@
8
8
  "exports": {
9
9
  ".": {
10
10
  "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.js"
12
13
  },
13
14
  "./server": {
14
15
  "types": "./dist/server.d.ts",
15
- "import": "./dist/server.js"
16
+ "import": "./dist/server.js",
17
+ "require": "./dist/server.js"
16
18
  },
17
19
  "./client": {
18
20
  "types": "./dist/client.d.ts",
19
- "import": "./dist/client.js"
21
+ "import": "./dist/client.js",
22
+ "require": "./dist/client.js"
23
+ },
24
+ "./api": {
25
+ "types": "./dist/api.d.ts",
26
+ "import": "./dist/api.js",
27
+ "require": "./dist/api.js"
20
28
  },
21
29
  "./actions": {
22
30
  "types": "./dist/actions.d.ts",
23
- "import": "./dist/actions.js"
24
- },
25
- "./store": {
26
- "types": "./dist/store.d.ts",
27
- "import": "./dist/store.js"
28
- },
29
- "./types": {
30
- "types": "./dist/types.d.ts",
31
- "import": "./dist/types.js"
32
- },
33
- "./labels": {
34
- "types": "./dist/labels/index.d.ts",
35
- "import": "./dist/labels/index.js"
31
+ "import": "./dist/actions.js",
32
+ "require": "./dist/actions.js"
36
33
  },
37
34
  "./generators": {
38
- "types": "./dist/generators/index.d.ts",
39
- "import": "./dist/generators/index.js"
40
- },
41
- "./codegen/generators": {
42
- "types": "./dist/generators/index.d.ts",
43
- "import": "./dist/generators/index.js"
44
- },
45
- "./repositories": {
46
- "types": "./dist/repositories/index.d.ts",
47
- "import": "./dist/repositories/index.js"
35
+ "types": "./dist/server/generators/index.d.ts",
36
+ "import": "./dist/server/generators/index.js",
37
+ "require": "./dist/server/generators/index.js"
48
38
  }
49
39
  },
50
40
  "files": [
51
41
  "dist",
42
+ "migrations",
52
43
  "README.md"
53
44
  ],
54
45
  "keywords": [
@@ -67,20 +58,32 @@
67
58
  "directory": "packages/cms"
68
59
  },
69
60
  "spfn": {
61
+ "prefix": "/_cms",
70
62
  "schemas": [
71
- "./dist/entities/*.js"
63
+ "./dist/server/entities/*.js"
72
64
  ],
73
65
  "routes": {
74
- "basePath": "/cms",
75
- "dir": "./dist/routes"
66
+ "dir": "./dist/server/routes"
67
+ },
68
+ "migrations": {
69
+ "dir": "./migrations"
70
+ },
71
+ "codegen": {
72
+ "generators": [
73
+ {
74
+ "name": "@spfn/core:contract",
75
+ "contractsDir": "src/lib/contracts",
76
+ "outputPath": "src/api"
77
+ }
78
+ ]
76
79
  },
77
- "setupMessage": " 📚 Next steps:\n 1. Import CMS components: import { useLabels } from '@spfn/cms'\n 2. View labels in Drizzle Studio: pnpm spfn db studio\n 3. CMS API available at: http://localhost:8790/cms\n 4. Learn more: https://github.com/spfnio/spfn"
80
+ "setupMessage": " 📚 Next steps:\n 1. Import CMS components: import { useLabels } from '@spfn/cms'\n 2. View labels in Drizzle Studio: pnpm spfn db studio\n 3. CMS API available at: http://localhost:8790/_cms\n 4. Learn more: https://github.com/spfnio/spfn"
78
81
  },
79
82
  "peerDependencies": {
80
83
  "drizzle-orm": "^0.44.0",
81
84
  "next": "^15.0.0",
82
85
  "react": "^18.0.0 || ^19.0.0",
83
- "@spfn/core": "0.1.0-alpha.52"
86
+ "@spfn/core": "0.1.0-alpha.68"
84
87
  },
85
88
  "dependencies": {
86
89
  "@sinclair/typebox": "^0.34.0",
@@ -88,14 +91,30 @@
88
91
  "zustand": "^5.0.8"
89
92
  },
90
93
  "devDependencies": {
94
+ "@types/node": "^20.11.0",
91
95
  "@types/react": "^19",
96
+ "@vitest/coverage-v8": "^4.0.6",
97
+ "drizzle-kit": "^0.31.6",
92
98
  "drizzle-typebox": "^0.1.0",
99
+ "glob": "^11.0.3",
100
+ "postgres": "^3.4.0",
93
101
  "tsup": "^8.3.5",
94
- "typescript": "^5"
102
+ "tsx": "^4.19.2",
103
+ "typescript": "^5",
104
+ "vitest": "^4.0.6",
105
+ "spfn": "0.1.0-alpha.68"
95
106
  },
96
107
  "scripts": {
97
- "build": "tsc",
98
- "watch": "tsc --watch",
99
- "clean": "rm -rf dist"
108
+ "build": "npm run db:generate && tsup",
109
+ "watch": "tsup --watch",
110
+ "clean": "rm -rf dist migrations",
111
+ "db:generate": "drizzle-kit generate",
112
+ "codegen": "spfn codegen run",
113
+ "test": "vitest",
114
+ "test:coverage": "vitest run --coverage",
115
+ "test:routes": "vitest src/server/routes",
116
+ "docker:test:up": "docker compose -f docker-compose.test.yml up -d",
117
+ "docker:test:down": "docker compose -f docker-compose.test.yml down",
118
+ "docker:test:logs": "docker compose -f docker-compose.test.yml logs -f"
100
119
  }
101
120
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,SAAS,EACT,SAAS,EACT,UAAU,GACb,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACtB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,MAAM;IACf;;OAEG;;QAEC;;;WAGG;kCACc;YAAE,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAA;SAAE;;;;;;;;;;;;;;;QAG7E;;;WAGG;oCACgB;YAAE,MAAM,EAAE,aAAa,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAA;SAAE;;;;;;;;;;;;QAG/E;;;WAGG;mCACe;YAAE,IAAI,EAAE,aAAa,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;SAAE;;;;;;;;;;;;;QAG7E;;;WAGG;mCACe;YACd,MAAM,EAAE,aAAa,CAAC,OAAO,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,EAAE,aAAa,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;SAC3D;;;;;;;;;;;;QAGD;;;WAGG;mCACe;YAAE,MAAM,EAAE,aAAa,CAAC,OAAO,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAA;SAAE;;;;;;;IAIrF;;OAEG;;QAEC;;;WAGG;gCACY;YAAE,KAAK,EAAE,aAAa,CAAC,OAAO,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAA;SAAE;;;;;;;;;;;;CAGhF,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAGnC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG/D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,77 +0,0 @@
1
- /**
2
- * CMS Configuration Module
3
- *
4
- * 환경변수 기반 CMS 설정 관리
5
- * - SPFN_CMS_DEFAULT_LOCALE: 기본 언어 (기본값: 'ko')
6
- * - SPFN_CMS_SUPPORTED_LOCALES: 지원 언어 목록, 쉼표로 구분 (기본값: 'ko,en')
7
- * - SPFN_CMS_DETECT_BROWSER_LANGUAGE: 브라우저 언어 자동 감지 (기본값: 'false')
8
- */
9
- /**
10
- * CMS 설정 타입
11
- */
12
- export interface CmsConfig {
13
- /**
14
- * 기본 언어 코드
15
- * @example 'ko', 'en', 'ja'
16
- */
17
- defaultLocale: string;
18
- /**
19
- * 지원하는 언어 목록
20
- * @example ['ko', 'en', 'ja']
21
- */
22
- supportedLocales: string[];
23
- /**
24
- * 브라우저 언어 자동 감지 여부
25
- * @default false
26
- */
27
- detectBrowserLanguage: boolean;
28
- }
29
- /**
30
- * CMS 설정 조회
31
- *
32
- * @returns 현재 CMS 설정
33
- *
34
- * @example
35
- * ```tsx
36
- * import { getCmsConfig } from '@spfn/cms';
37
- *
38
- * const config = getCmsConfig();
39
- * console.log(config.defaultLocale); // 'ko'
40
- * console.log(config.supportedLocales); // ['ko', 'en']
41
- * ```
42
- */
43
- export declare function getCmsConfig(): Readonly<CmsConfig>;
44
- /**
45
- * CMS 설정 변경 (런타임 오버라이드)
46
- *
47
- * 환경변수 설정을 런타임에 오버라이드합니다.
48
- * 주로 테스트나 특수한 경우에 사용됩니다.
49
- *
50
- * @param config - 변경할 설정 (부분 업데이트 가능)
51
- *
52
- * @example
53
- * ```tsx
54
- * import { configureCms } from '@spfn/cms';
55
- *
56
- * // 앱 초기화 시 (선택적)
57
- * configureCms({
58
- * defaultLocale: 'en',
59
- * supportedLocales: ['en', 'ko', 'ja'],
60
- * detectBrowserLanguage: true,
61
- * });
62
- * ```
63
- */
64
- export declare function configureCms(config: Partial<CmsConfig>): void;
65
- /**
66
- * 설정 초기화 (환경변수에서 재로드)
67
- *
68
- * @example
69
- * ```tsx
70
- * import { resetCmsConfig } from '@spfn/cms';
71
- *
72
- * // 환경변수 설정으로 되돌리기
73
- * resetCmsConfig();
74
- * ```
75
- */
76
- export declare function resetCmsConfig(): void;
77
- //# sourceMappingURL=cms.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms.config.d.ts","sourceRoot":"","sources":["../src/cms.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IAEtB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAClC;AAoDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAAC,SAAS,CAAC,CAGlD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAiB7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
@@ -1,111 +0,0 @@
1
- /**
2
- * CMS Configuration Module
3
- *
4
- * 환경변수 기반 CMS 설정 관리
5
- * - SPFN_CMS_DEFAULT_LOCALE: 기본 언어 (기본값: 'ko')
6
- * - SPFN_CMS_SUPPORTED_LOCALES: 지원 언어 목록, 쉼표로 구분 (기본값: 'ko,en')
7
- * - SPFN_CMS_DETECT_BROWSER_LANGUAGE: 브라우저 언어 자동 감지 (기본값: 'false')
8
- */
9
- /**
10
- * 환경변수 읽기 헬퍼
11
- */
12
- function getEnvVar(key, defaultValue) {
13
- return process.env[key] || defaultValue;
14
- }
15
- /**
16
- * 환경변수에서 boolean 읽기
17
- */
18
- function getEnvBoolean(key, defaultValue) {
19
- const value = process.env[key];
20
- if (value === undefined)
21
- return defaultValue;
22
- return value === 'true' || value === '1';
23
- }
24
- /**
25
- * 환경변수에서 설정 로드
26
- */
27
- function loadConfigFromEnv() {
28
- const defaultLocale = getEnvVar('SPFN_CMS_DEFAULT_LOCALE', 'en');
29
- const supportedLocalesStr = getEnvVar('SPFN_CMS_SUPPORTED_LOCALES', 'en,ko');
30
- const detectBrowserLanguage = getEnvBoolean('SPFN_CMS_DETECT_BROWSER_LANGUAGE', true);
31
- const supportedLocales = supportedLocalesStr
32
- .split(',')
33
- .map(locale => locale.trim())
34
- .filter(locale => locale.length > 0);
35
- // 기본 언어가 지원 목록에 없으면 추가
36
- if (!supportedLocales.includes(defaultLocale)) {
37
- supportedLocales.unshift(defaultLocale);
38
- }
39
- return {
40
- defaultLocale,
41
- supportedLocales,
42
- detectBrowserLanguage,
43
- };
44
- }
45
- /**
46
- * 현재 설정 (환경변수에서 초기화)
47
- */
48
- let currentConfig = loadConfigFromEnv();
49
- /**
50
- * CMS 설정 조회
51
- *
52
- * @returns 현재 CMS 설정
53
- *
54
- * @example
55
- * ```tsx
56
- * import { getCmsConfig } from '@spfn/cms';
57
- *
58
- * const config = getCmsConfig();
59
- * console.log(config.defaultLocale); // 'ko'
60
- * console.log(config.supportedLocales); // ['ko', 'en']
61
- * ```
62
- */
63
- export function getCmsConfig() {
64
- return currentConfig;
65
- }
66
- /**
67
- * CMS 설정 변경 (런타임 오버라이드)
68
- *
69
- * 환경변수 설정을 런타임에 오버라이드합니다.
70
- * 주로 테스트나 특수한 경우에 사용됩니다.
71
- *
72
- * @param config - 변경할 설정 (부분 업데이트 가능)
73
- *
74
- * @example
75
- * ```tsx
76
- * import { configureCms } from '@spfn/cms';
77
- *
78
- * // 앱 초기화 시 (선택적)
79
- * configureCms({
80
- * defaultLocale: 'en',
81
- * supportedLocales: ['en', 'ko', 'ja'],
82
- * detectBrowserLanguage: true,
83
- * });
84
- * ```
85
- */
86
- export function configureCms(config) {
87
- currentConfig = {
88
- ...currentConfig,
89
- ...config,
90
- };
91
- // 기본 언어가 지원 목록에 있는지 확인
92
- if (config.defaultLocale && !currentConfig.supportedLocales.includes(config.defaultLocale)) {
93
- console.warn(`[CMS Config] Default locale '${config.defaultLocale}' not in supported locales, adding automatically.`, `Supported locales: [${currentConfig.supportedLocales.join(', ')}]`);
94
- currentConfig.supportedLocales.unshift(config.defaultLocale);
95
- }
96
- }
97
- /**
98
- * 설정 초기화 (환경변수에서 재로드)
99
- *
100
- * @example
101
- * ```tsx
102
- * import { resetCmsConfig } from '@spfn/cms';
103
- *
104
- * // 환경변수 설정으로 되돌리기
105
- * resetCmsConfig();
106
- * ```
107
- */
108
- export function resetCmsConfig() {
109
- currentConfig = loadConfigFromEnv();
110
- }
111
- //# sourceMappingURL=cms.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms.config.js","sourceRoot":"","sources":["../src/cms.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0BH;;GAEG;AACH,SAAS,SAAS,CAAC,GAAW,EAAE,YAAoB;IAEhD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,YAAqB;IAErD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC7C,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IAEtB,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,mBAAmB,GAAG,SAAS,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;IAC7E,MAAM,qBAAqB,GAAG,aAAa,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;IAEtF,MAAM,gBAAgB,GAAG,mBAAmB;SACvC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEzC,uBAAuB;IACvB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAC7C,CAAC;QACG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACH,aAAa;QACb,gBAAgB;QAChB,qBAAqB;KACxB,CAAC;AACN,CAAC;AAED;;GAEG;AACH,IAAI,aAAa,GAAc,iBAAiB,EAAE,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY;IAExB,OAAO,aAAa,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0B;IAEnD,aAAa,GAAG;QACZ,GAAG,aAAa;QAChB,GAAG,MAAM;KACZ,CAAC;IAEF,uBAAuB;IACvB,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAC1F,CAAC;QACG,OAAO,CAAC,IAAI,CACR,gCAAgC,MAAM,CAAC,aAAa,mDAAmD,EACvG,uBAAuB,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACtE,CAAC;QAEF,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc;IAE1B,aAAa,GAAG,iBAAiB,EAAE,CAAC;AACxC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-audit-logs.d.ts","sourceRoot":"","sources":["../../src/entities/cms-audit-logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCvB,CAAC;AAGH,MAAM,MAAM,WAAW,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC3D,MAAM,MAAM,cAAc,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG"}
@@ -1,103 +0,0 @@
1
- /**
2
- * CMS Audit Logs Entity
3
- *
4
- * CMS의 모든 변경사항을 추적합니다.
5
- * - 누가 (userId, userName)
6
- * - 언제 (createdAt)
7
- * - 무엇을 (action, changes)
8
- * - 왜 (metadata)
9
- */
10
- import { serial, integer, text, jsonb, timestamp, index } 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 cmsAuditLogs = schema.table('audit_logs', {
16
- // Primary Key
17
- id: serial('id').primaryKey(),
18
- // Foreign Key: cms_labels (nullable - 라벨 삭제 시 로그는 유지)
19
- labelId: integer('label_id')
20
- .references(() => cmsLabels.id, { onDelete: 'set null' }),
21
- // 작업 유형
22
- action: text('action').notNull(),
23
- // "create" | "update" | "publish" | "unpublish" | "archive" | "delete" | "rollback" | "duplicate"
24
- // 사용자 정보
25
- userId: text('user_id').notNull(),
26
- userName: text('user_name'),
27
- // 변경 내용 (before/after)
28
- changes: jsonb('changes'),
29
- // { before: {...}, after: {...} }
30
- // 추가 메타데이터
31
- metadata: jsonb('metadata'),
32
- // { version: number, ip: string, userAgent: string, ... }
33
- // 작업 시각
34
- createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
35
- }, (table) => [
36
- // 인덱스: labelId로 이력 조회 최적화
37
- index('cms_audit_logs_label_id_idx').on(table.labelId),
38
- // 인덱스: userId로 사용자 활동 조회 최적화
39
- index('cms_audit_logs_user_id_idx').on(table.userId),
40
- // 인덱스: action 필터링 최적화
41
- index('cms_audit_logs_action_idx').on(table.action),
42
- // 인덱스: 시간순 조회 최적화
43
- index('cms_audit_logs_created_at_idx').on(table.createdAt),
44
- ]);
45
- /**
46
- * 사용 예시:
47
- *
48
- * // 라벨 생성 로그
49
- * await db.insert(cmsAuditLogs).values({
50
- * labelId: 1,
51
- * action: 'create',
52
- * userId: 'user123',
53
- * userName: '김철수',
54
- * changes: {
55
- * before: null,
56
- * after: {
57
- * key: 'home.hero.title',
58
- * section: 'home',
59
- * type: 'text'
60
- * }
61
- * },
62
- * metadata: {
63
- * ip: '192.168.1.1',
64
- * userAgent: 'Mozilla/5.0...'
65
- * }
66
- * });
67
- *
68
- * // 발행 로그
69
- * await db.insert(cmsAuditLogs).values({
70
- * labelId: 1,
71
- * action: 'publish',
72
- * userId: 'admin123',
73
- * userName: '관리자',
74
- * changes: {
75
- * before: { status: 'draft', publishedVersion: null },
76
- * after: { status: 'published', publishedVersion: 2 }
77
- * },
78
- * metadata: {
79
- * version: 2,
80
- * notes: '신규 브랜딩 적용'
81
- * }
82
- * });
83
- *
84
- * // 라벨별 이력 조회
85
- * const logs = await db.select()
86
- * .from(cmsAuditLogs)
87
- * .where(eq(cmsAuditLogs.labelId, 1))
88
- * .orderBy(desc(cmsAuditLogs.createdAt))
89
- * .limit(20);
90
- *
91
- * // 사용자별 활동 조회
92
- * const userActivity = await db.select()
93
- * .from(cmsAuditLogs)
94
- * .where(eq(cmsAuditLogs.userId, 'user123'))
95
- * .orderBy(desc(cmsAuditLogs.createdAt));
96
- *
97
- * // 최근 24시간 변경 이력
98
- * const recent = await db.select()
99
- * .from(cmsAuditLogs)
100
- * .where(gte(cmsAuditLogs.createdAt, new Date(Date.now() - 24 * 60 * 60 * 1000)))
101
- * .orderBy(desc(cmsAuditLogs.createdAt));
102
- */
103
- //# sourceMappingURL=cms-audit-logs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-audit-logs.js","sourceRoot":"","sources":["../../src/entities/cms-audit-logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACrF,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,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE;IACnD,cAAc;IACd,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAE7B,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;SAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEzD,QAAQ;IACR,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAChC,kGAAkG;IAElG,SAAS;IACT,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IACjC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;IAE3B,uBAAuB;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,kCAAkC;IAElC,WAAW;IACX,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;IAC3B,0DAA0D;IAE1D,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,0BAA0B;IAC1B,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;IAEtD,6BAA6B;IAC7B,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAEpD,sBAAsB;IACtB,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAEnD,kBAAkB;IAClB,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;CAC7D,CAAC,CAAC;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-draft-cache.d.ts","sourceRoot":"","sources":["../../src/entities/cms-draft-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCxB,CAAC;AAGH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,YAAY,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GAAG,OAAO,aAAa,CAAC,YAAY,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG"}
@@ -1,112 +0,0 @@
1
- /**
2
- * CMS Draft Cache Entity
3
- *
4
- * 관리자별 Draft 콘텐츠를 캐싱합니다.
5
- * - 사용자별 격리 (userId)
6
- * - 실시간 미리보기 지원
7
- * - 동시 편집 가능
8
- *
9
- * 핵심 기능:
10
- * - 여러 관리자가 같은 섹션을 동시에 편집
11
- * - 각자의 변경사항은 자신의 미리보기에만 표시
12
- * - 충돌 없이 안전하게 작업
13
- */
14
- import { serial, text, jsonb, timestamp, index, unique } from 'drizzle-orm/pg-core';
15
- import { createFunctionSchema } from '@spfn/core/db';
16
- // Create isolated schema for @spfn/cms
17
- const schema = createFunctionSchema('@spfn/cms');
18
- export const cmsDraftCache = schema.table('draft_cache', {
19
- // Primary Key
20
- id: serial('id').primaryKey(),
21
- // 섹션 (페이지 단위)
22
- section: text('section').notNull(),
23
- // "home" | "why-futureplay" | "team" | "our-companies" | "apply"
24
- // 언어
25
- locale: text('locale').notNull(),
26
- // "ko" | "en" | "ja"
27
- // 사용자 ID (핵심 필드!)
28
- userId: text('user_id').notNull(),
29
- // 각 관리자의 독립적인 작업 공간
30
- // Draft 콘텐츠 (JSONB)
31
- content: jsonb('content').notNull(),
32
- // Record<string, LabelValue>
33
- // {
34
- // "home.hero.title": { type: "text", content: "수정 중..." },
35
- // "home.hero.subtitle": { type: "text", content: "새로운 문구" },
36
- // ...
37
- // }
38
- // 최종 수정 시각
39
- updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
40
- }, (table) => [
41
- // UNIQUE 제약: section + locale + userId 조합은 유일
42
- unique('cms_draft_cache_unique')
43
- .on(table.section, table.locale, table.userId),
44
- // 인덱스: section으로 조회 최적화
45
- index('cms_draft_cache_section_idx').on(table.section),
46
- // 인덱스: userId로 사용자의 모든 draft 조회 최적화
47
- index('cms_draft_cache_user_idx').on(table.userId),
48
- ]);
49
- /**
50
- * 사용 예시:
51
- *
52
- * // Draft 초기화 (편집 시작)
53
- * await db.insert(cmsDraftCache)
54
- * .values({
55
- * section: 'home',
56
- * locale: 'ko',
57
- * userId: 'user-a@futureplay.com',
58
- * content: publishedContent // 발행 버전 복사
59
- * });
60
- *
61
- * // Draft 업데이트 (값 수정 시)
62
- * const cache = await db.select()
63
- * .from(cmsDraftCache)
64
- * .where(and(
65
- * eq(cmsDraftCache.section, 'home'),
66
- * eq(cmsDraftCache.locale, 'ko'),
67
- * eq(cmsDraftCache.userId, userId)
68
- * ))
69
- * .limit(1);
70
- *
71
- * const updatedContent = {
72
- * ...cache[0].content,
73
- * 'home.hero.title': newValue // 부분 업데이트
74
- * };
75
- *
76
- * await db.update(cmsDraftCache)
77
- * .set({ content: updatedContent, updatedAt: new Date() })
78
- * .where(eq(cmsDraftCache.id, cache[0].id));
79
- *
80
- * // Draft 조회 (미리보기)
81
- * const draft = await db.select()
82
- * .from(cmsDraftCache)
83
- * .where(and(
84
- * eq(cmsDraftCache.section, 'home'),
85
- * eq(cmsDraftCache.locale, 'ko'),
86
- * eq(cmsDraftCache.userId, session.user.id)
87
- * ))
88
- * .limit(1);
89
- *
90
- * // 사용자의 모든 작업 중인 섹션 조회
91
- * const userDrafts = await db.select()
92
- * .from(cmsDraftCache)
93
- * .where(eq(cmsDraftCache.userId, userId))
94
- * .orderBy(desc(cmsDraftCache.updatedAt));
95
- *
96
- * // 오래된 Draft 정리 (30일 이상)
97
- * const stale = await db.delete(cmsDraftCache)
98
- * .where(lt(
99
- * cmsDraftCache.updatedAt,
100
- * new Date(Date.now() - 30 * 24 * 60 * 60 * 1000)
101
- * ))
102
- * .returning();
103
- *
104
- * // Draft 폐기 (변경사항 버리기)
105
- * await db.delete(cmsDraftCache)
106
- * .where(and(
107
- * eq(cmsDraftCache.section, 'home'),
108
- * eq(cmsDraftCache.locale, 'ko'),
109
- * eq(cmsDraftCache.userId, userId)
110
- * ));
111
- */
112
- //# sourceMappingURL=cms-draft-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-draft-cache.js","sourceRoot":"","sources":["../../src/entities/cms-draft-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,uCAAuC;AACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE;IACrD,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,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IACjC,oBAAoB;IAEpB,oBAAoB;IACpB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IACnC,6BAA6B;IAC7B,IAAI;IACJ,6DAA6D;IAC7D,+DAA+D;IAC/D,QAAQ;IACR,IAAI;IAEJ,WAAW;IACX,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,8CAA8C;IAC9C,MAAM,CAAC,wBAAwB,CAAC;SAC/B,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAE9C,wBAAwB;IACxB,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;IAEtD,oCAAoC;IACpC,KAAK,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;CACrD,CAAC,CAAC;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG"}
@@ -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"}