Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[조형민] sprint7 #5

Conversation

paengdal
Copy link
Collaborator

@paengdal paengdal commented Dec 15, 2024

요구사항

기본 요구사항

중고마켓

  • mongoDB에서 PostgreSQL을 사용하도록 코드를 마이그레이션 해주세요.

공통

  • PostgreSQL를 이용해 주세요.
  • 데이터 모델 간의 관계를 고려하여 onDelete를 설정해 주세요.
  • 데이터베이스 시딩 코드를 작성해 주세요.
  • 각 API에 적절한 에러 처리를 해 주세요.
  • 각 API 응답에 적절한 상태 코드를 리턴하도록 해 주세요.

자유게시판

  • Article 스키마를 작성해 주세요.
    • id, title, content, createdAt, updatedAt 필드를 가집니다.
  • 게시글 등록 API를 만들어 주세요.
    • title, content를 입력해 게시글을 등록합니다.
  • 게시글 조회 API를 만들어 주세요.
    • id, title, content, createdAt를 조회합니다.
  • 게시글 수정 API를 만들어 주세요.
  • 게시글 삭제 API를 만들어 주세요.
  • 게시글 목록 조회 API를 만들어 주세요.
    • id, title, content, createdAt를 조회합니다.
    • offset 방식의 페이지네이션 기능을 포함해 주세요.
    • 최신순(recent)으로 정렬할 수 있습니다.
    • title, content에 포함된 단어로 검색할 수 있습니다.

댓글

  • 댓글 등록 API를 만들어 주세요.
    • content를 입력하여 댓글을 등록합니다.
    • 중고마켓, 자유게시판 댓글 등록 API를 따로 만들어 주세요.
  • 댓글 수정 API를 만들어 주세요.
    • PATCH 메서드를 사용해 주세요.
  • 댓글 삭제 API를 만들어 주세요.
  • 댓글 목록 조회 API를 만들어 주세요.
    • id, content, createdAt 를 조회합니다.
    • cursor 방식의 페이지네이션 기능을 포함해 주세요.
    • 중고마켓, 자유게시판 댓글 목록 조회 API를 따로 만들어 주세요.

심화 요구사항

주요 변경사항

  • 없음

스크린샷

  • 없음

멘토에게

  • 감사합니다.

@paengdal paengdal added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 최종 제출 스프린트미션 최종 제출본입니다. labels Dec 15, 2024
@paengdal paengdal self-assigned this Dec 15, 2024
Copy link
Collaborator

@seobew seobew left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

형민님 고생많으셨습니다!

전반적으로 깔끔하게 작성해주신 것 같습니다!
주석에는 이후에 작업할 내용들인 것 같아서 따로 코멘트는 안했습니다 ㅎㅎ

추가로 express 작업을 하니, route 파일로 분리하는 것도 한번 시도해보셔도 좋을듯 합니다!
product.route.js 이런식으로요 ㅎㅎ controller, repository도 같이 봐보시면 좋을듯 해요

수고하셨습니다!

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기는 node.js 쪽이라 react 관련된 lint 는 필요없어서 해당 부분 지워주시면 좋을것 같습니다 ㅎㅎ

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

다음시간에 환경변수 관련되서 말씀드리겠지만, 보통 .env는 github에 올리지는 않고 따로 관리를 합니다 ㅎㅎ

@@ -0,0 +1,23 @@
-- CreateTable
CREATE TABLE "Product" (
"id" TEXT NOT NULL,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

보통 mysql이나 다른 db에서는 TEXT가 아닌 VARCHAR를 쓰게끔 하는데요
postgresql을 사용하셔서 TEXT를 사용하셔도 성능상 이슈는 없지만, 보통 길이가 엄청 길지 않는 이상 (product.description 등) VARCHAR을 사용하긴 합니다 ㅎㅎ

https://dev-scratch.tistory.com/172

const comment = await prisma.comment.create({ data: req.body });

// 해당 게시글에 댓글을 연결
const { id: commentId } = comment;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 이거 깔끔하게 잘 빼주셧네요 ㅎㅎ

assert(req.body, PatchComment);
const { id } = req.params;
const comment = await prisma.comment.update({ where: { id }, data: { ...req.body } });
res.send(comment);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기도 통일성 있게 res.status(200).send(comment)로 해주는게 더 좋을듯 합니다.

app.patch(
'/comments/:id',
asyncHandler(async (req, res) => {
assert(req.body, PatchComment);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오.. 이런 assert 로 validation 추가해주시다니 좋네요 ㅎㅎ

const nextCursor = lastComment.id;
const isLastPage = limit > comments.length;
// 최종적으로 cursor와 comments 전달
const finalData = isLastPage
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이런 로직은 위에도 중복코드가 있어서 따로 함수를 빼서 범용적으로 사용할수 있게 하면 더 좋을듯 합니다~

@seobew seobew merged commit fc74f5e into codeit-sprint-fullstack:express-조형민 Jan 13, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 최종 제출 스프린트미션 최종 제출본입니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants