codestates / codestates/Reciper-server
[✍️ Dev Log] 정송이 / 2021-05-17
- Dominant language
- TypeScript
- Stars
- 9
- Forks
- 3
- PR merge metrics
- No merged PRs in 30d
Description
### 오늘은 어떻게 프로젝트에 기여했나요?
- #62 게시글 리스트에서 검색하는 로직 구현
- `post /filterRecruitList/:order/:sort`: stack으로 게시글 검색
- controller 생성 - filterRecruitList
- req.body, req.params로 어떤 데이터를 받을 것인지 고민 및 결정
- req.body: `searchStacksList` - 검색할 때 포함할 stack들의 집합(베열)
- req.params:
- `order`- 검색 결과 갯수(infinite scroll을 위해 검색결과를 잘라서 보내줌)
- `sort`- 검색 순서(최신순, 오래된순) (이후 #23 에도 해당 parameter 추가)
- res.data에 `isEnd`값 추가 - 게시글 데이터가 더 존재하는지에 대한 여부(true, false)
- #19 middleware-authChecker 위치 변경
- 지금까지 구현한 로직에서 발생한 여러가지 에러 수정
- 필드명 고치기(업데이트된 필드명을 적용시키지 못한 부분 수정) #27
- 로직을 작성하는 과정에서 남아있는 주석, 예전 코드 정리
- #69 #71 #72 project+workspace에서 사용할 테이블들의 entity 생성
- Tasks 테이블: 칸반보드에 들어가는 일정 관리 카드(task)를 관리하는 테이블
- Checklists 테이블: task에 들어가는 체크리스트 데이터를 관리하는 테이블
- Task_comments 테이블: task에서 작성할 수 있는 댓글들을 관리하는 테이블
- #64 project 기능 관련 router, controller 생성
- route: projectRouter
- controllers: showProjectList, createProject, editProject, inviteMembers
- chat 기능 구현을 위한 socket.io 공부 + 어떻게 구현할 것인지 고민 및 회의
### 오늘의 프로젝트에서 힘든 점은 무엇인가요?
- 검색 기능을 구현할 때 find() 함수에서 where을 사용하여 원하는 stack만 바로 filter될 수 있도록 작성하고 싶었는데 실제로 테스트한 결과, where 부분이 적용되지 않거나 자꾸 에러가 발생했다.
```js
const allBoards = await getRepository(Recruits).find({
relations: ['writer', 'stacks'],
where: {
stacks: {
name: searchStacksList,
},
},
order: {
createdAt: sort,
},
});
```

방법을 찾기위해 검색하며 여러가지 글을 읽어본 결과, 처음에 entity를 작성할 때 뭔가 어설프게 만들었고 그 부분에서 join + where이 적용되지 않는다는 결론이 나왔다. 이를 올바르게 동작시키려면 entity부터 다시 작성해야할 것 같다는 생각이 들었다.
아직 앞으로 구현해야 할 기능들이 많기 때문에 우선 전체 게시글 데이터를 불러온 다음 하나씩 원하는 stack을 모두 가지고 있는지에 대해 검사하는 방법으로 검색 기능을 작성하였다. 다행히 검색 기능이 원하는대로 작동되긴 하는데 지금 코드보다 더 효율적인 방법이 있을 것 같다는 생각이 들었다. 나중에라도 계획한 기능들을 모두 구현 완료한 후에 시간이 남으면 천천히 여기 부분을 분석+수정&보완하는 방향으로 가고싶다.
```js
let filterResult = [];
for (let idx = 0; idx < allBoards.length; idx++) {
let requireStack = allBoards[idx].stacks.map(el => el.name);
let isRight = true;
for (let chk = 0; chk < searchStacksList.length; chk++) {
if (!requireStack.includes(searchStacksList[chk])) {
isRight = false;
break;
}
}
if (isRight) {
const obj = { ...allBoards[idx], requireStack };
filterResult.push(obj);
}
}
```
### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?
- [x] profile, recruit 기능 테스트 + 에러 수정하기
- [x] API 문서 보완하기! 내일은 꼭 완료하자!
- [x] 오늘 작성한 entity를 토대로 스키마 디자인 보완하기
- [x] socket.io 공부하기
- [x] project 기능 구현하기
- [x] 프로젝트 리스트 조회
- [x] 프로젝트 생성
- [x] 프로젝트 수정
- [x] 프로젝트 팀원 초대(nodemailer)
- [x] workspace 구현 방법 회의하기
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.