원래 diary post 코드
try {
const { title, picture, gps, content, write_date, hashtags } = req.body;
if (!title || !picture || !content || !write_date) {
await slack.slack("Diary Post 422");
return res.status(422).send({ message: "insufficient parameters supplied" });
}
const validity = await tokenHandler.accessTokenVerify(req, res);
if (validity) {
//해쉬태그 제외한 다이어리 추가
const diaryPayload = {
trip_id: req.params.trip_id,
title,
picture,
gps,
content,
write_date,
};
const diaryInfo = await diary.create(diaryPayload);
// 해쉬태그 추가 // map같은거 배열로 오는 해쉬태그를 하나하나추가 / 해쉬태그 중복여부
hashtags.map(async (ele) => {
const data = await hashtag.findOne({
where: {
hashtag: ele,
},
});
let hashtagInfo = data;
//해쉬태그가 이미 있는게 아닐경우 (없을 경우)
if (!data) {
const hashtagPayload = {
hashtag: ele,
};
hashtagInfo = await hashtag.create(hashtagPayload);
await slack.slack("Hashtag Post 201", `id : ${hashtagInfo.id}`);
}
//조인테이블 추가
const diary_hashtagPayload = {
diary_id: diaryInfo.dataValues.id,
hashtag_id: hashtagInfo.dataValues.id,
};
await diary_hashtag.create(diary_hashtagPayload);
});
await slack.slack("Diary Post 201", `id : ${diaryInfo.id}`);
res.status(201).send({ data: { id: diaryInfo.id }, accessToken: validity.accessToken });
}
} catch (err) {
await slack.slack("Diary Post 501");
res.status(501).send("Diary Post");
}
원래는 다이어리추가
해쉬태그 추가
다이어리_해쉬태그 조인테이블추가를 각각 해줬다
그런데 user 삭제시
trip, diary, diary_hashtag 까지만 지워지고 hashtag는 안지워진다
diary_hashtag내에서 hashtag id값을 갖는게 하나도 없으면 hashtag 테이블에서 그 값이 지워져야한다고 생각했기때문에
관계설정이 잘 안됐나하고 찾다가
create할때 위의 코드처럼 각각 추가하지않고
const diaryInfo = await diary.create(
{
title: "제목",
trip_id: 1,
hashtags: [{ hashtag: "tag1" }, { hashtag: "tag2" }], //테이블이 단수여도 s붙여야함
},
{
include: hashtag,
}
);
const result = await diary.findOne({
where: { title: "제목" },
include: hashtag,
});
이런식으로 써주면
diary 테이블의 title로 제목, trip_id로 1이 생성되고
hashtag 테이블에는 tag1과 tag2가 생긴다
그리고 조인테이블도 정상적으로 생기지만
user 삭제시 여전히 hashtag는 안지워지는거로 보아
따로 삭제를 해줘야할것같다 (용량 확보위해)
항상 하기에는 너무 계산낭비일거같고 스케쥴러 등록해서 주기적으로 하면 좋을거 같다
오늘 해결 못한점이
const aa = await hashtags.map(async (ele) => {
const data = await hashtag.findOne({
where: {
hashtag: ele,
},
});
return ele
});
console.log(aa);
hashtag 테이블에 없는값만 추가해주기 위해서 각각의 요소들이 db에 있는지 검증하기위해 코드를 짜던중에
위 코드와 같은 경우에 hashtags = [1,2,3] 이면 [1,2,3]이 출력되야할거 같지만
[ Promise { <pending> }, Promise { <pending> }, Promise { <pending> } ]
이 출력된다
[1,2,3]이 출력된다면 map과 filter를 써서
[{ hashtag: "1" }, { hashtag: "2" }, {hashtag: "3"}]
처럼 출력하려고 했다
나머지는 내일로...
'Project > codestates-final-project' 카테고리의 다른 글
| 12일차 / 배포 확인, 엔드포인트 간결화 (0) | 2022.05.05 |
|---|---|
| 11일차 / N : M연결 diary와 hashtag 작성 및 scheduler를 이용한 쓰레기값 삭제 (0) | 2022.05.05 |
| 9일차 / 요청에 대한 응답 더욱 더 세분화 (0) | 2022.05.01 |
| 8일차 / slack 완료 및 프론트 태그 도움 (2) | 2022.04.28 |
| 7일차 / Slack Bot (0) | 2022.04.28 |