먼저 Article을 만듭니다.(뉴스에 해당합니다.)
/api/news에서 가져오는 방식을 모르기 때문에 확인합니다.
프론트엔드에서 전달하는 쿼리스트링이 &를 무시하고 있는듯합니다.
추후 확인이 필요합니다.
본론으로 돌아와서 Article에 기사들을 넣어주기 위해서 형식이 중요하기 때문에 정리해보면
{
name
url
image: {
width
height
contentURL
}
description
provider
datePublished
}
TypeScript
복사
이와 같습니다.
기사들을 Article에 계속 추가해줘야 되는지 고민했는데, 이미 가지고 있었어야 하는 것으로 보고, 따로 저장하지 않고, 필드를 더 추가하지 않는 방향이 좋아보였습니다.
Comment가 필요할 때마다 해당 댓글이 기사에 대한 제목과 썸네일 url 등을 가지고 있다가 보여주는 게 나을 것 같습니다.
DB를 배포하기 위해 Postgres로 변경하는 것은 아래의 글에 따로 정리합니다.
계정을 만듭시다.
그리고 Content-Type Builder에서 Comment라는 컬렉션 타입을 추가합니다.
기사는 디비에 가지고 있지 않으므로 분리해서 각 필드가 들어오게 검사합니다.
articleImage는 아래 형식을 넣기 위해서 json으로 정했습니다.
유저를 만들고 유저의 jwt를 갖고와서 댓글 작성을 시도해봅니다.
[
{
"name": "윌라, '주식농부' 박영옥 '주식투자 절대 원칙' 오디오북 공개",
"url": "https://www.insight.co.kr/news/383860",
"image": {
"width": 700,
"height": 371,
"contentURL": "https://img.insight.co.kr/static/2022/02/25/1200/img_20220225111242_v95833ok.jpg"
},
"description": "[인사이트] 김소영 기자 = 윌라가 '주식농부' 박영옥 대표 저술의 '주식투자 절대 원칙'을 오디오북으로 공개했다고 밝혔다. '주식투자 절대 원칙'은 박영옥 대표가 자본금 4,500만원으로 2,000억 부를 이룬 투자 비결을 담은 책이다. 미디어를 통해 개미 ...",
"provider": "insight.co.kr",
"datePublished": "2022-02-25 02:40:00"
},
JSON
복사
전송할 내용입니다.
헤더도 아까 받은 jwt를 넣어줍니다.
403 ForbiddenError가 나옵니다.
Roles로 가서 권한을 허용해줍니다. 변경 후 Save를 누릅시다.
에러가 나옵니다.
data라는 프로퍼티에 담아서 보내도록 변경합니다.
성공했습니다.
응답은 data에 감춰진 필드들과 함께 생성된 데이터를 넘겨줍니다.
작성된 것은 유저가 아니여도 볼 수 있어야 합니다.
Role로 가서 Public에 대해 권한을 허용해준다음 Save 버튼을 누릅니다.
확인해보면 데이터가 잘 들어옵니다.
User가 안들어오고 있다면 채워주도록 합니다.
/api/comments?populate=*
이후 스타일링과 테스트 코드 작성
댓글 보여주기를 super admin으로 댓글을 생성해 구현했기 때문에 실제로 유저들이 댓글을 작성할 수 있도록 Create api를 지원해야 합니다.
지금도 create가 되지만 user가 비어있습니다.
어떻게 채울 수 있을까요?
user라는 relation의 필드는 매우 다양하지만 id만 넣어주면 됩니다.
따라서 코드는 이렇게 됩니다.
module.exports = createCoreController("api::comment.comment", ({ strapi }) => ({
async create(ctx) {
const entity = await strapi.entityService.create("api::comment.comment", {
data: {
...ctx.request.body.data,
user: ctx.state.user.id,
},
});
return entity;
},
}));
JavaScript
복사
요청을 보내봅니다.
어드민 패널에서 보면 댓글이 잘 등록되었습니다.