
언제나 에러는 함께 한다.... 좀 떨어져주라
오늘도 많은 에러들이 있었는데 역시 마지막의 에러들만 기억에 남아서 정리한다.
async likeComment(@Param('commentId') commentId: number, @Body('like') like: Like)
였는데
swagger가 저 Body를 못 읽어버림... 그래서 swagger에서 테스트할 때 like를 입력하지 못하고 서버는 서버대로 입력 못받았다고 에러를 낸다...
그래서 때쟁이의 수요를 받아
async likeComment(@Param('commentId') commentId: number, @Body() like: Like)
로 수정했다. ㅂㄷㅂㄷ... 그리고 이로 인해 그 다음 사태가 벌어지니...

오늘의 오전과 밤을 함께한 에러... 난생 처음 본 'Data truncated from column 어쩌고'
=> 한마디로 'Data 값이 형식에 맞지 않을 때' 발생하는 에러였다.
위에서 body에서 받은 like를 콘솔로 찍어보니 배열 형태로 받아와졌다. (아니 타입 enum으로 잘 설정해놓았건만 누구 맘대로 배열로 받아오니??????)
사실 위의 처음 코드처럼 Body안에 'like'를 작성하고 enum 파일에서 string을 할당해주면 해결해주나 우리 민감한 swagger는 Body 안에 코드가 있으면 뱉어버린다... swagger로 녹화해야하기 때문에 울며 겨자먹기로 수정하고 삽질을 시작했다...
/* like를 string으로 변환한 후 다시 Like 형식으로 변환 */
private async convertLike(like: Like) {
const valueLike = Object.values(like);
const stringLike = valueLike.toString();
if (stringLike === 'Smile') {
const emoji = Like.Smile;
return emoji;
} else if (stringLike === 'Read') {
const emoji = Like.Read;
return emoji;
} else if (stringLike === 'Thanks') {
const emoji = Like.Thanks;
return emoji;
} else if (stringLike === 'Cry') {
const emoji = Like.Cry;
return emoji;
} else if (stringLike === 'Clap') {
const emoji = Like.Clap;
return emoji;
}
}
받아온 값을 Like로 직접 지정해버리는 함수를 만들었다. 왜 함수로 따로 만들었는가? if문에서 할당한 변수는 if문 밖에서 상위 범위 기준으로 돌아가버리기 때문에...
return으로 고정시키려고 함수로 빼냈다. 난 if문 못버려요!!!!!!! 우리 평생 가자 if에서 할당한 변수 친구야 🥹... (사실 오전에 이거 귀찮아서 포기하다가 결국 밖으로 빼냈다...)
아무튼 위의 함수를 불러와서 update시키니 성공했다.
const emoji = await this.convertLike(like);
await this.commentRepository.update({ commentId }, { like: emoji });


(진짜 눈물나서 cry로 해줬다)