TypeORM GroupBy를 사용하여 정렬 Count하기

개발/TypeORM 2022. 1. 14. 02:47

모든 유저를 지역별로, 연령별로 정렬하여 유저 수를 통계를 내야되는 이슈가 있었다. 연령별로 묶어서 Count를하여 aged_user: [{age:'21', age_count:'10'}, {age: '22', age_count:'12'}]의 형식으로 프론트에 리턴해주는 것을 목표로 typeorm QueryBuilder를 사용하여 쿼리를 구성하였다. const userByAge = await this.repository .createQueryBuilder('user') // 유저 테이블을 지칭하는 이름을 'user'로 한다. .select('user.age') // 정렬할 유저 테이블의 칼럼만 select한다. .orderBy('user.age', 'DESC') // select한 칼럼을 내림차순으로 정렬..

Article Thumbnail
Date 타입을 유지하면서 전/후 Date 출력하기

개발/TypeScript 2022. 1. 13. 08:20

TypeScript에서 현재 연도월일시분을 가져오는 방법은 아래와 같이 단순하다. const now = new Date(); 현재 기준으로 전날 혹은 다음 달을 포함한 Date를 출력해야되는 경우가 발생하였는데 대부분의 솔루션들은 일 또는 월로 변경시켜서 빼고 더하는 방식으로 Date 타입이 유지가 되지않는다는 단점이 있었다. StackOverflow에서 12년하고도 4달이나 지난 해당 질문에 대한 답변의 대댓글 중에 아래와 같이 처음보는 방식의 코드를 보게되었다. How to subtract days from a plain Date? Is there an easy way of taking a olain JavaScript Date (e.g. today) and going back X days? So, ..

Article Thumbnail
SubScriber afterRemove( )에서 removeEvent의 Entity가 notFound인 이유

개발/TypeORM 2021. 12. 26. 17:14

LikeCount와 같은 테이블의 number 칼럼에 +1 혹은 -1을 할 일이 생기는 경우, +1을 하는 API를 새로 구성하는 것 보다 Like 테이블에 row가 추가될 때마다 SubScriber에서 트랜잭션을 열고, +1을 추가하는 것이 프론트의 api 호출 빈도를 줄일 수 있다는 점에서 장점이 있다고 생각하였다. +1의 경우, TypeORM afterInsert( )를 사용하여 insertEvent가 해당 테이블에서 발생시 number +=1을 하는 방식으로 작성하여, 정상적으로 likeCount 칼럼의 값에 +1이 되는 것을 확인하였는데, -1의 경우, 테이블에서 해당 정보가 삭제되더라도 removeEvent가 row가 삭제된 것을 체크하지않아 -=1이 되지않는 문제가 발생하였다. 원인 Dele..

Article Thumbnail
[TypeORM] SubScriber에서 camel Case 방식 칼럼값 업데이트 시 QueryFailedError: column does not exist 발생 시

개발/TypeORM 2021. 12. 19. 00:25

좋아요 API를 구현하고, 테스트 하던 중 아래와 같이 Column "likecount" does not exist 에러가 발생하였다. 그런데 해당 칼럼은 스토리 테이블에 존재하는 칼럼이다. 아래와 같이 TypeORM의 EntitySubscriberInterface를 implement해서 LikeSubScriber를 구현하였는데 afterInsert와 InsertEvent를 통해 Like 테이블에 새로운 row가 추가될 때마다 Story 테이블의 해당 스토리 likeCount 칼럼에 +=1을 하는 방식으로 해당 이슈를 참고하여 구현하였다. How can I incr/decr a value? · Issue #680 · typeorm/typeorm How can I increase a value by one..

Article Thumbnail