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 #20

Open
wants to merge 12 commits into
base: express-강대원
Choose a base branch
from

Conversation

Daewony
Copy link
Collaborator

@Daewony Daewony commented Nov 10, 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를 따로 만들어 주세요.

주요 변경사항

스크린샷

image

멘토에게

  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@Daewony Daewony self-assigned this Nov 10, 2024
@Daewony Daewony requested a review from kimjong95 November 10, 2024 17:12
@Daewony Daewony changed the title Express 강대원 sprint7 [강대원] sprint7 Nov 11, 2024
Copy link
Collaborator

@kimjong95 kimjong95 left a comment

Choose a reason for hiding this comment

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

대체적으로 깔끔하게 작성해주신것 같습니다.

프리즈마를 사용해주고 계신데 관계설정이 잘되어있어서 크게문제되지는 않을것 같습니다.
다만 DB에대한 작업을 할때 key값이 중복, 혹은 존재하지않는 값을 컨트롤 할때의 에러처리가 케이스별로 필요할 수도 있을것 같습니다.

router.patch('/:id/comment/:commentId', service.updateArticleComment); // 자유게시글 댓글 수정
router.delete('/:id/comment/:commentId', service.deleteArticleComment); // 자유게시글 댓글 삭제

export default router;
Copy link
Collaborator

Choose a reason for hiding this comment

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

게시글과 댓글을 서로다른 컨트롤러로 분리해주셔도 좋을것 같습니다.

const { id } = req.params; // 댓글 ID
const { content } = req.body;

const comment = await prisma.articleComment.update({
Copy link
Collaborator

Choose a reason for hiding this comment

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

수정이나 삭제를할때 id가 유효하지않으면 에러가 발생될 수도 있습니다.
이 케이스를 확인해보시면 좋을것 같아요.

현재는 asyncHandler에 구성된 try/catch로 처리가 되긴 할것 같습니다.

limit = 10,
orderBy = 'recent',
keyword = '',
} = req.query as GetArticleListReqQueryProps;
Copy link
Collaborator

Choose a reason for hiding this comment

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

query의 타입을 as를 통해 캐스팅해주셨습니다. 이렇게도 사용할 수 있지만 타입단언은 조금 위험할 수도 있습니다.
asyncHandler에 제네릭타입을 통해서 처리할 수도 있을것 같아요.

type GetArticleListReqQueryProps = {
offset?: string;
limit?: string;
orderBy?: string;
Copy link
Collaborator

Choose a reason for hiding this comment

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

orderBy와 같은값을 string이 아닌 Enum타입등으로 설정하는게 좋을것 같습니다.

marketArticle MarketArticle @relation(fields: [articleId], references: [id], onDelete: Cascade)
articleId String
}

Copy link
Collaborator

Choose a reason for hiding this comment

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

모델을 잘 구성해주신것 같아요. 테스트하실때 필요한 시딩이 필요할 수도 있을것 같아요


const article = await prisma.article.update({
where: { id },
data,
Copy link
Collaborator

Choose a reason for hiding this comment

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

필요한 값만 수정이 되도록 설정해주신것 좋습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants