Open miffyKing opened 1 year ago
@JiniEun @ICCHOI
커뮤니티 API 작성해 보았습니다. 기본적으로 게시글 작성, 게시글 수정, 게시글 조회, 게시글 삭제, 게시글 검색 기능 위주로 작성해 보았습니다. 조회로는 게시글 ID별 조회, 카테고리ID 별 조회,전체글 조회, 사용자 작성 글 조회 가 있습니다.
게시글 엔터티 이름이 board 보다 post 가 적당하다고 생각해 posts 로 수정하였습니다.
Method Name | HTTP Method and Endpoint | Description |
---|---|---|
create_post | POST /posts | Creates a new post |
update_post | PUT /posts/{post_id} | Updates an existing post by ID |
delete_post | DELETE /posts/{post_id} | Deletes a post by ID |
get_post | GET /posts/{post_id} | Retrieves a post by ID |
get_posts | GET /posts | Retrieves a list of posts |
get_user_posts | GET /posts?user_id={user_id} | Retrieves a list of posts by user ID |
get_post_categories | GET /posts?category_id={category_id} | Retrieves a list of posts by categories |
get_post_searches | GET /posts/search?q={query} | Retrieves a list of posts that contain a specific keyword. |
@JiniEun @ICCHOI
Method | Endpoint | Description |
---|---|---|
POST | /posts/{post_id}/replies | Creates a new reply for the specified post |
GET | /posts/{post_id}/replies | Retrieves a list of all replies for the specified post |
GET | /posts/{post_id}/replies/{reply_id} | Retrieves the specified reply |
PUT | /posts/{post_id}/replies/{reply_id} | Updates the specified reply |
DELETE | /posts/{post_id}/replies/{reply_id} | Deletes the specified reply |
댓글 API 작성하였습니다. 개시글 별 댓글 목록, 개별 댓글 조회 기능이 있습니다.
저는 개인적으로는 post는 다른 의미랑 혼동되는 것 같아서 게시판에 잘 안쓰긴 하는데 많이 쓰는 단어라 좋으신대로 진행해도 상관없을 것 같아요
Method Name 은 camelCase 사용 예정이라 Convention 한번씩 다시 확인해주셔도 좋을 것 같아요 (#19 Convention)
get_user_posts -> getPostsByUserId
이런식으로 쓸 수 있겠네용
Reply 같은 경우는
/replies?post_id={post_id}
이런식으로 설계하면 될 것 같습니당.
post와 분리해서요!
피드백 반영하여 수정해 보았습니다.
Method Name | HTTP Method and Endpoint | Description |
---|---|---|
createBoard | POST /boards | Creates a new board |
updateBoard | PUT /boards/{board_id} | Updates an existing board by ID |
getBoard | GET /boards/{board_id} | Retrieves a board by ID |
getAllBoards | GET /boards | Retrieves a list of boards |
getBoardsByUserId | GET /boards?user_id={user_id} | Retrieves a list of boards by user ID |
getBoardsByCategoryId | GET /boards?category_id={category_id} | Retrieves a list of boards by categories |
getBoardsBySearches | GET /boards/search?q={query} | Retrieves a list of boards that contain a specific keyword. |
softDeleteBoard | PATCH /boards/{board_id} | Soft-deletes a board by ID |
deleteBoard | DELETE /boards/{board_id} | Deletes a board by ID |
likeBoard | POST /boards/{board_id}/likes | Adds a like to a board by ID |
unlikeBoard | DELETE /boards/{board_id}/likes?user_id={user_id} | Removes a like from a board by ID |
Method | Endpoint | Description |
---|---|---|
createReply | POST/replies/{post_id}/replies | Creates a new reply for the specified post |
getReplyByPostId | GET/replies?post_id={post_id} | Retrieves a list of all replies for the specified post |
getReplyByPostIDAndReplyId | GET/replies/reply_id | Retrieves the specified reply |
updateReply | PUT/replies/{post_id}/replies/{reply_id} | Updates the specified reply |
deleteReply | DELETE/replies/{post_id}/replies/{reply_id} | Deletes the specified reply |
Error Code | HTTP Status Code | Error Message | Description |
---|---|---|---|
1001 | 400 | Invalid parameter value | The parameter value is invalid. The error message should include details about the parameter and the valid range of values. |
1002 | 401 | Authentication failed | The request requires authentication, but the client has not provided valid credentials. |
1003 | 403 | Authorization failed | The client is not authorized to access the requested resource. |
1004 | 404 | Resource not found | The requested resource was not found. The error message should include details about the resource and how to resolve the issue. |
1005 | 409 | Conflict | The requested operation conflicts with the current state of the resource. The error message should include details about the conflict and how to resolve it. |
1006 | 500 | Internal server error | An unexpected error occurred on the server. The error message should include details about the error and how to resolve it. |
CamelCase 적용하였고,
Soft Delete 할 때 Patch 를 사용하는 메서드를 추가하였습니다.
error 도 정리했습니다.
또한 게시글 좋아요 추가/삭제에 해당하는 api도 만들어보았습니다.
'좋아요'기능을 정확히 어떻게 구현해야할 지 감이 도무지 오지 않습니다..!
velog좋아요 기능
유튭/인스타 좋아요 클론
또, 게시글 목록이 많을 경우 페이지 단위로 되어있어서 pagination 방법을 공부 중에 있습니다.
노션정리 API 완료되면 쿨쿨 노션으로 정리해 옮기겠습니다!
특정 reply의 경우 게시물처럼 해주시면 될것 같아요!
/replies/{id}
일단 완성 후 페이지네이션을 도입해도 괜찮을 것 같아요! 좋아요도 마찬가지인데, 일단 API부터 만든 후 천천히 도입해보시죠 :)
@JiniEun reply api 수정하였습니다. 생각해보니 게시글 id 같은 경우는 개별 댓글 조회 시 필요가 없었네욥.. 감사합니다ㅎ @ICCHOI 페이지네이션과 좋아요 기능은 기본 crud 완성하구 공부한거 토대로 진행해보도록 하겠습니다 감사합니닷
기본 crud 부터 구현해보도록 하겠습니답
error handling 같은 경우에는 공통으로 관리될 부분이 있어서, 추후에 확실히 정해지면 다시 공유드릴게요!
@JiniEun @ICCHOI
CRUD 질문이 있습니다!
@Get()
async getBoardsByUserId(@Query('user_id') userId: string) {
console.log('get all community boards by user id');
const userIdNumber = parseInt(userId, 10);
return this.communityService.getBoardsByUserId(userIdNumber);
}
@Get()
getAllBoards() {
console.log('get all community boards\n');
return this.communityService.getAllBoards();
}
getAllBoards | GET /boards | Retrieves a list of boards |
---|---|---|
getBoardsByUserId | GET /boards?user_id={user_id} | Retrieves a list of boards by user ID |
두 라우터가 엔드포인트가 같아 같은것으로 인식이 되고 있는데, API 를 수정해 엔드포인트를 바꿔야하는 사안인지, 제가 코드를 잘못 작성하여 그런 것인지 잘 모르겠습니다..!
@JiniEun @ICCHOI
Method Name | HTTP Method and Endpoint | Description |
---|---|---|
createBoard | POST /boards | Creates a new board |
getAllBoards | GET /boards | Retrieves a list of boards |
getBoardsBySearches | GET /boards/search?q={query} | Retrieves a list of boards that contain a specific keyword. |
getBoardsByIdAndType | GET /boards/board?id={id_value}&id_type={id_type} | Retrieves a list of boards that contain specific id of id_type. |
updateBoard | PUT /boards/{board_id} | Updates an existing board by ID |
softDeleteBoard | PATCH /boards/{board_id} | Soft-deletes a board by ID |
likeBoard | POST /boards/{board_id}/like | Adds a like to a board by ID |
3가지 id 를 통한 GET 이 있었는데, 이를 서비스에서 분기 처리로 구현하기 위해
getBoardsByIdAndType
메서드로 대체하였습니다.
댓글 관련 api 는 댓글 마일스톤에서 따로 구현하도록 하겠습니다.
추가적으로, 게시글 공유 기능에 대해서도 이야기가 나왔는데, 이러한 세부 기능에 대해선 좋아요 기능, 페이지네이션 처럼 추후에 작업하면 될까요??
목적