codestates / codestates/Reciper-server
[✍️ Dev Log] 신승길 / 2021-05-28
- Dominant language
- TypeScript
- Stars
- 9
- Forks
- 3
- PR merge metrics
- No merged PRs in 30d
Description
### 오늘은 어떻게 프로젝트에 기여했나요?
- #166 먼저 task Detail창을 열게되면 나오는 edit 에대한 event를 처리했다.
- #167 이후 taskBox를 draggig할시 접속된 모든 소켓에 브로드캐스트로 block처리 이벤트를 했다 (클라이언트 은욱님께서 수고해주셧다)
- #167 taskItem의 dragging block처리 이벤트 구현했다.
- #171 로 merge를 완료했고
오후에 송이님께서 이니셜셋업을 끝내주신 part에대한 api를 처리했다.
CRUD를 생각하면 편하다
- #172 Read부분의 ShowKanbanParts API 구현
- #173 Create부분의 CreateKanbanParts API 구현
- #174 Update부분의 EditKanbanParts API 구현
- #175 Delete부분의 DeleteKanbanParts API 구현
- #180 이후 create부분에서 받아오는 index를 클라이언트에서 요구하지않기위해서 서버로직으로 해결했다.
### 오늘의 프로젝트에서 힘든 점은 무엇인가요?
- SQL에서 살짝헤맨거같다..
- typeORM에서 createQueryBuilder? 기능으로 leftJoin을 엄청 시켜놓은 부분이있는데
- 나는 코드흐름대로 중간중간 order를 끼워넣었지만. 이게 정상작동하는것으로 착각하고있던거같다 (어제)
```ts
.createQueryBuilder('projects')
.where('projects.id = :id', { id: projectId })
.leftJoinAndSelect('projects.partsList', 'partsList', 'partsList.title = :title', { title: part })
.leftJoinAndSelect('partsList.taskBoxesList', 'taskBoxesList')
.orderBy('taskBoxesList.index', 'ASC')
.leftJoinAndSelect('taskBoxesList.tasksList', 'tasksList')
.orderBy('tasksList.index', 'ASC')
.leftJoinAndSelect('tasksList.checklistsList', 'checklistsList')
.orderBy('checklistsList.createdAt', 'ASC')
.leftJoinAndSelect('tasksList.commentsList', 'commentsList')
// .getQuery();
.getMany();
```
- 이후 오늘발견된 내용으로는 그냥 order에대한부분 자체가 안먹는것이였다. 뭐지 했는데
- 송이님께서 쿼리에서 order부분은 항상 마지막에 붙는다고 지적해주셨고 실제로
- getQuery()를 통해서 확인해본결과
```sql
SELECT `projects`.`id` AS `projects_id`, `projects`.`name` AS `projects_name`, `projects`.`projectURL` AS `projects_projectURL`, `projects`.`projectColor` AS `projects_projectColor`, `projects`.`inviteList` AS `projects_inviteList`, `projects`.`createdAt` AS `projects_createdAt`, `projects`.`updatedAt` AS `projects_updatedAt`, `partsList`.`id` AS `partsList_id`, `partsList`.`title` AS `partsList_title`, `partsList`.`index` AS `partsList_index`, `partsList`.`createdAt` AS `partsList_createdAt`, `partsList`.`updatedAt` AS `partsList_updatedAt`, `partsList`.`doingProjectId` AS `partsList_doingProjectId`, `taskBoxesList`.`id` AS `taskBoxesList_id`, `taskBoxesList`.`title` AS `taskBoxesList_title`, `taskBoxesList`.`index` AS `taskBoxesList_index`, `taskBoxesList`.`createdAt` AS `taskBoxesList_createdAt`, `taskBoxesList`.`updatedAt` AS `taskBoxesList_updatedAt`, `taskBoxesList`.`groupingPartId` AS `taskBoxesList_groupingPartId`, `tasksList`.`id` AS `tasksList_id`, `tasksList`.`index` AS `tasksList_index`, `tasksList`.`title` AS `tasksList_title`, `tasksList`.`desc` AS `tasksList_desc`, `tasksList`.`taskColor` AS `tasksList_taskColor`, `tasksList`.`startDate` AS `tasksList_startDate`, `tasksList`.`endDate` AS `tasksList_endDate`, `tasksList`.`assignees` AS `tasksList_assignees`, `tasksList`.`createdAt` AS `tasksList_createdAt`, `tasksList`.`updatedAt` AS `tasksList_updatedAt`, `tasksList`.`groupingBoxId` AS `tasksList_groupingBoxId`, `checklistsList`.`id` AS `checklistsList_id`, `checklistsList`.`desc` AS `checklistsList_desc`, `checklistsList`.`isChecked` AS `checklistsList_isChecked`, `checklistsList`.`createdAt` AS `checklistsList_createdAt`, `checklistsList`.`updatedAt` AS `checklistsList_updatedAt`, `checklistsList`.`nowTaskId` AS `checklistsList_nowTaskId`, `commentsList`.`id` AS `commentsList_id`, `commentsList`.`body` AS `commentsList_body`, `commentsList`.`createdAt` AS `commentsList_createdAt`, `commentsList`.`updatedAt` AS `commentsList_updatedAt`, `commentsList`.`nowTaskId` AS `commentsList_nowTaskId`, `commentsList`.`writerId` AS `commentsList_writerId` FROM `projects` `projects` LEFT JOIN `parts` `partsList` ON `partsList`.`doingProjectId`=`projects`.`id` AND (`partsList`.`title` = :title) LEFT JOIN `task_boxes` `taskBoxesList` ON `taskBoxesList`.`groupingPartId`=`partsList`.`id` LEFT JOIN `tasks` `tasksList` ON `tasksList`.`groupingBoxId`=`taskBoxesList`.`id` LEFT JOIN `checklists` `checklistsList` ON `checklistsList`.`nowTaskId`=`tasksList`.`id` LEFT JOIN `task_comments` `commentsList` ON `commentsList`.`nowTaskId`=`tasksList`.`id` WHERE `projects`.`id` = :id ORDER BY `checklistsList`.`createdAt` ASC
```
`ORDER BY`가 멘마지막에 하나만 먹은것을 볼수있었다. 이후
```ts
.createQueryBuilder('projects')
.where('projects.id = :id', { id: projectId })
.leftJoinAndSelect('projects.partsList', 'partsList', 'partsList.title = :title', { title: part })
.leftJoinAndSelect('partsList.taskBoxesList', 'taskBoxesList')
.leftJoinAndSelect('taskBoxesList.tasksList', 'tasksList')
.leftJoinAndSelect('tasksList.checklistsList', 'checklistsList')
.leftJoinAndSelect('tasksList.commentsList', 'commentsList')
.orderBy('taskBoxesList.index', 'ASC')
.orderBy('tasksList.index', 'ASC')
.orderBy('checklistsList.createdAt', 'ASC')
// .getQuery();
.getMany();
```
순서를바꿧지만 적용이 되지않는것을 확인했고
order문을 하나 이상 사용하면 addOrderBy를 써야한다는것을 알았다.
```ts
.createQueryBuilder('projects')
.where('projects.id = :id', { id: projectId })
.leftJoinAndSelect('projects.partsList', 'partsList', 'partsList.title = :title', { title: part })
.leftJoinAndSelect('partsList.taskBoxesList', 'taskBoxesList')
.leftJoinAndSelect('taskBoxesList.tasksList', 'tasksList')
.leftJoinAndSelect('tasksList.checklistsList', 'checklistsList')
.leftJoinAndSelect('tasksList.commentsList', 'commentsList')
.orderBy('taskBoxesList.index', 'ASC')
.addOrderBy('tasksList.index', 'ASC')
.addOrderBy('checklistsList.createdAt', 'ASC')
// .getQuery();
.getMany();
```
역시 SQL마스터 송이님 최고!!
### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?
- [ ] 아직 정하진않았지만..다음주거를 땡겨서하던 배포및 지금까지 만든기능에대해서 정리및 버그픽스가 우선인거같다.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.