본문 바로가기

Uber Eats

(29)
Uber Eats # 20 Metadata로 사용자 분기 처리하기 @UseGuards(AuthGuard)를 사용해서 User가 있을 때에만 접근가능하도록 해주었다. 이번에는 Metadata를 사용해보자. 여기서 Metadata를 사용하는 이유는 사용자의 role에 따라 접근하도록 하기 위함이다. @SetMetadata를 사용하는데 여기에는 2개의 인자를 가질 수 있다. 하나는 key이고 다른 하나는 value이다. @SetMetadata("role", UserRole.Owner) 핵심은 모든 resolver에서 metadata를 사용하는데 있다. 그러기 위해서 auth 아래에 auth.decorator.ts를 만들어서 사용한다. 함수형을 만들고 여기에 전달하는 인자는 UserRole을 enum 형태로 export 하여 만든다. type AllowedRoles = key..
Uber Eats # 19 Mail module 만들기 1. 이메일 모듈 만들어서 유저 인증하기 Mailgun 서비스 이용하기 fake number을 사용해도 된다. Sending menu에서 API를 선택하면 아래 node.js mailgun이 있지만 수동으로 만들기 위해서 cURL을 사용한다. 카드등록 시 5,000 번 메일 이용이 가능하지만 등록을 안 했을 시는 셀프 인증을 통해서 진행한다. 셀프 인증은 오른쪽 상단 Authorized Recipients 아래 메일을 입력하고 해당 메일에서 I Agree를 클릭해서 진행하면 된다. 수동으로 만들고 싶지 않다면 nestjs에서 제공하는 nodemailer를 사용한다. 그게 아니라면 API를 이용한 Email module을 만들어보자. nest g mo mail로 모듈을 생성한다. 모듈 생성 후 mail m..
Uber Eats # 18 User Profile sync와 async의 차이를 알아야 userProfile 쿼리 작성 시 생기는 에러를 해결할 수 있다. @UseGuards(AuthGuard) @Query(returns => UserProfileOutput) userProfile(@Args() userProfileInput: UserProfileInput): Promise { try{ const user = this.usersService.findById(userProfileInput.userId); } catch (e) { return { error: 'User Not Found', ok: false, }; } } // 에러 src/users/users.resolver.ts:60:15 - error TS2322: Type '{ error: strin..
Uber Eats # 17 AuthGuard NestJS Guard Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac docs.nestjs.com nest g mo auth로 인증 모듈을 만든다. Guard는 HTTP Request를 다음 단계로..
Uber Eats # 16 User Authentication nestjs/passport 적용하여 passport-jwt와 nestjs/jwt 활용하기 전에 수작업으로 인증하기 Token generation 작동하기 모듈로 적용하기 Token generation 작동하기 json web token 설치하기 npm i jsonwebtoken 여기에는 Typescript 파일이 없다. 수동으로 찾아서 설치한다. npm i @types/jsonwebtoken --only-dev 사용하기 jwt.sign에 token 데이터, privatekey, algorithm을 적어주면 된다. privatekey는 process.env에서 가져온다. 이를 가져오기 위해서 app.module.ts를 수정한다. ConfigModule.forRoot({ isGlobal: true, env..
Uber Eats # 15 User Resolver and Service, InputType과 ObjectType 비교 Service는 repository가 필요하다. 그래서 UsersModule에 imports에 입력한다. import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { User } from './entities/user.entity'; import { UsesrsResolver } from './users.resolver'; import { UsersService } from './users.service'; @Module({ imports:[TypeOrmModule.forFeature([User])], providers: [UsesrsResolver, UsersService] }) expo..
Uber Eats # 14 User Model 공통으로 사용할 Entity 컬럼을 따로 만들어서 extends를 통해서 사용한다. CreatedDate와 UpdatedDate에는 Special columns를 사용한다. @CreateDateColumn is a 자동으로 엔터티 생성 날짜를 만들어준다. @UpdateDateColumn is a 자동으로 엔터티 업데이트 날짜를 만들어준다. @DeleteDateColumn is a special column that is automatically set to the entity's delete time each time you call soft-delete of entity manager or repository. . @VersionColumn is a special column that is automa..
Uber Eats # 13 User CRUD User Module Relationship + 여러 columns을 통해서 User Model을 만든다. CRUD Account, Log In: password Hash, password 검증, authentication, authorization Middlewares, Metadata like guards Custom decorator 만들기 Test: GraphQL resolver, Unit testing, end-to-end testing