- 프레임워크 : NestJS
- DBMS : MySQL
- ORM : typeORM
- api-docs : localhost:3000/api-docs
https://drive.google.com/file/d/1o23Bcb6tk6FrDSR0lVbsbWI_mLDNI58m/view?usp=sharing
1. 제목과 본문으로 구성된 게시글 생성
- 제목과 본문은 각각 20, 200자이며 이모지 포함 가능
- 게시글 생성 시 비밀번호를 설정하여, 추후 비밀번호를 입력해 게시글 수정 및 삭제 가능
2. 한 페이지 내에서 모든 게시글을 최신 글 순으로 조회
- 게시글 개수가 많을 때, 무한 스크롤 방식으로 20개씩 추가 로드
Request body example :
{
"title": "제목",
"content": "본문",
"password": "abcdef1"
}
201 Response example :
{
"id": "uuid",
"title": "제목",
"content": "본문",
"createAt": "2022-09-07T15:18:26.248Z"
}
- 제목과 본문의 길이, 비밀번호 형식(6자 이상, 숫자 포함)을 검증 한 뒤 문제가 없다면 생성된 Board 객체를 password만 제외하고 반환합니다.
- 입력이 제목, 본문, 비밀번호 형식과 다르다면 형식을 안내하는 에러메세지와 함께 400 상태코드를 반환합니다.
- 비밀번호는 해싱을 거쳐 DB에 저장됩니다.
200 Response example :
[
{
"id": "71b5688e-086a-4a05-9710-011674a5ecd7",
"title": "9",
"content": "string",
"createAt": "2022-09-07T15:18:26.248Z"
},
{
"id": "4b05b56e-d5bf-436e-a7ea-38813c7d4d4f",
"title": "8",
"content": "string",
"createAt": "2022-09-07T15:17:01.902Z"
},
.
.
.
]
- createAt을 timestamp로 사용한 커서 기반 페이지네이션 기능을 사용하며, 게시글들은 최신 글 순으로 정렬되어 나타납니다.
- Query string을 통해 client가 전달받은 Board 배열 마지막 element의 'createAt'값을 입력 받습니다. 요청 받은 게시글 다음 순서의 글부터 20개의 게시글을 반환합니다.
- 입력 값이 없다면 가장 최신 게시글 20개를 반환합니다.
Request body example :
{
"title": "제목",
"content": "본문",
"password": "abcdef1"
}
200 Response example :
{
"id": "uuid",
"title": "제목",
"content": "본문",
"createAt": "2022-09-07T15:18:26.248Z"
}
- Path parameter를 통해 수정할 게시글의 id를 전달 받은 뒤 올바른 비밀번호가 맞는지 검증합니다.
- 비밀번호가 맞다면 사용자가 입력한 변경 값으로 대체하여 저장합니다.
- 비밀번호가 틀렸다면 401 코드를 반환합니다.
- 존재하지 않는 게시글 id에 대한 요청에는 204 코드가 반환됩니다.
Request body example :
{
"password": "abcdef1"
}
200 Response example :
게시글 삭제
- Path parameter를 통해 삭제할 게시글의 id를 전달 받은 뒤 올바른 비밀번호가 맞는지 검증합니다.
- 비밀번호가 맞다면 해당 게시글을 물리적으로 삭제 시킵니다.
- 비밀번호가 틀렸다면 401 코드를 반환합니다.
- 존재하지 않는 게시글 id에 대한 요청에는 204 코드가 반환됩니다.