Express 김윤기 스프린트미션7#6
Hidden character warning
Conversation
- 시딩 데이터변경 - config/config.js DB_URI를 postgresql로수정 - .env.exapme예시 postgresql로 수정
- common/dto,exceptions 으로 공통으로 사용되는 로직 분기 - controllers와 routes 에 v1폴더생성후 컨트롤과 라우터 각각 분리 - common/exceptions 에 index.js로 에러핸들러 한번에 내보내기
devbini
left a comment
There was a problem hiding this comment.
🎉 고생하셨습니다!
코드가 이전보다 보기 더 좋아진 것 같아요 !
스키마 설계도 깔끔하고, 유효성 검사같은 서비스 로직들에도 그렇게 큰 문제는 없어 보여서 세련된 코드라 느낄 수 있었답니다. 에러 핸들러도 마찬가지구요!
다만, 일부 개선이 필요한 부분이 있어서 리뷰 남겨놨어요.
크리티컬 한 건 없으니, 이런 내용이 있구나~ 하면서 알고 넘어가주시면 좋을 것 같네요 😁
추가적으로, 지금 prisma 스키마 데이터를 날짜별로 저장하고 있던데.. git의 존재 의의가 버전 관리인 만큼, 실제 사용하는 파일만 남겨주는 게 좋지 않을까 의견 드려봅니다.
너무나 고생 많으셨고, 돌아오는 프로젝트도 파이팅입니다! 🎉
| export const deleteItem = async (req, res, next) => { | ||
| try { | ||
| const { itemId } = req.params; | ||
| const deleteItem = await prisma.item.findUnique({ |
There was a problem hiding this comment.
🪛 Fix Point
의도 하신건지, 아직 미 개발 상태인건지는 모르겠지만 코멘트 남겨드려요!
findUnique는 Delete를 해 주는 메서드는 아니랍니다. 그래서 현재 상태로는 아이템이 삭제되질 않아요.
prisma.item.delete로 지워주는 코드가 필요 해 보여요 😁
또, 그냥 냅다 ID가 있든, 없든 상관 없이 prisma.item.delete로 삭제를 시도해도 됩니다.
현재 코드상 try-catch에서 잡아 줄 거라.. error Catch가 되었다면 존재하지 않는 id를 삭제하려 했다! 로
인식하는 것도 방법이에요 😊
prisma는 에러 코드를 굉장히 상세하게 던져주고 있어서,
catch를 받은 직후 error.code로 케이스를 구분 해 주면 더 보기 좋은 코드가 될 것 같아요.
지금과 같은 Not Found도 2025번 에러 케이스로 존재한답니다!
아래 내용을 한번 읽어보면 좋을 것 같아요 😁
| } | ||
| next(error); | ||
| } | ||
| next(); |
There was a problem hiding this comment.
🪛 Fix Point
현재 next()가 중복 수행될 것 같은 느낌이 있어요.
next()는 return처럼 메서드를 종료 시켜주는 게 아니라서, 현재 코드상
next(error)와 next() 두 번 실행되는 상황이 된답니다.
try 코드 내 정상적으로 수행되는 경우 next()를 호출 해 주어도 되고,
윤기님께서 편하신대로 수정 해 보면 좋지 않을까 싶어요 😁
| export const getItemById = async (req, res, next) => { | ||
| try { | ||
| const { itemId } = req.params; | ||
| const { item } = await prisma.item.findUnique({ |
There was a problem hiding this comment.
🪛 Fix Point
아래 delete쪽은 괜찮았는데, 이 부분은 수정이 필요 해 보여요.
{ } 내부에 있는 값은 구조 분해 할당 형식으로 선언됩니다.
쉽게 말하면, await prisma.item.findUnique로 얻은 값의 결과 그 자체가 아닌,
await prisma.item.findUnique로 얻은 값의 item 객체를 찾으려 합니다.
만약 prisma.item.findUnique의 값이 null이라면, { item }은 null이 할당되는 게 아니라 오류가 나버립니다.
아래 if (!item)구문까지 가지도 못 하고 catch 문으로 빠지게 된답니다..
그러니, { item } 이 아닌 item으로 바꿔주셔야 안전할 것 같아요.
There was a problem hiding this comment.
☕ Thinking
계속 item.controller쪽만 보게 되네요 🤣🤣
백엔드 서비스를 구축할 때는 가능하면, MVC 패턴을 지켜주는 게 중요하게 통용이 되고 있어요.
지금은 controller 파일에 로직과 반환, 호출이 모두 들어있는데,
중요 기능 로직들을 service 파일로 구분하고, controller는 단순 서빙만을 담당하도록 분리 해 주면
파일은 많아질지언정, 유지보수하는 데에는 큰 도움이 된답니다.
한번 읽어보세요! 😁
| userId Int? | ||
| name String | ||
| description String | ||
| price String |
There was a problem hiding this comment.
☕ Thinking
price는 string보단 Int 형식으로 관리하는 건 어떨까요? 😁
제 취향이니 그냥 그렇구나~ 하고 생각 해 주세요 🤣🤣
요구사항
판다마켓 자유게시판
기본 요구사항
mongoDB에서 PostgreSQL을 사용하도록 코드를 마이그레이션 해주세요.
공통
PostgreSQL를 이용해 주세요.
데이터 모델 간의 관계를 고려하여 onDelete를 설정해 주세요.
데이터베이스 시딩 코드를 작성해 주세요.
각 API에 적절한 에러 처리를 해 주세요.
각 API 응답에 적절한 상태 코드를 리턴하도록 해 주세요.
자유게시판
댓글
[] 댓글 등록 API를 만들어 주세요.
[ ] content를 입력하여 댓글을 등록합니다.
[ ] 중고마켓, 자유게시판 댓글 등록 API를 따로 만들어 주세요.
[ ] 댓글 수정 API를 만들어 주세요.
[ ] PATCH 메서드를 사용해 주세요.
[ ] 댓글 삭제 API를 만들어 주세요.
[ ] 댓글 목록 조회 API를 만들어 주세요.
[ ] id, content, createdAt 를 조회합니다.
[ ] cursor 방식의 페이지네이션 기능을 포함해 주세요.
[ ] 중고마켓, 자유게시판 댓글 목록 조회 API를 따로 만들어 주세요.
멘토에게