일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JPA예제
- JPA
- nestjs스터디
- Kafka
- JPA공부
- 스프링부트
- querydsl
- 스프링
- K8S
- 카프카
- JPA 공부
- 코테준비
- nestjs공부
- 자료구조공부
- DDD
- Flutter
- nestjs
- 기술공부
- JPA스터디
- 스프링 공부
- 기술면접공부
- 스프링부트공부
- 자바공부
- 플러터 개발
- 플러터 공부
- 코테공부
- 알고리즘공부
- 프로그래머스
- 스프링공부
- Axon framework
- Today
- Total
목록Develop/[NestJs] (31)
DevBoi
0.2버전은 레퍼런스도 많고, 좀더 자료가 많아서 진행했는데 다른 라이브러리 때문에 자꾸 충돌이 난다. 그래서 대규모 버전 변경 작업을 한다. 작업 내용은 deprecate된 부분을 변경하면서 수정하고, 설계에 대한 수정사항을 수정한다. 1. @EntityRepository deprecated 0.3 버전에서는 사용할 수 없다. 왜 typeorm의 버전을 올리면서 스택자체를 날려버린건지 이해는 안되지만 무튼.. CustomRepository Decorator + CustomRepository Module이 필요하다. import { SetMetadata } from "@nestjs/common"; export const TYPEORM_EX_CUSTOM_REPOSITORY = "TYPEORM_EX_CUST..
queryBuilder를 간략하게 썼었다. 근데 조금 더 심화를 써보자 1) 조인되는 엔티티가 여러개이다. 2) 조인되는 엔티티중 원하는 값만 가져오자 3) 각 조인되는 엔티티는 마스터 이외에는 left조인으로 해보자 or innerJoin으로 해보자 해당 조건을 충족하는 쿼리빌더는 아래와 같다. async getCart(id: string): Promise { const result = await this.cartRepository.createQueryBuilder('cart') .innerJoin(Food,'food','food.id=cart.foodId') .innerJoin(Member,'member','member.id=cart.memberId') .select (['food.id','food...
오늘은 AuthGuard를 이용하여, 해당 가드를 적용할건데 각기 다른 정책으로 관리가 되게 개발을 할 것이다. 쉽게 얘기하면, 한개는 일반 사용자인지, 즉 auth bearer token으로 요청을 하는지 또 한개는 해당 사용자이지만, 사업가의 authCode인지를 체크하는 것이다. 적용한 코드를 참고 바란다. 1.패키지 구조 2.auth-guard.ts import { ExecutionContext, Injectable } from "@nestjs/common"; import { AuthGuard as NestAuthGuard } from "@nestjs/passport"; import { Observable } from "rxjs"; @Injectable() export class JwtAuthGu..
엔티티간의 다대다 관계인 경우, 해당 매핑 테이블을 생성하는 것이 좋은데 매핑 테이블을 엔티티로 선언하는 것보다, 해당 역할을 하는 엔티티를 생성하는 것이 좋다. 1) 매핑 엔티티 import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, JoinColumn, OneToOne, ManyToOne } from 'typeorm'; import { Member } from 'src/member/entities/member.entity'; import { Campaign } from 'src/campaign/entities/campaign.entity'; import { CampaignMemberResDto } from..
의존성 추가 npm install --save bcrypt @types/bcrypt 메소드 구현 (암호화 모듈) async transformPassword(member: MemberReqDto): Promise { member.password = await bcrypt.hash( member.password, 10, ); return Promise.resolve(); } 컨트롤러 소스 async registerUser(memberReqDto: MemberReqDto): Promise { await this.transformPassword(memberReqDto); console.log(memberReqDto); return null; } 해당 transformPassword를 통해 해당 암호화를 리턴받을..
nestjs의 고유기능 pipeline에 대해서 살펴보자 아래와 같이 동작한다. 0.모듈 설치 npm install class-validator class-transformer --save 1. sample code import { ArgumentMetadata, PipeTransform } from "@nestjs/common"; export class AuthValidationPipe implements PipeTransform{ transform(value: any, metadata: ArgumentMetadata) { console.log(value); console.log(metadata); return value; } } 2.특정 컨트롤러에서 만 해당 파이프라인이 적용되게 하기 2-1. 파라미..
간단하게, findOne했을때 로딩 타입을 eager,lazy중 선택하는 것이다. eager로 하게 되면, 관련된 엔티티를 조회할때, 해당 로딩타입에 따라서 한번에 가져올지 나중에 사용할때 가져올지를 선택한다. 무튼, eager타입에 대해서 별도 지정하는 것은 아래와 같다. 해당 lazy로 하고싶으면 lazy 트루로 하면된다. @JoinColumn({ referencedColumnName: 'id' }) @ManyToOne(() => Corp, (corp) => corp.foods,{onDelete: 'CASCADE',eager: true}) corp : Corp; //업체 매핑
스웨거 관련 세팅하는 방법이다. 아래 세가지만 하면, 대충 api 에 대한 스펙 정보는 전달할 수 있다. 더 심화적이고 복잡하게 필요할떄는 구글링을 하면되고, 아래는 기초적인 내용, 보편적으로 90% 커버가능한 것들을 모아 놓는다. 1. 스웨거 관련 디펜던시 추가(pacakage.json에 추가) "@nestjs/swagger": "^6.3.0", "swagger-ui-express": "^4.6.3", 귀찮으면, npm 으로 @nestjs/swagger 추가하면된다. 2. main.ts swagger 진입 정보 및 세팅(main.ts 에 추가 하면된다.) const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('ap..
여러개의 연관관계가 매핑되어 있는경우, 예를 들어, 1:N관계로 설정이 되어있을때 부모 데이터를 삭제하면 삭제가 되지않는다. 이유는 하위 데이터가 있는 경우, 외래키 제약 조건이 걸려있어서 하위데이터를 삭제 해야만 삭제를 할수 있도록 데이터 베이스 단에서 막아버리는 것이다. 이름이...외래키 제약조건인가..무튼 그래서 jpa에서도 cascade(고아객체)에 대한 전파를 줄수 있다. 이를 nestjs 적용하면 아래와 같다. @JoinColumn() @ManyToOne(() => Corp, (corp) => corp.foods,{onDelete: 'CASCADE'}) corp : Corp; //업체 매핑 @OneToMany(() => FoodImage, (foodImage) => foodImage.food,..
저번 포스팅에서 다뤘던, S3 이미지 업로드 모듈에 대한 마무리를 지으려고한다. 우선, 개발내용은 아래와 같다. 1. 음식에 대한 정보를 올릴 수 있음 2.음식에 대한 정보가 생성되면, 음식에 대한 id 값이 생성됨. 3.음식에 대한 id값 기준으로, 해당 음식에 대한 사진정보를 담아서 저장함 4.음식사진에 대한 업로드 모듈을 제작함 일단 음식사진에 대한 정보를 올리는 모듈이다. @ApiOperation({ summary: '음식사진 정보 생성' }) @ApiParam({ description: '음식사진 정보 생성', type: [FoodImageReqDto], name: 'foodImageInfos' }) @Post(':id') async postFoodImageInfo(@Body('foodImage..