[TypeORM] SubScriber 활용하여 User Role 변경 감지 알림 보내기

개발/TypeORM 2021. 12. 1. 11:45

어드민이 유저의 등급을 일반 유저에서 Prime 혹은 특별 유저로 변경 시, 해당 유저에게 알림이 가야되는 로직을 TypeORM의 SubScriber를 통해 구현하였다. afterUpdate를 사용하여 유저 테이블에 변경이 생기면 이를 감지하여 알림 테이블에 지정된 알림 데이터를 저장하는 방식으로 하였는데 유저가 유저 정보를 수정해도 해당 afterUpdate가 작동하는 문제가 발생하였다. 이 문제를 해결하기 위해서는 유저 테이블의 변경이 생기기 이전의 정보와 변경 이후의 정보의 특정 칼럼을 활용하여 예외처리를 해야하는데 TypeORM의 공식 Subscriber 문서를 찾아보면 따로 존재하는 것 같지 않았는데 TypeORM 깃헙 이슈에서 event.databaseEntity를 통해 변경이전의 정보를 가져..

[TypeORM] QueryFailedError: column "relation_Id" does not exist

개발/TypeORM 2021. 11. 25. 08:20

아래와 같이 creaeteQueryBuillder를 통해 Join 테이블에서 'storyId' 칼럼의 값만을 가져오는 쿼리를 구성하는데 QueryFailedError: column "storyId" does not exist와 같이 QueryFailed가 발생하였는데 typeorm 깃헙에도 이슈로 남아있다. const likeList = await this.connection .createQueryBuilder(Like, 'like') .where('like.userId = :userId', { userId: user.id }) .select(['storyId']); const filter = await this.repository .createQueryBuilder('story') .where('sto..

[TypeORM] subQuery 사용하여 정보 가져오기

개발/TypeORM 2021. 11. 19. 08:20

pagination이 적용된 GET 메소드 API를 구성할 때, 주로 createQueryBuilder()를 활용하여 쿼리를 구성하고, .skip()과 .take()를 통해 pagination을 적용시킨다. 만약 다른 테이블에서 특정 칼럼의 값을 가져와 해당 값을 통해 현재 createQueryBuilder가 작동하는 테이블에서 필터링을 통해 값을 가져와야되면, TypeORM 공식 문서에 나와 있는 것과 같이 .getQuery(), .getParameter()를 사용하여 subQuery를 구성할 수 있다. TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite..

[TypeORM] find() 옵션으로 SQL Join 하기

개발/TypeORM 2021. 11. 13. 08:20

TypeORM으로 다른 테이블에서 JOIN을 할 때, repository.find()에 relations 옵션을 활용하면 QueryBuilder를 사용하지않고도, JOIN해서 정보를 가져오는 것이 가능하다. retun this.repository.find({relations:['필요한 테이블명']})