노트 업데이트 API 추가하기

이제 사용자가 특정 ID를 가진 노트를 새로운 노트 객체로 업데이트할 수 있는 API를 만들어 보겠습니다.

함수 추가하기

Change indicator 새로운 파일 update.js를 생성하고 다음 코드를 붙여넣으세요.

import handler from "./libs/handler-lib";
import dynamoDb from "./libs/dynamodb-lib";

export const main = handler(async (event, context) => {
  const data = JSON.parse(event.body);
  const params = {
    TableName: process.env.tableName,
    // 'Key'는 업데이트할 항목의 파티션 키와 정렬 키를 정의합니다.
    Key: {
      userId: "123", // 작성자의 ID
      noteId: event.pathParameters.id, // 경로에서 가져온 노트의 ID
    },
    // 'UpdateExpression'은 업데이트할 속성을 정의합니다.
    // 'ExpressionAttributeValues'는 업데이트 표현식의 값을 정의합니다.
    UpdateExpression: "SET content = :content, attachment = :attachment",
    ExpressionAttributeValues: {
      ":attachment": data.attachment || null,
      ":content": data.content || null,
    },
    // 'ReturnValues'는 항목의 속성을 반환할지 여부와 방법을 지정합니다.
    // ALL_NEW는 업데이트 후 항목의 모든 속성을 반환합니다.
    // 'result'를 통해 다른 설정과 어떻게 작동하는지 확인할 수 있습니다.
    ReturnValues: "ALL_NEW",
  };

  await dynamoDb.update(params);

  return { status: true };
});

이 코드는 create.js 함수와 비슷하게 보일 것입니다. 여기서는 새로운 contentattachment 값을 포함한 params로 DynamoDB의 update 호출을 수행합니다.

API 엔드포인트 설정

Change indicator serverless.yml 파일을 열고 다음 내용을 추가합니다.

update:
  # update.js의 main 함수를 호출하는 HTTP API 엔드포인트를 정의합니다.
  # - path: URL 경로는 /notes/{id}
  # - method: PUT 요청
  handler: update.main
  events:
    - http:
        path: notes/{id}
        cors: true
        method: put

여기서는 /notes/{id} 엔드포인트에 대한 PUT 요청 핸들러를 추가합니다.

테스트

Change indicator mocks/update-event.json 파일을 생성하고 다음 내용을 추가합니다.

또한, pathParameters 블록의 id 대신 우리가 사용 중인 노트의 noteId를 사용하는 것을 잊지 마세요.

{
  "body": "{\"content\":\"new world\",\"attachment\":\"new.jpg\"}",
  "pathParameters": {
    "id": "578eb840-f70f-11e6-9d1a-1359b3b22944"
  }
}

그리고 루트 디렉토리에서 새로 생성한 함수를 호출합니다.

$ serverless invoke local --function update --path mocks/update-event.json

응답은 다음과 비슷하게 나타납니다.

{
    "statusCode": 200,
    "body": "{\"status\":true}"
}

다음으로, 주어진 id를 사용하여 노트를 삭제하는 API를 추가할 예정입니다.