노트 업데이트 API 추가하기
노트 업데이트 API 추가하기
이제 사용자가 주어진 ID로 새로운 노트 객체를 사용해 노트를 업데이트할 수 있는 API를 만들어 보겠습니다.
함수 추가하기
packages/functions/src/update.ts
파일을 새로 만들고 다음 코드를 붙여넣으세요.
import { Resource } from "sst";
import { Util } from "@notes/core/util";
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { UpdateCommand, DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
const dynamoDb = DynamoDBDocumentClient.from(new DynamoDBClient({}));
export const main = Util.handler(async (event) => {
const data = JSON.parse(event.body || "{}");
const params = {
TableName: Resource.Notes.name,
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,
},
};
await dynamoDb.send(new UpdateCommand(params));
return JSON.stringify({ status: true });
});
이 코드는 create.ts
함수와 비슷하게 보일 겁니다. 여기서는 params
에 새로운 content
와 attachment
값을 포함해 DynamoDB의 update
호출을 합니다.
라우트 추가
노트를 가져오는 API를 위한 새로운 라우트를 추가해 보겠습니다.
infra/api.ts
파일에서 GET /notes/{id}
라우트 아래에 다음 코드를 추가하세요.
api.route("PUT /notes/{id}", "packages/functions/src/update.main");
변경 사항 배포하기
터미널로 이동하면 변경 사항이 배포되고 있음을 확인할 수 있습니다.
새로운 API가 배포된 것을 확인할 수 있습니다.
+ Complete
Api: https://5bv7x0iuga.execute-api.us-east-1.amazonaws.com
API 테스트
이제 새로운 API를 테스트할 준비가 되었습니다. 이전 챕터에서 노트 생성 API를 테스트했을 때, 새로운 노트의 ID가 noteId
로 반환되었어야 합니다.
터미널에서 다음 명령어를 실행하세요.
$ curl -X PUT \
-H 'Content-Type: application/json' \
-d '{"content":"New World","attachment":"new.jpg"}' \
https://5bv7x0iuga.execute-api.us-east-1.amazonaws.com/notes/<NOTE_ID>
URL 끝에 있는 ID를 이전에 받은 noteId
로 바꾸는 것을 잊지 마세요.
여기서는 업데이트하려는 노트에 PUT 요청을 보냅니다. 새로운 content
와 attachment
를 JSON 문자열로 전달합니다.
응답은 다음과 같이 표시될 것입니다.
{"status":true}
다음으로, 주어진 ID를 사용해 노트를 삭제하는 API를 추가할 예정입니다.
For help and discussion
Comments on this chapter