codestates / codestates/Reciper-server

[✍️ Dev Log] 신승길 / 2021-05-28

Open
#182 0 comments 0 reactions 1 assignee Claimed by @gatsukichi View on GitHub
@katsukichi/불꽃코딩🔥 Dev Log
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.