@exabugs/dynamodb-client 1.3.35 → 1.3.36

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 (30) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/server/handler.cjs +706 -1639
  3. package/dist/server/handler.cjs.map +4 -4
  4. package/dist/server/operations/deleteOne.d.ts +4 -5
  5. package/dist/server/operations/deleteOne.d.ts.map +1 -1
  6. package/dist/server/operations/deleteOne.js +51 -71
  7. package/dist/server/operations/deleteOne.js.map +1 -1
  8. package/dist/server/operations/findMany.d.ts +4 -2
  9. package/dist/server/operations/findMany.d.ts.map +1 -1
  10. package/dist/server/operations/findMany.js +66 -39
  11. package/dist/server/operations/findMany.js.map +1 -1
  12. package/dist/server/operations/findOne.d.ts +4 -4
  13. package/dist/server/operations/findOne.d.ts.map +1 -1
  14. package/dist/server/operations/findOne.js +28 -41
  15. package/dist/server/operations/findOne.js.map +1 -1
  16. package/dist/server/operations/insertOne.d.ts +4 -5
  17. package/dist/server/operations/insertOne.d.ts.map +1 -1
  18. package/dist/server/operations/insertOne.js +33 -48
  19. package/dist/server/operations/insertOne.js.map +1 -1
  20. package/dist/server/operations/parameterConverter.d.ts +1 -0
  21. package/dist/server/operations/parameterConverter.d.ts.map +1 -1
  22. package/dist/server/operations/parameterConverter.js +13 -5
  23. package/dist/server/operations/parameterConverter.js.map +1 -1
  24. package/dist/server/operations/updateOne.d.ts +4 -6
  25. package/dist/server/operations/updateOne.d.ts.map +1 -1
  26. package/dist/server/operations/updateOne.js +53 -266
  27. package/dist/server/operations/updateOne.js.map +1 -1
  28. package/dist/server/types.d.ts +2 -10
  29. package/dist/server/types.d.ts.map +1 -1
  30. package/package.json +1 -1
@@ -3,16 +3,15 @@ import type { DeleteOneParams, DeleteOneResult } from '../types.js';
3
3
  * deleteOne 操作を実行する
4
4
  *
5
5
  * 処理フロー:
6
- * 1. filterまたはidから対象レコードを特定
7
- * 2. GetItemで既存レコードを取得(存在確認)
8
- * 3. __shadowKeysからシャドーSKリストを取得
9
- * 4. TransactWriteItemsでメインレコード + 全シャドーレコードを削除
6
+ * 1. deleteMany([id])を呼び出す(idまたはfilterから対象を特定)
7
+ * 2. 結果を検証し、失敗した場合は通常のErrorをスロー
8
+ * 3. 成功した場合は削除されたIDを返却
10
9
  *
11
10
  * @param resource - リソース名
12
11
  * @param params - deleteOneパラメータ
13
12
  * @param requestId - リクエストID
14
13
  * @returns 削除されたレコードのID
15
- * @throws {ItemNotFoundError} レコードが存在しない場合
14
+ * @throws {Error} レコードが存在しない場合、または削除に失敗した場合
16
15
  */
17
16
  export declare function handleDeleteOne(resource: string, params: DeleteOneParams, requestId: string): Promise<DeleteOneResult>;
18
17
  //# sourceMappingURL=deleteOne.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deleteOne.d.ts","sourceRoot":"","sources":["../../../src/server/operations/deleteOne.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAKpE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAqH1B"}
1
+ {"version":3,"file":"deleteOne.d.ts","sourceRoot":"","sources":["../../../src/server/operations/deleteOne.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIpE;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAkF1B"}
@@ -3,28 +3,28 @@
3
3
  * 単一レコードを削除する
4
4
  *
5
5
  * 要件: 4.4, 5.2, 5.3
6
+ *
7
+ * リファクタリング: deleteManyを内部で使用
6
8
  */
7
- import { GetCommand, TransactWriteCommand } from '@aws-sdk/lib-dynamodb';
8
- import { ItemNotFoundError, createLogger } from '../../shared/index.js';
9
- import { generateMainRecordSK } from '../shadow/index.js';
10
- import { executeDynamoDBOperation, getDBClient, getTableName } from '../utils/dynamodb.js';
9
+ import { createLogger } from '../../shared/index.js';
11
10
  const logger = createLogger({ service: 'records-lambda' });
12
11
  /**
13
12
  * deleteOne 操作を実行する
14
13
  *
15
14
  * 処理フロー:
16
- * 1. filterまたはidから対象レコードを特定
17
- * 2. GetItemで既存レコードを取得(存在確認)
18
- * 3. __shadowKeysからシャドーSKリストを取得
19
- * 4. TransactWriteItemsでメインレコード + 全シャドーレコードを削除
15
+ * 1. deleteMany([id])を呼び出す(idまたはfilterから対象を特定)
16
+ * 2. 結果を検証し、失敗した場合は通常のErrorをスロー
17
+ * 3. 成功した場合は削除されたIDを返却
20
18
  *
21
19
  * @param resource - リソース名
22
20
  * @param params - deleteOneパラメータ
23
21
  * @param requestId - リクエストID
24
22
  * @returns 削除されたレコードのID
25
- * @throws {ItemNotFoundError} レコードが存在しない場合
23
+ * @throws {Error} レコードが存在しない場合、または削除に失敗した場合
26
24
  */
27
25
  export async function handleDeleteOne(resource, params, requestId) {
26
+ // deleteManyをインポート
27
+ const { handleDeleteMany } = await import('./deleteMany.js');
28
28
  // idまたはfilterから対象レコードを特定
29
29
  let targetId;
30
30
  if ('id' in params) {
@@ -35,6 +35,23 @@ export async function handleDeleteOne(resource, params, requestId) {
35
35
  resource,
36
36
  id: targetId,
37
37
  });
38
+ // deleteMany([id])を呼び出す
39
+ const deleteManyResult = await handleDeleteMany(resource, {
40
+ ids: [targetId],
41
+ }, requestId);
42
+ // 結果を検証
43
+ if (deleteManyResult.count === 0) {
44
+ // 削除に失敗した場合
45
+ const error = Object.values(deleteManyResult.errors)[0];
46
+ if (error) {
47
+ throw new Error(`Failed to delete record: ${error.message}`);
48
+ }
49
+ else {
50
+ throw new Error(`Failed to delete record: ${targetId}`);
51
+ }
52
+ }
53
+ // 既存のインターフェースを維持: { id } を返す
54
+ return { id: targetId };
38
55
  }
39
56
  else {
40
57
  // filterが指定されている場合
@@ -43,70 +60,33 @@ export async function handleDeleteOne(resource, params, requestId) {
43
60
  resource,
44
61
  filter: params.filter,
45
62
  });
46
- // filterで検索(find操作を使用)
47
- const { handleFind } = await import('./find.js');
48
- const findResult = await handleFind(resource, { filter: params.filter, pagination: { perPage: 1 } }, requestId);
49
- if (findResult.items.length === 0) {
50
- throw new ItemNotFoundError(`Record not found with filter`, {
51
- resource,
52
- filter: params.filter,
53
- });
63
+ // deleteMany({ filter })を呼び出す
64
+ const deleteManyResult = await handleDeleteMany(resource, {
65
+ filter: params.filter,
66
+ }, requestId);
67
+ // 結果を検証
68
+ if (deleteManyResult.count === 0) {
69
+ // 削除に失敗した場合
70
+ const error = Object.values(deleteManyResult.errors)[0];
71
+ if (error) {
72
+ throw new Error(`Failed to delete record: ${error.message}`);
73
+ }
74
+ else {
75
+ throw new Error(`No records found matching filter`);
76
+ }
54
77
  }
55
- const foundRecord = findResult.items[0];
56
- targetId = foundRecord.id;
57
- }
58
- const dbClient = getDBClient();
59
- const tableName = getTableName();
60
- // メインレコードのSKを生成
61
- const mainSK = generateMainRecordSK(targetId);
62
- // 既存レコードを取得(存在確認とシャドーキー取得)
63
- const getResult = await executeDynamoDBOperation(() => dbClient.send(new GetCommand({
64
- TableName: tableName,
65
- Key: {
66
- PK: resource,
67
- SK: mainSK,
68
- },
69
- ConsistentRead: true,
70
- })), 'GetItem');
71
- if (!getResult.Item) {
72
- throw new ItemNotFoundError(`Record not found: ${targetId}`, { resource, id: targetId });
73
- }
74
- const existingData = getResult.Item.data;
75
- const shadowKeys = existingData.__shadowKeys || [];
76
- // TransactWriteItemsで一括削除
77
- const transactItems = [];
78
- // メインレコードを削除
79
- transactItems.push({
80
- Delete: {
81
- TableName: tableName,
82
- Key: {
83
- PK: resource,
84
- SK: mainSK,
85
- },
86
- },
87
- });
88
- // 全シャドーレコードを削除
89
- for (const shadowSK of shadowKeys) {
90
- transactItems.push({
91
- Delete: {
92
- TableName: tableName,
93
- Key: {
94
- PK: resource,
95
- SK: shadowSK,
96
- },
97
- },
78
+ // 成功した場合は削除されたレコードのIDを取得
79
+ const deletedId = Object.values(deleteManyResult.successIds)[0];
80
+ if (!deletedId) {
81
+ throw new Error('Failed to get deleted record ID');
82
+ }
83
+ logger.info('deleteOne succeeded', {
84
+ requestId,
85
+ resource,
86
+ id: deletedId,
98
87
  });
88
+ // 既存のインターフェースを維持: { id } を返す
89
+ return { id: deletedId };
99
90
  }
100
- // トランザクション実行
101
- await executeDynamoDBOperation(() => dbClient.send(new TransactWriteCommand({
102
- TransactItems: transactItems,
103
- })), 'TransactWriteItems');
104
- logger.info('deleteOne succeeded', {
105
- requestId,
106
- resource,
107
- id: targetId,
108
- shadowCount: shadowKeys.length,
109
- });
110
- return { id: targetId };
111
91
  }
112
92
  //# sourceMappingURL=deleteOne.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deleteOne.js","sourceRoot":"","sources":["../../../src/server/operations/deleteOne.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deleteOne.js","sourceRoot":"","sources":["../../../src/server/operations/deleteOne.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,MAAuB,EACvB,SAAiB;IAEjB,mBAAmB;IACnB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE7D,yBAAyB;IACzB,IAAI,QAA4B,CAAC;IAEjC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;QACnB,eAAe;QACf,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;QAErB,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC1C,SAAS;YACT,QAAQ;YACR,EAAE,EAAE,QAAQ;SACb,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAC7C,QAAQ,EACR;YACE,GAAG,EAAE,CAAC,QAAQ,CAAC;SAChB,EACD,SAAS,CACV,CAAC;QAEF,QAAQ;QACR,IAAI,gBAAgB,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACjC,YAAY;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,mBAAmB;QACnB,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;YAC9C,SAAS;YACT,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,8BAA8B;QAC9B,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAC7C,QAAQ,EACR;YACE,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,EACD,SAAS,CACV,CAAC;QAEF,QAAQ;QACR,IAAI,gBAAgB,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACjC,YAAY;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACjC,SAAS;YACT,QAAQ;YACR,EAAE,EAAE,SAAS;SACd,CAAC,CAAC;QAEH,6BAA6B;QAC7B,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -2,10 +2,12 @@ import type { FindManyParams, FindManyResult } from '../types.js';
2
2
  /**
3
3
  * findMany 操作を実行する
4
4
  *
5
- * BatchGetItemで複数のメインレコードを取得し、__shadowKeysを除外してレスポンスを返す。
5
+ * idsが指定された場合はBatchGetItemで複数のメインレコードを取得し、
6
+ * filterが指定された場合はfind操作で検索する。
7
+ * __shadowKeysを除外してレスポンスを返す。
6
8
  *
7
9
  * @param resource - リソース名
8
- * @param params - findManyパラメータ
10
+ * @param params - findManyパラメータ(idsまたはfilter)
9
11
  * @param requestId - リクエストID
10
12
  * @returns レコードデータの配列
11
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../../src/server/operations/findMany.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlE;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAqDzB"}
1
+ {"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../../src/server/operations/findMany.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWlE;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAuFzB"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * findMany 操作
3
- * 複数レコードをIDリストで取得する
3
+ * 複数レコードをIDリストまたはフィルター条件で取得する
4
4
  *
5
5
  * 要件: 4.3, 5.4, 5.5
6
6
  */
@@ -8,54 +8,81 @@ import { BatchGetCommand } from '@aws-sdk/lib-dynamodb';
8
8
  import { createLogger } from '../../shared/index.js';
9
9
  import { generateMainRecordSK } from '../shadow/index.js';
10
10
  import { executeDynamoDBOperation, extractCleanRecord, getDBClient, getTableName, } from '../utils/dynamodb.js';
11
+ import { handleFind } from './find.js';
11
12
  const logger = createLogger({ service: 'records-lambda' });
12
13
  /**
13
14
  * findMany 操作を実行する
14
15
  *
15
- * BatchGetItemで複数のメインレコードを取得し、__shadowKeysを除外してレスポンスを返す。
16
+ * idsが指定された場合はBatchGetItemで複数のメインレコードを取得し、
17
+ * filterが指定された場合はfind操作で検索する。
18
+ * __shadowKeysを除外してレスポンスを返す。
16
19
  *
17
20
  * @param resource - リソース名
18
- * @param params - findManyパラメータ
21
+ * @param params - findManyパラメータ(idsまたはfilter)
19
22
  * @param requestId - リクエストID
20
23
  * @returns レコードデータの配列
21
24
  */
22
25
  export async function handleFindMany(resource, params, requestId) {
23
- const { ids } = params;
24
- logger.debug('Executing findMany', {
25
- requestId,
26
- resource,
27
- count: ids.length,
28
- });
29
- // IDが空の場合は空配列を返す
30
- if (ids.length === 0) {
31
- return [];
32
- }
33
- const dbClient = getDBClient();
34
- const tableName = getTableName();
35
- // BatchGetItemのキーを生成
36
- const keys = ids.map((id) => ({
37
- PK: resource,
38
- SK: generateMainRecordSK(id),
39
- }));
40
- // BatchGetItemでレコードを取得(ConsistentRead=true)
41
- const result = await executeDynamoDBOperation(() => dbClient.send(new BatchGetCommand({
42
- RequestItems: {
43
- [tableName]: {
44
- Keys: keys,
45
- ConsistentRead: true,
26
+ // idsが指定された場合は従来通りBatchGetItemで取得
27
+ if ('ids' in params) {
28
+ const { ids } = params;
29
+ logger.debug('Executing findMany by ids', {
30
+ requestId,
31
+ resource,
32
+ count: ids.length,
33
+ });
34
+ // IDが空の場合は空配列を返す
35
+ if (ids.length === 0) {
36
+ return [];
37
+ }
38
+ const dbClient = getDBClient();
39
+ const tableName = getTableName();
40
+ // BatchGetItemのキーを生成
41
+ const keys = ids.map((id) => ({
42
+ PK: resource,
43
+ SK: generateMainRecordSK(id),
44
+ }));
45
+ // BatchGetItemでレコードを取得(ConsistentRead=true)
46
+ const result = await executeDynamoDBOperation(() => dbClient.send(new BatchGetCommand({
47
+ RequestItems: {
48
+ [tableName]: {
49
+ Keys: keys,
50
+ ConsistentRead: true,
51
+ },
46
52
  },
47
- },
48
- })), 'BatchGetItem');
49
- // レスポンスからレコードを抽出
50
- const items = result.Responses?.[tableName] || [];
51
- // data属性から__shadowKeysを除外
52
- const records = items.map((item) => extractCleanRecord(item));
53
- logger.info('findMany succeeded', {
54
- requestId,
55
- resource,
56
- requested: ids.length,
57
- found: records.length,
58
- });
59
- return records;
53
+ })), 'BatchGetItem');
54
+ // レスポンスからレコードを抽出
55
+ const items = result.Responses?.[tableName] || [];
56
+ // data属性から__shadowKeysを除外
57
+ const records = items.map((item) => extractCleanRecord(item));
58
+ logger.info('findMany by ids succeeded', {
59
+ requestId,
60
+ resource,
61
+ requested: ids.length,
62
+ found: records.length,
63
+ });
64
+ return records;
65
+ }
66
+ // filterが指定された場合はfind操作で検索
67
+ if ('filter' in params) {
68
+ const { filter } = params;
69
+ logger.debug('Executing findMany by filter', {
70
+ requestId,
71
+ resource,
72
+ filter,
73
+ });
74
+ const findResult = await handleFind(resource, {
75
+ filter,
76
+ }, requestId);
77
+ logger.info('findMany by filter succeeded', {
78
+ requestId,
79
+ resource,
80
+ filter,
81
+ found: findResult.items.length,
82
+ });
83
+ return findResult.items;
84
+ }
85
+ // idsもfilterも指定されていない場合(型的にはありえないが念のため)
86
+ throw new Error('findMany requires either ids or filter');
60
87
  }
61
88
  //# sourceMappingURL=findMany.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"findMany.js","sourceRoot":"","sources":["../../../src/server/operations/findMany.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,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;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,MAAsB,EACtB,SAAiB;IAEjB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEvB,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;QACjC,SAAS;QACT,QAAQ;QACR,KAAK,EAAE,GAAG,CAAC,MAAM;KAClB,CAAC,CAAC;IAEH,iBAAiB;IACjB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,qBAAqB;IACrB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,QAAQ;QACZ,EAAE,EAAE,oBAAoB,CAAC,EAAE,CAAC;KAC7B,CAAC,CAAC,CAAC;IAEJ,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,GAAG,EAAE,CACH,QAAQ,CAAC,IAAI,CACX,IAAI,eAAe,CAAC;QAClB,YAAY,EAAE;YACZ,CAAC,SAAS,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI;gBACV,cAAc,EAAE,IAAI;aACrB;SACF;KACF,CAAC,CACH,EACH,cAAc,CACf,CAAC;IAEF,iBAAiB;IACjB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAElD,0BAA0B;IAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;QAChC,SAAS;QACT,QAAQ;QACR,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,KAAK,EAAE,OAAO,CAAC,MAAM;KACtB,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"findMany.js","sourceRoot":"","sources":["../../../src/server/operations/findMany.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,14 @@ import type { FindOneParams, FindOneResult } from '../types.js';
2
2
  /**
3
3
  * findOne 操作を実行する
4
4
  *
5
- * idが指定された場合はGetItemでメインレコードを取得し、
6
- * filterが指定された場合はfind操作で検索して最初の結果を返す。
7
- * __shadowKeysを除外してレスポンスを返す。
5
+ * findManyを内部で使用して単一レコードを取得する。
6
+ * idが指定された場合はfindMany([id])を呼び出し、
7
+ * filterが指定された場合はfindMany({ filter })を呼び出して最初の結果を返す。
8
8
  *
9
9
  * @param resource - リソース名
10
10
  * @param params - findOneパラメータ(idまたはfilter)
11
11
  * @param requestId - リクエストID
12
- * @returns レコードデータ
12
+ * @returns レコードデータ(単一レコードオブジェクト)
13
13
  * @throws {ItemNotFoundError} レコードが存在しない場合
14
14
  */
15
15
  export declare function handleFindOne(resource: string, params: FindOneParams, requestId: string): Promise<FindOneResult>;
@@ -1 +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;AAWhE;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAmFxB"}
1
+ {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../src/server/operations/findOne.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKhE;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CA2DxB"}
@@ -2,75 +2,61 @@
2
2
  * findOne 操作
3
3
  * 単一レコードをIDまたはフィルター条件で取得する
4
4
  *
5
+ * リファクタリング: findManyを内部で使用してコードの重複を削減
6
+ *
5
7
  * 要件: 4.3, 5.4, 5.5
6
8
  */
7
- import { GetCommand } from '@aws-sdk/lib-dynamodb';
8
9
  import { ItemNotFoundError, createLogger } from '../../shared/index.js';
9
- import { generateMainRecordSK } from '../shadow/index.js';
10
- import { executeDynamoDBOperation, extractCleanRecord, getDBClient, getTableName, } from '../utils/dynamodb.js';
11
- import { handleFind } from './find.js';
10
+ import { handleFindMany } from './findMany.js';
12
11
  const logger = createLogger({ service: 'records-lambda' });
13
12
  /**
14
13
  * findOne 操作を実行する
15
14
  *
16
- * idが指定された場合はGetItemでメインレコードを取得し、
17
- * filterが指定された場合はfind操作で検索して最初の結果を返す。
18
- * __shadowKeysを除外してレスポンスを返す。
15
+ * findManyを内部で使用して単一レコードを取得する。
16
+ * idが指定された場合はfindMany([id])を呼び出し、
17
+ * filterが指定された場合はfindMany({ filter })を呼び出して最初の結果を返す。
19
18
  *
20
19
  * @param resource - リソース名
21
20
  * @param params - findOneパラメータ(idまたはfilter)
22
21
  * @param requestId - リクエストID
23
- * @returns レコードデータ
22
+ * @returns レコードデータ(単一レコードオブジェクト)
24
23
  * @throws {ItemNotFoundError} レコードが存在しない場合
25
24
  */
26
25
  export async function handleFindOne(resource, params, requestId) {
27
- const { id, filter } = params;
28
- // idが指定された場合は従来通りGetItemで取得
29
- if (id) {
30
- logger.debug('Executing findOne by id', {
26
+ // idが指定された場合はfindManyを1件のIDで呼び出し
27
+ if ('id' in params) {
28
+ const { id } = params;
29
+ logger.debug('Executing findOne by id (using findMany)', {
31
30
  requestId,
32
31
  resource,
33
32
  id,
34
33
  });
35
- const dbClient = getDBClient();
36
- const tableName = getTableName();
37
- // メインレコードのSKを生成
38
- const sk = generateMainRecordSK(id);
39
- // GetItemでレコードを取得(ConsistentRead=true)
40
- const result = await executeDynamoDBOperation(() => dbClient.send(new GetCommand({
41
- TableName: tableName,
42
- Key: {
43
- PK: resource,
44
- SK: sk,
45
- },
46
- ConsistentRead: true,
47
- })), 'GetItem');
48
- // レコードが存在しない場合
49
- if (!result.Item) {
34
+ // findManyを呼び出して1件のレコードを取得
35
+ const results = await handleFindMany(resource, { ids: [id] }, requestId);
36
+ // レコードが存在しない場合(既存のインターフェースを維持)
37
+ if (results.length === 0) {
50
38
  throw new ItemNotFoundError(`Record not found: ${id}`, { resource, id });
51
39
  }
52
- // data属性から__shadowKeysを除外してレスポンスを返す
53
- const record = extractCleanRecord(result.Item);
54
40
  logger.info('findOne by id succeeded', {
55
41
  requestId,
56
42
  resource,
57
43
  id,
58
44
  });
59
- return record;
45
+ // 既存のインターフェースを維持: 単一レコードオブジェクトを返す
46
+ return results[0];
60
47
  }
61
- // filterが指定された場合はfind操作で検索
62
- if (filter) {
63
- logger.debug('Executing findOne by filter', {
48
+ // filterが指定された場合はfindManyをfilterで呼び出し
49
+ if ('filter' in params) {
50
+ const { filter } = params;
51
+ logger.debug('Executing findOne by filter (using findMany)', {
64
52
  requestId,
65
53
  resource,
66
54
  filter,
67
55
  });
68
- const findResult = await handleFind(resource, {
69
- filter,
70
- pagination: { perPage: 1 },
71
- }, requestId);
72
- // レコードが存在しない場合
73
- if (!findResult.items || findResult.items.length === 0) {
56
+ // findManyを呼び出してフィルター検索
57
+ const results = await handleFindMany(resource, { filter }, requestId);
58
+ // レコードが存在しない場合(既存のインターフェースを維持)
59
+ if (results.length === 0) {
74
60
  throw new ItemNotFoundError(`Record not found with filter`, { resource, filter });
75
61
  }
76
62
  logger.info('findOne by filter succeeded', {
@@ -78,9 +64,10 @@ export async function handleFindOne(resource, params, requestId) {
78
64
  resource,
79
65
  filter,
80
66
  });
81
- return findResult.items[0];
67
+ // 既存のインターフェースを維持: 単一レコードオブジェクトを返す
68
+ return results[0];
82
69
  }
83
- // idもfilterも指定されていない場合
70
+ // idもfilterも指定されていない場合(型的にはありえないが念のため)
84
71
  throw new Error('findOne requires either id or filter');
85
72
  }
86
73
  //# sourceMappingURL=findOne.js.map
@@ -1 +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,uBAAuB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,MAAqB,EACrB,SAAiB;IAEjB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE9B,4BAA4B;IAC5B,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;YACtC,SAAS;YACT,QAAQ;YACR,EAAE;SACH,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QAEjC,gBAAgB;QAChB,MAAM,EAAE,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAEpC,uCAAuC;QACvC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,GAAG,EAAE,CACH,QAAQ,CAAC,IAAI,CACX,IAAI,UAAU,CAAC;YACb,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE;gBACH,EAAE,EAAE,QAAQ;gBACZ,EAAE,EAAE,EAAE;aACP;YACD,cAAc,EAAE,IAAI;SACrB,CAAC,CACH,EACH,SAAS,CACV,CAAC;QAEF,eAAe;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,iBAAiB,CAAC,qBAAqB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,oCAAoC;QACpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/C,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACrC,SAAS;YACT,QAAQ;YACR,EAAE;SACH,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC1C,SAAS;YACT,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,UAAU,CACjC,QAAQ,EACR;YACE,MAAM;YACN,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SAC3B,EACD,SAAS,CACV,CAAC;QAEF,eAAe;QACf,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,iBAAiB,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACzC,SAAS;YACT,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,uBAAuB;IACvB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"findOne.js","sourceRoot":"","sources":["../../../src/server/operations/findOne.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,MAAqB,EACrB,SAAiB;IAEjB,iCAAiC;IACjC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;QAEtB,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE;YACvD,SAAS;YACT,QAAQ;YACR,EAAE;SACH,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAEzE,+BAA+B;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,qBAAqB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACrC,SAAS;YACT,QAAQ;YACR,EAAE;SACH,CAAC,CAAC;QAEH,kCAAkC;QAClC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,sCAAsC;IACtC,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAE1B,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE;YAC3D,SAAS;YACT,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC;QAEtE,+BAA+B;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACzC,SAAS;YACT,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;QAEH,kCAAkC;QAClC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,uCAAuC;IACvC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC"}
@@ -3,16 +3,15 @@ import type { InsertOneParams, InsertOneResult } from '../types.js';
3
3
  * insertOne 操作を実行する
4
4
  *
5
5
  * 処理フロー:
6
- * 1. ULIDを生成してレコードIDを作成
7
- * 2. createdAt, updatedAtタイムスタンプを追加
8
- * 3. シャドー設定を読み込み、全シャドーSKを生成
9
- * 4. メインレコードをPutItemで保存
10
- * 5. シャドーレコードをPutItemで保存
6
+ * 1. insertMany([data])を呼び出す
7
+ * 2. 結果を検証し、失敗した場合は通常のErrorをスロー
8
+ * 3. 成功した場合は作成されたレコードをfindOneで取得して返却
11
9
  *
12
10
  * @param resource - リソース名
13
11
  * @param params - insertOneパラメータ
14
12
  * @param requestId - リクエストID
15
13
  * @returns 作成されたレコード
14
+ * @throws {Error} レコード作成に失敗した場合
16
15
  */
17
16
  export declare function handleInsertOne(resource: string, params: InsertOneParams, requestId: string): Promise<InsertOneResult>;
18
17
  //# sourceMappingURL=insertOne.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"insertOne.d.ts","sourceRoot":"","sources":["../../../src/server/operations/insertOne.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAWpE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAqE1B"}
1
+ {"version":3,"file":"insertOne.d.ts","sourceRoot":"","sources":["../../../src/server/operations/insertOne.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIpE;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CA8C1B"}