일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- mongoose
- class
- AWS
- dfs
- 게임
- MySQL
- game
- Python
- typeORM
- nodejs
- 공룡게임
- GIT
- jest
- nestjs
- Express
- Dinosaur
- Queue
- cookie
- flask
- JavaScript
- Sequelize
- Nest.js
- MongoDB
- react
- 정렬
- TypeScript
- OCR
- Bull
- 자료구조
- Today
- Total
목록typeORM (8)
포시코딩
지금까지는 회원가입 과정에서의 서비스 단에서 비밀번호를 암호화해왔다. 기존 코드 auth.service.ts import * as bcrypt from 'bcrypt'; @Injectable() export class AuthService { async signupBuyer(body: signupBuyerDTO) { const { password } = body; const passwordHash = await this.hashPassword(password); body.passwordHash = passwordHash; // 회원가입 로직 } private async hashPassword(password: string) { return bcrypt.hashSync(password, 10); } } 하..
개요 async getMeetups(page: number, keyword: string): Promise { const pageLimit = this.configService.get('MEETUPS_PAGE_LIMIT') || 9; return await this.createQueryBuilder('m') .select([ 'm.id', // ...생략 'm.createdAt', 'j', ]) .leftJoin('m.joins', 'j') .leftJoin('m.user', 'u') .where('m.title LIKE :keyword OR m.content LIKE :keyword', { keyword: `%${keyword}%`, }) .orderBy('m.id', 'DESC') .take(page..
개요 개발하다보면 날짜 시간 관련해서 time zone 문제를 다들 겪어봤을 것이다. 전 세계 시간에 대해서도 영점이 존재하고 한국 시간은 9시간을 빼줘야 영점에 맞춰지게 된다. 어떤 날짜 시간을 저장할 때 해당 국가의 시간이 아닌 위에서 말한 영점 시간에 맞춰져 저장이 되야 하는데 이유는 이 서비스가 그 나라뿐만 아니라 다른 나라에서도 접속이 가능할거고 시차가 존재할텐데 나는 9시에 저장했는데 내가 있는 나라보다 1시간 빠른 나라에서 동시에 저장했어도 8시에 저장하게 되는 일이 생기는 이유 때문이다. TypeORM에서 자동으로 만들어 넣어주는 createdAt, updatedAt도 자동으로 그 영점에 맞춰져 저장이 되는데 내가 모임 약속 시간이라는 schedule 컬럼에 대해 string으로 받아 Ty..
개요 Nest.js에서 TypeORM을 쓰며 pagination(페이지네이션)을 구현하게 되어 새로 알게된 부분을 정리해보았다. Basic Repository async findAllUsers({ id, page }: FindAllUserInput): Promise { // ...생략 const allUsers = await this.users.find({ where: { id }, take: 10, skip: (page - 1) * 10, }); // ...생략 } 기본 Repository를 쓸 경우에 find를 쓰면서 where 처럼 take, skip을 써서 pagination을 구현하는 경우이다. take: 한 번에 보여줄 개수 - mysql에서의 limit을 생각하면 된다. skip: 말 그대로..
개요 FK 종속 관계를 부여해놓은 Meetup, Join 라는 이름의 두 entity가 있는데 Meetup(모임)을 만들 때 Join(참가)에 작성자 id를 같이 넣는 로직이 있어 Meetup 데이터를 새로 만들 경우 만든 Meetup의 PK를 FK로 갖는 Join 데이터가 만들어지는 구조이다. 이번에 softDelete 없이 Meetup을 삭제하는 API를 만드는 과정에서 테스트 도중 위와 같은 에러가 발생했는데 entity를 세팅할 때 CASCADE 옵션을 주지 않았기 때문에 delete or update를 할 수 없다고 알려주고 있었다. 그래서 이번엔 예전에 해야되겠네 하고 잊었던 CASCADE 옵션을 추가해볼 것이다. 적용 방법 기존 코드 meetup.entity.ts // ...생략 @Entit..
개요 Controller - Service - Repository의 형태의 아키텍쳐로 이루어진 Nest.js 프로젝트에서 jest로 테스트 코드를 작성하려는데 아주 기본적인 틀만 가지고도 에러가 발생해 그 해결 과정에 대해 정리해보고자 한다. 일단 원래 보통 service에서 repository를 바로 inject 해오기 때문에 repository class가 따로 필요 없으나 여러 테이블을 join하거나 transaction을 쓰기에는 따로 구분 짓는 게 편하다고 생각해 custom repository를 만들게 되었다. 아래는 해당 repository의 코드다. Repository // ...import 생략 @Injectable() export class MeetupsRepository extends..
개요 windows에서 Nest.js 프로젝트를 받아 npm i 한 후 .env 에서 MySQL 정보 세팅하고 서버 실행했더니 ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1) 콘솔에서 이런 에러가 계속 뜨며 서버가 실행되지 않았다. MySQL connect 관련에러로 보이는데 이전 프로젝트에선 잘 연결했었고 저때 당시에도 DBeaver나 MySQL Workbench로는 잘 접속되는 상태라 뭔가 MySQL 내부 세팅이 바뀐건가 해서 검색을 이리저리 해보았다. 해결방법 root 사용자에 대해 뭔가 세팅이 변해서 발생한 문제였다. SELECT Host, user, plugin, authentication_string FROM mysq..
개요 어떤 게시글(Boards)에 대해 '참여하기' 기능이 있어 해당 게시글에서 '참여하기' 버튼을 누르면 제한된(joinLimit) 숫자 내에서 유저가 참여하게끔 기능을 구현하고자 한다. 그럼 먼저 테이블이 두 개가 필요하다. 게시글 테이블: Boards 해당 게시글에 대해 참여한 유저를 담는 테이블: Join 유저 테이블도 필요한데 이번 과정에선 생략 FK 설정 entity를 통해서 설정이 가능하다. 게시글과 join은 1:N 관계이므로 OneToMany가 되어야 한다. board.entity.ts import { // ...생략 } from 'typeorm'; import { Join } from './join.entity'; @Entity({ schema: 'nestjs_sample', name:..