매일 한걸음씩 성장하기

오늘은 어떻게 프로젝트에 기여했나요?

Workspace

▷ workspace: chat 기능 보완

- `sendMessage` 이벤트에서 생성된 chat 데이터의 id를 작성자에게 보내주는 부분 추가

 

▷ workspace: kanban 기능 보완

- taskColor 데이터도 함께 저장하도록 수정

- `structuringData` 함수에서 comment 데이터에 writer 데이터가 있도록 SQL 구문 보완

const projects = await getRepository(Projects)
    .createQueryBuilder('projects')
    .where('projects.id = :id', { id: projectId })
    .leftJoinAndSelect('projects.partsList', 'partsList', 'partsList.name = :name', { name: part })
    .leftJoinAndSelect('partsList.taskBoxesList', 'taskBoxesList')
    .leftJoinAndSelect('taskBoxesList.tasksList', 'tasksList')
    .leftJoinAndSelect('tasksList.checklistsList', 'checklistsList')
    .leftJoinAndSelect('tasksList.commentsList', 'commentsList')
    .leftJoinAndSelect('commentsList.writer', 'writer') // 이 부분 추가
    .orderBy('taskBoxesList.index', 'ASC')
    .addOrderBy('tasksList.index', 'ASC')
    .addOrderBy('checklistsList.createdAt', 'ASC')
    .getMany();

- `post /workspace/:projectURL/kanban/:part` 요청 로직 수정 (이하 `editKanbanPart`로 표기)

part 이름을 수정하면 자꾸 이미 존재하는 part라는 에러가 발생했습니다.

알고보니 `controllers/workspace/socketKanban.ts`의 `joinPart` 이벤트에서 DB에 존재하지 않는 part에 들어가게 되면 자동으로 그 이름을 DB에 추가해주는 로직이 있었고 클라이언트에서 part 이름을 수정할 때 `editKanbanPart` 요청과 `joinPart`를 동시에 실행시키고 있었습니다.

`joinPart` 이벤트가 먼저 실행(수정하는 이름으로 된 part로 입장할 때 그 이름을 DB에 저장)된 이후에 `editKanbanPart` 요청이 실행되었는데(socket 통신이 express보다 빠름) 이때에는 수정하려는 이름이 이미 DB에 존재하고 있었기에 계속 'already existed error'가 발생한 것이었습니다. 그래서 `joinPart`에서 DB에 저장하는 부분을 삭제했더니 part 이름 수정이 잘 되는 것을 확인할 수 있었습니다.

위에 언급한 부분을 삭제해도 되는 이유는 `joinPart` 이벤트가 발생할 때에는 이미 DB 존재하는 part 접속한다는 것이 보장되어 있기 때문에(처음에 part 목록을 내려주고  목록 내에서 버튼을 클릭하여 part 이동을 하도록 구현되어 있음) DB 존재하지 않는 이름을 가진 part join하는 경우는 고려하지 않아도 됩니다.

 

 

오늘의 프로젝트에서 힘든 점은 무엇인가요?

▷ socket.io에서 emit 보내기

한 유저가 채팅 메시지를 작성하면 다른 유저들에게 그 채팅 메시지를 보내 화면에 표시하도록 되어있었습니다(`sendMessage`).

그런데 채팅 메시지를 수정/삭제를 위해 그 채팅 메시지의 id를 알려줄 필요가 생겼고(id를 사용하여 DB에 접근할 수 있다) id를 작성자에게 보내주도록 코드를 보완해야 했습니다(`nowMessageId`).
하지만 실제로 테스트 해보니 하나만 보내지거나 둘다 보내지지 않는 문제가 생겼습니다.

여러가지 방법을 시도했으나 계속 실패하던 도중 공식문서에서 해답을 찾을 수 있었고 공식 문서에 나온 대로 emit을 수정하여 시도했더니 성공했습니다.

socket.to(room).emit('sendMessage', { ...chat });
socket.emit('nowMessageId', { id: chat.id });

 

 

내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?

▷ 에러 수정 및 코드 보완

▷ 프로젝트 문서화

 

'Code States > Project Record' 카테고리의 다른 글

[기록] Final Project_2021.06.04  (0) 2021.06.04
[기록] Final Project_2021.06.03  (0) 2021.06.03
[기록] Final Project_2021.06.01  (0) 2021.06.01
[기록] Final Project_2021.05.31  (0) 2021.05.31
[기록] Final Project_2021.05.30  (0) 2021.05.30

공유하기

facebook twitter kakaoTalk kakaostory naver band