Project using Nest.js/E-commerce App
-
NestJS Custom repositoryProject using Nest.js/E-commerce App 2021. 9. 4. 08:47
개요 TypeORM의 Custom Repository를 이용해서 Active Recorder에 없는 method를 추가할 것이다. categories/repositories/category.repository.ts import { EntityRepository, Repository } from 'typeorm'; import { Category } from '../entities/category.entity'; @EntityRepository(Category) export class CategoryRepository extends Repository { async findOneBySlugUsingName(name: string) { const categoryName = name.trim().toLower..
-
slug를 이용해서 category search 하기Project using Nest.js/E-commerce App 2021. 9. 4. 08:36
개요 Slug는 web 주소의 고유 식별 부분이다. 보통 URL의 끝부분이다. 내 주소에서는 baseURL(clownhacker.tistory.com/)의 뒷 부분인 번호다. 카테고리에 있는 품목 리스트를 출력하기 위해서 카테고리 slug 값이 필요하다. 카테고리 slug 값은 카테고리 name을 processed 한 것이다. categories.service.ts async createCategory({ name, coverImg, }: CreateCategoryInput): Promise { try { const categoryName = name.trim().toLowerCase(); const categorySlug = categoryName.replace(/ /g, '-'); const cate..
-
TypeORM의 @ManyToOne과 @OneToManyProject using Nest.js/E-commerce App 2021. 9. 3. 17:38
개요 TypeORM은 관계형 ORM이다. 각각의 인스턴스가 서로를 참조할 수 있다. product.entity.ts import { Field, InputType, ObjectType } from '@nestjs/graphql'; import { IsString } from 'class-validator'; import { Column, Entity, ManyToOne } from 'typeorm'; import { CoreEntity } from 'src/common/entities/common.entity'; import { Category } from 'src/categories/entities/category.entity'; @InputType('ProductInputType', { isAbstr..
-
nestJS에서 DTO에서 쓰는 PartialType and PickType을 같이 쓸 때 주의할 점Project using Nest.js/E-commerce App 2021. 9. 3. 16:39
product.entity.ts import { Field, InputType, Int, ObjectType } from '@nestjs/graphql'; import { IsNumber, IsString } from 'class-validator'; import { Column, Entity, ManyToOne } from 'typeorm'; import { CoreEntity } from 'src/common/entities/common.entity'; import { User } from 'src/users/entities/user.entity'; import { Category } from 'src/categories/entities/category.entity'; @InputType('InfoI..
-
nestJS password securityProject using Nest.js/E-commerce App 2021. 9. 3. 16:17
개요 Server는 Client 측에서 보내는 모든 data를 신뢰해서는 안 된다. Client에서도 filtering을 하겠지만 hacker가 마음을 먹으면 충분히 Client filter를 우회해서 값을 주입할 수 있다. 그렇기 때문에 server에서도 password 보안 정책을 해줘야만 한다. user.entity.ts import { Field, InputType, ObjectType, } from '@nestjs/graphql'; import { IsEmail, IsString, MinLength, } from 'class-validator'; import { BeforeInsert, BeforeUpdate, Column, Entity } from 'typeorm'; @InputType('Us..
-
nest.js authGuard and authUser decoratorProject using Nest.js/E-commerce App 2021. 9. 2. 18:43
개요 nest.js의 authGuard로 authorization을 준다. Roles decorator를 사용하여 권한을 사용자의 role에 따라 나눈다. app.module.ts에 GraphQlModule에 context를 줘서 GqlExecutionContext.create(context)가 gql의 context에 접근하게 한다. app.module.ts GraphQLModule.forRoot({ playground: process.env.NODE_ENV !== 'production', autoSchemaFile: true, context: ({ req }) => { const TOKEN_KEY = 'authorization'; let token: string = null; let authoriza..
-
JWT with nestJSProject using Nest.js/E-commerce App 2021. 9. 2. 14:21
app.module.ts app.module.ts에 있는 @Module({})에 JwtModule.forRoot({})를 추가한다. 인자로는 privateKey 값을 준다. process.env.PRIVATE_KEY는 랜덤한 key 값이다. jwt.module.ts import { DynamicModule, Global, Module } from '@nestjs/common'; import { CONFIG_OPTIONS } from 'src/common/common.constants'; import { JwtModuleOptions } from './jwt.interfaces'; import { JwtService } from './jwt.service'; @Module({}) @Global() expo..
-
login API on nestJS using graphqlProject using Nest.js/E-commerce App 2021. 9. 2. 13:32
user.entity.ts import { Field, InputType, ObjectType, registerEnumType, } from '@nestjs/graphql'; import { IsBoolean, IsEmail, IsEnum, IsString } from 'class-validator'; import { BeforeInsert, Column, Entity } from 'typeorm'; import * as bcrypt from 'bcrypt'; import { CoreEntity } from 'src/common/entities/common.entity'; import { InternalServerErrorException } from '@nestjs/common'; export enum..