choobao / To-DuBu

1 stars 2 forks source link

리뷰 드립니다 - 강기주 튜터 #25

Open apeltop opened 7 months ago

apeltop commented 7 months ago

우선 과제를 진행하시느라 너무 고생하셨습니다. AWS S3 와 소수점을 이용한 정렬 등 여러 기능을 완성도 있게 구현을 해주신 부분이 인상 깊습니다. 그러나 몇 가지 개선사항들이 있으니 참고해서 최종 프로젝트 때 더 좋은 품질이 나올 수 있으면 좋겠습니다.

User Entity 에 email index 를 사용하신 부분 너무 좋네요!

package.json 을 보면 @types/~ 가 dev 에 있지 않은 경우가 있습니다. @types/~ 의 경우 dev 의존성에만 있어야합니다!

softDelete 라서 PATCH 메서드를 사용하신 것 같은데 이것은 서버 내부의 일이기 때문에 DELETE 로 하는 것이 맞습니다. 왜냐하면 Soft Delete 처리가 되어도 사용자 조회 결과는 나오지 않아야하기 때문입니다.

@Patch('unregister') // softDelete라서 @Delete X
  @UseGuards(AuthGuard('jwt'))
  async unregister(
    @Body() unregisterDto: UnregisterDto,
    @UserInfo() user: User,
  ) {
    await this.userService.unregister(unregisterDto, user.id);
  }

user.service 코드를 보면 사용하지 않는 메서드가 많은데 사용하지 않으면 삭제하시는 것이 좋습니다!

아래와 같은 코드가 있을 때 뒤에 path 만 달라지기 때문에 변수 또는 함수를 통해 한 곳에서 host 와 port 가 담겨있는 문자열을 사용하시는 것이 좋습니다.

const url = `http://${this.config.get('HOST')}:${this.config.get('PORT')}/users/email-verify?signupVerifyToken=${token}`;
const url = `http://${this.config.get('HOST')}:${this.config.get('PORT')}/boards/accept/${token}`;

댓글을 작성하기 위한 URI 를 보면 /boards/:boardId/cards/:cardId 가 되는데 이 URI 에서 comments 라는 정보는 없습니다. URI 를 다시 한 번 고민해보세요!

@Controller('boards/:boardId/cards')
export class CommentController {
  constructor(private readonly commentService: CommentService) {}

  //댓글 작성
  @Roles(BoardRole.OWNER, BoardRole.WORKER)
  @Post('/:cardId')
  async createComments(
    @UserInfo() user: User,
    @Param('cardId') cardId: number,
    @Body() createCommentDto: CreateCommentDto,
  ) {
    return await this.commentService.createComment(
      user,
      cardId,
      createCommentDto,
    );
  }
}

Comment Entity 에 created_At 이라는 속성을 사용하도록 선언하셨는데 A 가 대문자인데 일관성이 중요합니다!

@CreateDateColumn()
  created_At: Date;

board.service 에 있는 함수입니다. boardList 라는 함수를 보면 카드의 위치를 계산하고 반환하는 것으로 보이는데 이를 반영하지 않은 함수명입니다. 함수명은 함수가 무엇을 하는지 의미를 나타내야합니다.

async boardList(boards: Columns[], procedure: number) {

board.controller 에서 초대 코드를 보면 URI 가 /boards/invite/:boardId 가 됩니다. 자원(boards) 뒤에는 자원 ID 가 나와야합니다. 그러므로 순서가 잘못되었습니다. 개선해보시면 좋을 것 같습니다.

@Post('/invite/:boardId')

this.boardService.acceptInvitation(token); 는 비동기 함수인데 비동기 처리를 해주지 않고 있습니다.

@Post('/accept/:token')
  acceptInvitation(@Param('token') token: string) {
    this.boardService.acceptInvitation(token);
  }

aws.service 에 있는 함수인데 함수명은 소문자로 시작해야합니다.

async DeleteUploadToS3(fileName: string) {

최종 프로젝트 화이팅입니다!!

ooheunda commented 6 months ago

피드백 감사합니다~~~!!

choobao commented 6 months ago

감사합니다!

julie-kim-dev commented 6 months ago

참고해서 개선해보겠습니다 감사합니다!!