@exabugs/dynamodb-client 0.1.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 (230) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +21 -0
  3. package/README.md +283 -0
  4. package/dist/client/Collection.d.ts +57 -0
  5. package/dist/client/Collection.d.ts.map +1 -0
  6. package/dist/client/Collection.js +174 -0
  7. package/dist/client/Collection.js.map +1 -0
  8. package/dist/client/Database.d.ts +35 -0
  9. package/dist/client/Database.d.ts.map +1 -0
  10. package/dist/client/Database.js +48 -0
  11. package/dist/client/Database.js.map +1 -0
  12. package/dist/client/DynamoClient.d.ts +43 -0
  13. package/dist/client/DynamoClient.d.ts.map +1 -0
  14. package/dist/client/DynamoClient.js +62 -0
  15. package/dist/client/DynamoClient.js.map +1 -0
  16. package/dist/client/FindCursor.d.ts +174 -0
  17. package/dist/client/FindCursor.d.ts.map +1 -0
  18. package/dist/client/FindCursor.js +256 -0
  19. package/dist/client/FindCursor.js.map +1 -0
  20. package/dist/client/aws-sigv4.d.ts +10 -0
  21. package/dist/client/aws-sigv4.d.ts.map +1 -0
  22. package/dist/client/aws-sigv4.js +54 -0
  23. package/dist/client/aws-sigv4.js.map +1 -0
  24. package/dist/client/index.cognito.d.ts +34 -0
  25. package/dist/client/index.cognito.d.ts.map +1 -0
  26. package/dist/client/index.cognito.js +30 -0
  27. package/dist/client/index.cognito.js.map +1 -0
  28. package/dist/client/index.d.ts +12 -0
  29. package/dist/client/index.d.ts.map +1 -0
  30. package/dist/client/index.iam.d.ts +34 -0
  31. package/dist/client/index.iam.d.ts.map +1 -0
  32. package/dist/client/index.iam.js +28 -0
  33. package/dist/client/index.iam.js.map +1 -0
  34. package/dist/client/index.js +12 -0
  35. package/dist/client/index.js.map +1 -0
  36. package/dist/client/index.token.d.ts +33 -0
  37. package/dist/client/index.token.d.ts.map +1 -0
  38. package/dist/client/index.token.js +28 -0
  39. package/dist/client/index.token.js.map +1 -0
  40. package/dist/dynamodb.d.ts +20 -0
  41. package/dist/dynamodb.d.ts.map +1 -0
  42. package/dist/dynamodb.js +31 -0
  43. package/dist/dynamodb.js.map +1 -0
  44. package/dist/errors.d.ts +100 -0
  45. package/dist/errors.d.ts.map +1 -0
  46. package/dist/errors.js +146 -0
  47. package/dist/errors.js.map +1 -0
  48. package/dist/index.d.ts +10 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +7 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/integrations/react-admin/dataProvider.d.ts +59 -0
  53. package/dist/integrations/react-admin/dataProvider.d.ts.map +1 -0
  54. package/dist/integrations/react-admin/dataProvider.js +364 -0
  55. package/dist/integrations/react-admin/dataProvider.js.map +1 -0
  56. package/dist/integrations/react-admin/index.d.ts +24 -0
  57. package/dist/integrations/react-admin/index.d.ts.map +1 -0
  58. package/dist/integrations/react-admin/index.js +23 -0
  59. package/dist/integrations/react-admin/index.js.map +1 -0
  60. package/dist/integrations/react-admin/types.d.ts +47 -0
  61. package/dist/integrations/react-admin/types.d.ts.map +1 -0
  62. package/dist/integrations/react-admin/types.js +5 -0
  63. package/dist/integrations/react-admin/types.js.map +1 -0
  64. package/dist/logger.d.ts +61 -0
  65. package/dist/logger.d.ts.map +1 -0
  66. package/dist/logger.js +87 -0
  67. package/dist/logger.js.map +1 -0
  68. package/dist/scripts/repair-shadows.d.ts +3 -0
  69. package/dist/scripts/repair-shadows.d.ts.map +1 -0
  70. package/dist/scripts/repair-shadows.js +190 -0
  71. package/dist/scripts/repair-shadows.js.map +1 -0
  72. package/dist/server/handler.cjs +31378 -0
  73. package/dist/server/handler.cjs.map +7 -0
  74. package/dist/server/handler.d.ts +18 -0
  75. package/dist/server/handler.d.ts.map +1 -0
  76. package/dist/server/handler.js +435 -0
  77. package/dist/server/handler.js.map +1 -0
  78. package/dist/server/handler.zip +0 -0
  79. package/dist/server/index.d.ts +8 -0
  80. package/dist/server/index.d.ts.map +1 -0
  81. package/dist/server/index.js +8 -0
  82. package/dist/server/index.js.map +1 -0
  83. package/dist/server/operations/deleteMany.d.ts +18 -0
  84. package/dist/server/operations/deleteMany.d.ts.map +1 -0
  85. package/dist/server/operations/deleteMany.js +222 -0
  86. package/dist/server/operations/deleteMany.js.map +1 -0
  87. package/dist/server/operations/deleteOne.d.ts +17 -0
  88. package/dist/server/operations/deleteOne.d.ts.map +1 -0
  89. package/dist/server/operations/deleteOne.js +87 -0
  90. package/dist/server/operations/deleteOne.js.map +1 -0
  91. package/dist/server/operations/find.d.ts +18 -0
  92. package/dist/server/operations/find.d.ts.map +1 -0
  93. package/dist/server/operations/find.js +382 -0
  94. package/dist/server/operations/find.js.map +1 -0
  95. package/dist/server/operations/findMany.d.ts +13 -0
  96. package/dist/server/operations/findMany.d.ts.map +1 -0
  97. package/dist/server/operations/findMany.js +61 -0
  98. package/dist/server/operations/findMany.js.map +1 -0
  99. package/dist/server/operations/findManyReference.d.ts +18 -0
  100. package/dist/server/operations/findManyReference.d.ts.map +1 -0
  101. package/dist/server/operations/findManyReference.js +150 -0
  102. package/dist/server/operations/findManyReference.js.map +1 -0
  103. package/dist/server/operations/findOne.d.ts +14 -0
  104. package/dist/server/operations/findOne.d.ts.map +1 -0
  105. package/dist/server/operations/findOne.js +56 -0
  106. package/dist/server/operations/findOne.js.map +1 -0
  107. package/dist/server/operations/insertMany.d.ts +19 -0
  108. package/dist/server/operations/insertMany.d.ts.map +1 -0
  109. package/dist/server/operations/insertMany.js +243 -0
  110. package/dist/server/operations/insertMany.js.map +1 -0
  111. package/dist/server/operations/insertOne.d.ts +18 -0
  112. package/dist/server/operations/insertOne.d.ts.map +1 -0
  113. package/dist/server/operations/insertOne.js +85 -0
  114. package/dist/server/operations/insertOne.js.map +1 -0
  115. package/dist/server/operations/updateMany.d.ts +20 -0
  116. package/dist/server/operations/updateMany.d.ts.map +1 -0
  117. package/dist/server/operations/updateMany.js +316 -0
  118. package/dist/server/operations/updateMany.js.map +1 -0
  119. package/dist/server/operations/updateOne.d.ts +20 -0
  120. package/dist/server/operations/updateOne.d.ts.map +1 -0
  121. package/dist/server/operations/updateOne.js +159 -0
  122. package/dist/server/operations/updateOne.js.map +1 -0
  123. package/dist/server/query/converter.d.ts +85 -0
  124. package/dist/server/query/converter.d.ts.map +1 -0
  125. package/dist/server/query/converter.js +161 -0
  126. package/dist/server/query/converter.js.map +1 -0
  127. package/dist/server/query/index.d.ts +5 -0
  128. package/dist/server/query/index.d.ts.map +1 -0
  129. package/dist/server/query/index.js +5 -0
  130. package/dist/server/query/index.js.map +1 -0
  131. package/dist/server/shadow/config.d.ts +147 -0
  132. package/dist/server/shadow/config.d.ts.map +1 -0
  133. package/dist/server/shadow/config.js +162 -0
  134. package/dist/server/shadow/config.js.map +1 -0
  135. package/dist/server/shadow/differ.d.ts +42 -0
  136. package/dist/server/shadow/differ.d.ts.map +1 -0
  137. package/dist/server/shadow/differ.js +66 -0
  138. package/dist/server/shadow/differ.js.map +1 -0
  139. package/dist/server/shadow/generator.d.ts +104 -0
  140. package/dist/server/shadow/generator.d.ts.map +1 -0
  141. package/dist/server/shadow/generator.js +148 -0
  142. package/dist/server/shadow/generator.js.map +1 -0
  143. package/dist/server/shadow/index.d.ts +11 -0
  144. package/dist/server/shadow/index.d.ts.map +1 -0
  145. package/dist/server/shadow/index.js +11 -0
  146. package/dist/server/shadow/index.js.map +1 -0
  147. package/dist/server/shadow/types.d.ts +44 -0
  148. package/dist/server/shadow/types.d.ts.map +1 -0
  149. package/dist/server/shadow/types.js +2 -0
  150. package/dist/server/shadow/types.js.map +1 -0
  151. package/dist/server/types.d.ts +295 -0
  152. package/dist/server/types.d.ts.map +1 -0
  153. package/dist/server/types.js +7 -0
  154. package/dist/server/types.js.map +1 -0
  155. package/dist/server/utils/auth.d.ts +43 -0
  156. package/dist/server/utils/auth.d.ts.map +1 -0
  157. package/dist/server/utils/auth.js +123 -0
  158. package/dist/server/utils/auth.js.map +1 -0
  159. package/dist/server/utils/bulkOperations.d.ts +81 -0
  160. package/dist/server/utils/bulkOperations.d.ts.map +1 -0
  161. package/dist/server/utils/bulkOperations.js +147 -0
  162. package/dist/server/utils/bulkOperations.js.map +1 -0
  163. package/dist/server/utils/chunking.d.ts +96 -0
  164. package/dist/server/utils/chunking.d.ts.map +1 -0
  165. package/dist/server/utils/chunking.js +225 -0
  166. package/dist/server/utils/chunking.js.map +1 -0
  167. package/dist/server/utils/dynamodb.d.ts +41 -0
  168. package/dist/server/utils/dynamodb.d.ts.map +1 -0
  169. package/dist/server/utils/dynamodb.js +83 -0
  170. package/dist/server/utils/dynamodb.js.map +1 -0
  171. package/dist/server/utils/filter.d.ts +152 -0
  172. package/dist/server/utils/filter.d.ts.map +1 -0
  173. package/dist/server/utils/filter.js +270 -0
  174. package/dist/server/utils/filter.js.map +1 -0
  175. package/dist/server/utils/pagination.d.ts +27 -0
  176. package/dist/server/utils/pagination.d.ts.map +1 -0
  177. package/dist/server/utils/pagination.js +56 -0
  178. package/dist/server/utils/pagination.js.map +1 -0
  179. package/dist/server/utils/timestamps.d.ts +31 -0
  180. package/dist/server/utils/timestamps.d.ts.map +1 -0
  181. package/dist/server/utils/timestamps.js +84 -0
  182. package/dist/server/utils/timestamps.js.map +1 -0
  183. package/dist/server/utils/ttl.d.ts +17 -0
  184. package/dist/server/utils/ttl.d.ts.map +1 -0
  185. package/dist/server/utils/ttl.js +62 -0
  186. package/dist/server/utils/ttl.js.map +1 -0
  187. package/dist/server/utils/validation.d.ts +40 -0
  188. package/dist/server/utils/validation.d.ts.map +1 -0
  189. package/dist/server/utils/validation.js +54 -0
  190. package/dist/server/utils/validation.js.map +1 -0
  191. package/dist/shadows/config.d.ts +54 -0
  192. package/dist/shadows/config.d.ts.map +1 -0
  193. package/dist/shadows/config.js +95 -0
  194. package/dist/shadows/config.js.map +1 -0
  195. package/dist/shadows/differ.d.ts +42 -0
  196. package/dist/shadows/differ.d.ts.map +1 -0
  197. package/dist/shadows/differ.js +66 -0
  198. package/dist/shadows/differ.js.map +1 -0
  199. package/dist/shadows/generator.d.ts +63 -0
  200. package/dist/shadows/generator.d.ts.map +1 -0
  201. package/dist/shadows/generator.js +107 -0
  202. package/dist/shadows/generator.js.map +1 -0
  203. package/dist/shadows/index.d.ts +15 -0
  204. package/dist/shadows/index.d.ts.map +1 -0
  205. package/dist/shadows/index.js +17 -0
  206. package/dist/shadows/index.js.map +1 -0
  207. package/dist/shadows/types.d.ts +44 -0
  208. package/dist/shadows/types.d.ts.map +1 -0
  209. package/dist/shadows/types.js +2 -0
  210. package/dist/shadows/types.js.map +1 -0
  211. package/dist/types.d.ts +165 -0
  212. package/dist/types.d.ts.map +1 -0
  213. package/dist/types.js +2 -0
  214. package/dist/types.js.map +1 -0
  215. package/dist/ulid.d.ts +46 -0
  216. package/dist/ulid.d.ts.map +1 -0
  217. package/dist/ulid.js +66 -0
  218. package/dist/ulid.js.map +1 -0
  219. package/package.json +136 -0
  220. package/terraform/README.md +222 -0
  221. package/terraform/examples/advanced/README.md +129 -0
  222. package/terraform/examples/advanced/main.tf +158 -0
  223. package/terraform/examples/advanced/shadow.config.json +35 -0
  224. package/terraform/examples/advanced/variables.tf +28 -0
  225. package/terraform/examples/basic/README.md +53 -0
  226. package/terraform/examples/basic/main.tf +99 -0
  227. package/terraform/examples/basic/variables.tf +17 -0
  228. package/terraform/main.tf +159 -0
  229. package/terraform/outputs.tf +56 -0
  230. package/terraform/variables.tf +59 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findManyReference.js","sourceRoot":"","sources":["../../../src/server/operations/findManyReference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { FindOneParams, FindOneResult } from '../types.js';
2
+ /**
3
+ * findOne 操作を実行する
4
+ *
5
+ * GetItemでメインレコードを取得し、__shadowKeysを除外してレスポンスを返す。
6
+ *
7
+ * @param resource - リソース名
8
+ * @param params - findOneパラメータ
9
+ * @param requestId - リクエストID
10
+ * @returns レコードデータ
11
+ * @throws {ItemNotFoundError} レコードが存在しない場合
12
+ */
13
+ export declare function handleFindOne(resource: string, params: FindOneParams, requestId: string): Promise<FindOneResult>;
14
+ //# sourceMappingURL=findOne.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../src/server/operations/findOne.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUhE;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CA8CxB"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * findOne 操作
3
+ * 単一レコードをIDで取得する
4
+ *
5
+ * 要件: 4.3, 5.4, 5.5
6
+ */
7
+ import { GetCommand } from '@aws-sdk/lib-dynamodb';
8
+ import { ItemNotFoundError, createLogger } from '../../index.js';
9
+ import { generateMainRecordSK } from '../shadow/index.js';
10
+ import { executeDynamoDBOperation, extractCleanRecord, getDBClient, getTableName, } from '../utils/dynamodb.js';
11
+ const logger = createLogger({ service: 'records-lambda' });
12
+ /**
13
+ * findOne 操作を実行する
14
+ *
15
+ * GetItemでメインレコードを取得し、__shadowKeysを除外してレスポンスを返す。
16
+ *
17
+ * @param resource - リソース名
18
+ * @param params - findOneパラメータ
19
+ * @param requestId - リクエストID
20
+ * @returns レコードデータ
21
+ * @throws {ItemNotFoundError} レコードが存在しない場合
22
+ */
23
+ export async function handleFindOne(resource, params, requestId) {
24
+ const { id } = params;
25
+ logger.debug('Executing findOne', {
26
+ requestId,
27
+ resource,
28
+ id,
29
+ });
30
+ const dbClient = getDBClient();
31
+ const tableName = getTableName();
32
+ // メインレコードのSKを生成
33
+ const sk = generateMainRecordSK(id);
34
+ // GetItemでレコードを取得(ConsistentRead=true)
35
+ const result = await executeDynamoDBOperation(() => dbClient.send(new GetCommand({
36
+ TableName: tableName,
37
+ Key: {
38
+ PK: resource,
39
+ SK: sk,
40
+ },
41
+ ConsistentRead: true,
42
+ })), 'GetItem');
43
+ // レコードが存在しない場合
44
+ if (!result.Item) {
45
+ throw new ItemNotFoundError(`Record not found: ${id}`, { resource, id });
46
+ }
47
+ // data属性から__shadowKeysを除外してレスポンスを返す
48
+ const record = extractCleanRecord(result.Item);
49
+ logger.info('findOne succeeded', {
50
+ requestId,
51
+ resource,
52
+ id,
53
+ });
54
+ return record;
55
+ }
56
+ //# sourceMappingURL=findOne.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findOne.js","sourceRoot":"","sources":["../../../src/server/operations/findOne.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,MAAqB,EACrB,SAAiB;IAEjB,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;IAEtB,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE;QAChC,SAAS;QACT,QAAQ;QACR,EAAE;KACH,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,gBAAgB;IAChB,MAAM,EAAE,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEpC,uCAAuC;IACvC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,GAAG,EAAE,CACH,QAAQ,CAAC,IAAI,CACX,IAAI,UAAU,CAAC;QACb,SAAS,EAAE,SAAS;QACpB,GAAG,EAAE;YACH,EAAE,EAAE,QAAQ;YACZ,EAAE,EAAE,EAAE;SACP;QACD,cAAc,EAAE,IAAI;KACrB,CAAC,CACH,EACH,SAAS,CACV,CAAC;IAEF,eAAe;IACf,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,iBAAiB,CAAC,qBAAqB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,oCAAoC;IACpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;QAC/B,SAAS;QACT,QAAQ;QACR,EAAE;KACH,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { InsertManyParams, InsertManyResult } from '../types.js';
2
+ /**
3
+ * insertMany 操作を実行する
4
+ *
5
+ * 処理フロー:
6
+ * 1. 各レコードにULIDを生成
7
+ * 2. createdAt, updatedAtタイムスタンプを追加
8
+ * 3. シャドー設定を読み込み、全シャドーSKを生成
9
+ * 4. アイテム数を計算してチャンク分割(1 + シャドー数)
10
+ * 5. 各チャンクをTransactWriteItemsで順次実行
11
+ * 6. 部分失敗をハンドリング
12
+ *
13
+ * @param resource - リソース名
14
+ * @param params - insertManyパラメータ
15
+ * @param requestId - リクエストID
16
+ * @returns 作成結果(成功レコード、失敗ID、エラー情報)
17
+ */
18
+ export declare function handleInsertMany(resource: string, params: InsertManyParams, requestId: string): Promise<InsertManyResult>;
19
+ //# sourceMappingURL=insertMany.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertMany.d.ts","sourceRoot":"","sources":["../../../src/server/operations/insertMany.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AA6BtF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAkQ3B"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * insertMany 操作
3
+ * 複数レコードを一括作成する
4
+ *
5
+ * 要件: 4.1, 4.2, 5.2, 5.3, 7.4, 13.1, 13.2, 13.3, 13.7, 13.12
6
+ */
7
+ import { TransactWriteCommand } from '@aws-sdk/lib-dynamodb';
8
+ import { createLogger, generateShadowRecords, getResourceSchema, getShadowConfig, ulid, } from '../../index.js';
9
+ import { getSchemaVersion, getShadowConfigHash } from '../shadow/config.js';
10
+ import { generateMainRecordSK } from '../shadow/index.js';
11
+ import { calculateTimeoutRisk, logBulkOperationComplete, logLargeBatchWarning, logPartialFailure, logPreparationTimeoutRisk, } from '../utils/bulkOperations.js';
12
+ import { calculateChunks, executeChunks } from '../utils/chunking.js';
13
+ import { executeDynamoDBOperation, getDBClient, getTableName } from '../utils/dynamodb.js';
14
+ import { addCreateTimestamps } from '../utils/timestamps.js';
15
+ import { addTTL } from '../utils/ttl.js';
16
+ const logger = createLogger({ service: 'records-lambda' });
17
+ /**
18
+ * insertMany 操作を実行する
19
+ *
20
+ * 処理フロー:
21
+ * 1. 各レコードにULIDを生成
22
+ * 2. createdAt, updatedAtタイムスタンプを追加
23
+ * 3. シャドー設定を読み込み、全シャドーSKを生成
24
+ * 4. アイテム数を計算してチャンク分割(1 + シャドー数)
25
+ * 5. 各チャンクをTransactWriteItemsで順次実行
26
+ * 6. 部分失敗をハンドリング
27
+ *
28
+ * @param resource - リソース名
29
+ * @param params - insertManyパラメータ
30
+ * @param requestId - リクエストID
31
+ * @returns 作成結果(成功レコード、失敗ID、エラー情報)
32
+ */
33
+ export async function handleInsertMany(resource, params, requestId) {
34
+ const { data: recordsData } = params;
35
+ const startTime = Date.now();
36
+ logger.debug('Executing insertMany', {
37
+ requestId,
38
+ resource,
39
+ count: recordsData.length,
40
+ });
41
+ // データが空の場合は空レスポンスを返す
42
+ if (recordsData.length === 0) {
43
+ return {
44
+ count: 0,
45
+ successIds: {},
46
+ failedIds: {},
47
+ errors: {},
48
+ };
49
+ }
50
+ // 大量レコード処理時の警告ログ出力(要件: 13.12)
51
+ logLargeBatchWarning('insertMany', recordsData.length, requestId, resource);
52
+ const dbClient = getDBClient();
53
+ const tableName = getTableName();
54
+ // シャドー設定を取得(環境変数からキャッシュ付き)
55
+ const shadowConfig = getShadowConfig();
56
+ const shadowSchema = getResourceSchema(shadowConfig, resource);
57
+ const preparedRecords = [];
58
+ const preparationFailedIds = [];
59
+ const preparationErrors = [];
60
+ // 各レコードを準備
61
+ for (let i = 0; i < recordsData.length; i++) {
62
+ const recordData = recordsData[i];
63
+ try {
64
+ // IDを決定(指定されていればそれを使用、なければULIDを生成)
65
+ const id = recordData.id || ulid();
66
+ // レコードデータを構築(タイムスタンプとTTLを動的に追加)
67
+ let fullRecordData = addCreateTimestamps({
68
+ ...recordData,
69
+ id,
70
+ });
71
+ // TTLを追加(リソースに応じて)
72
+ fullRecordData = addTTL(resource, fullRecordData);
73
+ // 設定メタデータを追加(要件: 11.12)
74
+ fullRecordData.__configVersion = getSchemaVersion();
75
+ fullRecordData.__configHash = getShadowConfigHash();
76
+ // シャドーレコードを生成
77
+ const shadowRecords = generateShadowRecords(fullRecordData, shadowSchema);
78
+ const shadowKeys = shadowRecords.map((shadow) => shadow.SK);
79
+ // メインレコードのSKを生成
80
+ const mainSK = generateMainRecordSK(id);
81
+ preparedRecords.push({
82
+ id,
83
+ fullRecordData,
84
+ shadowKeys,
85
+ mainSK,
86
+ });
87
+ }
88
+ catch (error) {
89
+ // 準備段階で失敗したレコードのIDを決定
90
+ const failedId = recordData.id || `temp-id-${i}`;
91
+ const errorMessage = error instanceof Error ? error.message : 'Unknown preparation error';
92
+ const errorCode = getPreparationErrorCode(error);
93
+ logger.error('Failed to prepare record for creation', {
94
+ requestId,
95
+ recordId: failedId,
96
+ error: errorMessage,
97
+ errorCode,
98
+ recordData,
99
+ });
100
+ // 準備失敗をエラーリストに追加
101
+ preparationFailedIds.push(failedId);
102
+ preparationErrors.push({
103
+ id: failedId,
104
+ code: errorCode,
105
+ message: errorMessage,
106
+ });
107
+ }
108
+ }
109
+ // アイテム数計算関数(1 + シャドー数)
110
+ const getItemCount = (record) => {
111
+ return 1 + record.shadowKeys.length;
112
+ };
113
+ // チャンク分割
114
+ const { chunks } = calculateChunks(preparedRecords, getItemCount);
115
+ // 準備段階の経過時間をチェック(要件: 13.12)
116
+ const preparationRiskInfo = calculateTimeoutRisk(startTime);
117
+ logPreparationTimeoutRisk(requestId, resource, preparedRecords.length, chunks.length, preparationRiskInfo);
118
+ // チャンク実行関数
119
+ const executeChunk = async (chunk) => {
120
+ const transactItems = [];
121
+ // チャンク内の各レコードをTransactItemsに変換
122
+ for (const record of chunk) {
123
+ // メインレコードを追加
124
+ transactItems.push({
125
+ Put: {
126
+ TableName: tableName,
127
+ Item: {
128
+ PK: resource,
129
+ SK: record.mainSK,
130
+ data: {
131
+ ...record.fullRecordData,
132
+ __shadowKeys: record.shadowKeys,
133
+ },
134
+ },
135
+ },
136
+ });
137
+ // シャドーレコードを追加
138
+ for (const shadowSK of record.shadowKeys) {
139
+ transactItems.push({
140
+ Put: {
141
+ TableName: tableName,
142
+ Item: {
143
+ PK: resource,
144
+ SK: shadowSK,
145
+ data: {},
146
+ },
147
+ },
148
+ });
149
+ }
150
+ }
151
+ // TransactWriteItemsを実行
152
+ await executeDynamoDBOperation(() => dbClient.send(new TransactWriteCommand({
153
+ TransactItems: transactItems,
154
+ })), 'TransactWriteItems');
155
+ // 成功したレコードを返す
156
+ return chunk;
157
+ };
158
+ // チャンクを順次実行
159
+ const { successRecords, failedIds: chunkFailedIds, errors: chunkErrors, } = await executeChunks(chunks, executeChunk, (record) => record.id);
160
+ // 統一レスポンス形式を構築
161
+ // successIds: インデックス付きオブジェクト(元の配列のインデックスとIDのマッピング)
162
+ const successIds = {};
163
+ const failedIdsMap = {};
164
+ const errorsMap = {};
165
+ // 成功したレコードのインデックスを特定
166
+ const successIdSet = new Set(successRecords.map((r) => r.id));
167
+ for (let i = 0; i < preparedRecords.length; i++) {
168
+ const record = preparedRecords[i];
169
+ if (successIdSet.has(record.id)) {
170
+ successIds[i] = record.id;
171
+ }
172
+ }
173
+ // 準備失敗のインデックスを特定
174
+ for (let i = 0; i < recordsData.length; i++) {
175
+ const recordData = recordsData[i];
176
+ const id = recordData.id || `temp-id-${i}`;
177
+ if (preparationFailedIds.includes(id)) {
178
+ failedIdsMap[i] = id;
179
+ const error = preparationErrors.find((e) => e.id === id);
180
+ if (error) {
181
+ errorsMap[i] = error;
182
+ }
183
+ }
184
+ }
185
+ // チャンク実行失敗のインデックスを特定
186
+ for (let i = 0; i < preparedRecords.length; i++) {
187
+ const record = preparedRecords[i];
188
+ if (chunkFailedIds.includes(record.id)) {
189
+ failedIdsMap[i] = record.id;
190
+ const error = chunkErrors.find((e) => e.id === record.id);
191
+ if (error) {
192
+ errorsMap[i] = {
193
+ id: error.id,
194
+ code: error.code,
195
+ message: error.message,
196
+ };
197
+ }
198
+ }
199
+ }
200
+ const count = Object.keys(successIds).length;
201
+ const allFailedIds = Object.values(failedIdsMap);
202
+ // 総実行時間を計算(要件: 13.12)
203
+ const completionRiskInfo = calculateTimeoutRisk(startTime);
204
+ logBulkOperationComplete('insertMany', requestId, resource, recordsData.length, count, allFailedIds.length, completionRiskInfo, {
205
+ created: count,
206
+ preparationFailed: preparationFailedIds.length,
207
+ chunkExecutionFailed: chunkFailedIds.length,
208
+ });
209
+ // 部分失敗の場合、詳細なエラーサマリーをログ出力
210
+ if (allFailedIds.length > 0) {
211
+ logPartialFailure('insertMany', requestId, resource, recordsData.length, count, allFailedIds.length, Object.values(errorsMap).map((e) => e.code), {
212
+ preparationFailures: preparationFailedIds.length,
213
+ chunkExecutionFailures: chunkFailedIds.length,
214
+ });
215
+ }
216
+ // 統一レスポンス形式で返却
217
+ return {
218
+ count,
219
+ successIds,
220
+ failedIds: failedIdsMap,
221
+ errors: errorsMap,
222
+ };
223
+ }
224
+ /**
225
+ * 準備段階のエラーからエラーコードを抽出する
226
+ *
227
+ * @param error - エラーオブジェクト
228
+ * @returns エラーコード
229
+ */
230
+ function getPreparationErrorCode(error) {
231
+ if (error && typeof error === 'object') {
232
+ // カスタムエラー
233
+ if ('code' in error && typeof error.code === 'string') {
234
+ return error.code;
235
+ }
236
+ // AWS SDK エラー
237
+ if ('name' in error && typeof error.name === 'string') {
238
+ return error.name;
239
+ }
240
+ }
241
+ return 'VALIDATION_ERROR';
242
+ }
243
+ //# sourceMappingURL=insertMany.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertMany.js","sourceRoot":"","sources":["../../../src/server/operations/insertMany.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { InsertOneParams, InsertOneResult } from '../types.js';
2
+ /**
3
+ * insertOne 操作を実行する
4
+ *
5
+ * 処理フロー:
6
+ * 1. ULIDを生成してレコードIDを作成
7
+ * 2. createdAt, updatedAtタイムスタンプを追加
8
+ * 3. シャドー設定を読み込み、全シャドーSKを生成
9
+ * 4. メインレコードをPutItemで保存
10
+ * 5. シャドーレコードをPutItemで保存
11
+ *
12
+ * @param resource - リソース名
13
+ * @param params - insertOneパラメータ
14
+ * @param requestId - リクエストID
15
+ * @returns 作成されたレコード
16
+ */
17
+ export declare function handleInsertOne(resource: string, params: InsertOneParams, requestId: string): Promise<InsertOneResult>;
18
+ //# sourceMappingURL=insertOne.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertOne.d.ts","sourceRoot":"","sources":["../../../src/server/operations/insertOne.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAYpE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CA8E1B"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * insertOne 操作
3
+ * 単一レコードを作成する
4
+ *
5
+ * 要件: 4.1, 4.2, 5.2, 5.3
6
+ */
7
+ import { PutCommand } from '@aws-sdk/lib-dynamodb';
8
+ import { createLogger, generateShadowRecords, getResourceSchema, getShadowConfig, ulid, } from '../../index.js';
9
+ import { getSchemaVersion, getShadowConfigHash } from '../shadow/config.js';
10
+ import { generateMainRecordSK } from '../shadow/index.js';
11
+ import { executeDynamoDBOperation, getDBClient, getTableName, removeShadowKeys, } from '../utils/dynamodb.js';
12
+ import { addCreateTimestamps } from '../utils/timestamps.js';
13
+ import { addTTL } from '../utils/ttl.js';
14
+ const logger = createLogger({ service: 'records-lambda' });
15
+ /**
16
+ * insertOne 操作を実行する
17
+ *
18
+ * 処理フロー:
19
+ * 1. ULIDを生成してレコードIDを作成
20
+ * 2. createdAt, updatedAtタイムスタンプを追加
21
+ * 3. シャドー設定を読み込み、全シャドーSKを生成
22
+ * 4. メインレコードをPutItemで保存
23
+ * 5. シャドーレコードをPutItemで保存
24
+ *
25
+ * @param resource - リソース名
26
+ * @param params - insertOneパラメータ
27
+ * @param requestId - リクエストID
28
+ * @returns 作成されたレコード
29
+ */
30
+ export async function handleInsertOne(resource, params, requestId) {
31
+ logger.debug('Executing insertOne', {
32
+ requestId,
33
+ resource,
34
+ });
35
+ const dbClient = getDBClient();
36
+ const tableName = getTableName();
37
+ // IDを決定(指定されていればそれを使用、なければULIDを生成)
38
+ const id = params.data.id || ulid();
39
+ // レコードデータを構築(id、タイムスタンプ、TTLを追加)
40
+ let recordData = addCreateTimestamps({
41
+ ...params.data,
42
+ id,
43
+ });
44
+ // TTLを追加(リソースに応じて)
45
+ recordData = addTTL(resource, recordData);
46
+ // 設定メタデータを追加(要件: 11.12)
47
+ recordData.__configVersion = getSchemaVersion();
48
+ recordData.__configHash = getShadowConfigHash();
49
+ // シャドー設定を取得(環境変数からキャッシュ付き)
50
+ const shadowConfig = getShadowConfig();
51
+ const shadowSchema = getResourceSchema(shadowConfig, resource);
52
+ // シャドーレコードを生成
53
+ const shadowRecords = generateShadowRecords(recordData, shadowSchema);
54
+ const shadowKeys = shadowRecords.map((shadow) => shadow.SK);
55
+ // メインレコードのSKを生成
56
+ const mainSK = generateMainRecordSK(id);
57
+ // メインレコードを保存(__shadowKeysを含む)
58
+ await executeDynamoDBOperation(() => dbClient.send(new PutCommand({
59
+ TableName: tableName,
60
+ Item: {
61
+ PK: resource,
62
+ SK: mainSK,
63
+ data: {
64
+ ...recordData,
65
+ __shadowKeys: shadowKeys,
66
+ },
67
+ },
68
+ })), 'PutItem');
69
+ // シャドーレコードを保存
70
+ for (const shadowRecord of shadowRecords) {
71
+ await executeDynamoDBOperation(() => dbClient.send(new PutCommand({
72
+ TableName: tableName,
73
+ Item: shadowRecord,
74
+ })), 'PutItem');
75
+ }
76
+ logger.info('insertOne succeeded', {
77
+ requestId,
78
+ resource,
79
+ id,
80
+ shadowCount: shadowKeys.length,
81
+ });
82
+ // __shadowKeysを除外してレスポンスを返す
83
+ return removeShadowKeys(recordData);
84
+ }
85
+ //# sourceMappingURL=insertOne.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertOne.js","sourceRoot":"","sources":["../../../src/server/operations/insertOne.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { UpdateManyParams, UpdateManyResult } from '../types.js';
2
+ /**
3
+ * updateMany 操作を実行する
4
+ *
5
+ * 処理フロー:
6
+ * 1. BatchGetItemで既存レコードを取得
7
+ * 2. 各レコードにJSON Merge Patchを適用
8
+ * 3. updatedAtタイムスタンプを更新
9
+ * 4. 新しいシャドーSKを生成し、差分を計算
10
+ * 5. アイテム数を計算してチャンク分割(1 + 削除シャドー数 + 追加シャドー数)
11
+ * 6. 各チャンクをTransactWriteItemsで順次実行
12
+ * 7. 部分失敗をハンドリング
13
+ *
14
+ * @param resource - リソース名
15
+ * @param params - updateManyパラメータ
16
+ * @param requestId - リクエストID
17
+ * @returns 更新結果(成功レコード、失敗ID、エラー情報)
18
+ */
19
+ export declare function handleUpdateMany(resource: string, params: UpdateManyParams, requestId: string): Promise<UpdateManyResult>;
20
+ //# sourceMappingURL=updateMany.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateMany.d.ts","sourceRoot":"","sources":["../../../src/server/operations/updateMany.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAkB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAuEtF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAiU3B"}