import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CreateProductDto } from './dto/create-product.dto';
import { ProductOutput, ProductsOutput } from './dto/output.dto';
import { Categories } from './entities/categories.entity';
import { Product } from './entities/products.entity';
@Injectable()
export class ProductService {
constructor(
@InjectRepository(Product) private readonly products: Repository<Product>,
@InjectRepository(Categories) private readonly categories: Repository<Categories>,
) {}
객체 Repository 선언
async getAll(page, pageSize): Promise<ProductsOutput> {
try {
console.log(page);
console.log(pageSize);
// throw new error();
return {
ok: true,
data: await this.products.find({
relations: ['category'],
skip: (page - 1) * pageSize,
take: pageSize,
}),
};
} catch (e) {
return {
ok: false,
error: e,
};
}
}
http://localhost:3000/product?page=1&pageSize=10
Controller에서 받아온 page 매개변수를 이용해 pagination 구현
this.products.find
: products의 전체 데이터 조회
relations: ['category'],
: join한 테이블 데이터까지 조회
skip: (page - 1) * pageSize,
: 조회할 시작점 지정
take: pageSize,
: 조회할 데이터 수 지정
async getOne(id: number): Promise<ProductOutput> {
try {
// throw new BadRequestException();
return {
ok: true,
data: await this.products.findOne(id, { relations: ['category'] }),
};
} catch (e) {
return {
ok: false,
error: e,
};
}
}
http://localhost:3000/products/3
Controller에서 받아온 id 매개변수를 통해 해당 id 데이터 출력
this.products.findOne
: products의 단일 데이터 조회
relations: ['category']
: join한 테이블 데이터까지 조회
async create(productData: CreateProductDto) {
try {
const product = this.products.create(productData);
// DB에 create가 아닌 product 객체에 create
await this.products.save(product);
return {
ok: true,
data: await this.products.findOne(product.id, {
relations: ['category'],
}),
};
} catch (e) {
console.log('error');
return {
ok: false,
error: e,
};
}
}
@Body에서 CreateProductDto로 받아온 객체를
this.products.save(product);
로 저장
async deleteOne(id: number): Promise<void> {
try {
await this.products.delete(id);
} catch (e) {
console.log('error');
}
}
받아온 매개변수 id의 데이터를 삭제
this.products.delete(id);
async update(id: number, updateData): Promise<void> {
try {
await this.products.update(id, updateData);
} catch (e) {
console.log('error');
}
}
}
받아온 id 값의 데이터를 UpdateProductDto 객체로 수정
this.products.update(id, updateData);