160 lines
4.3 KiB
TypeScript
160 lines
4.3 KiB
TypeScript
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
|
import { EntityNotFoundError, In, Repository } from 'typeorm';
|
|
import { ProductSubCategories } from './entities/product-sub-category.entity';
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
import { CreateSubCategoriesProductDto } from './dto/sub-categories/create-sub-categories-product.dto';
|
|
import { UpdateSubCategoriesProductDto } from './dto/sub-categories/update-sub-categories-product.dto';
|
|
import { ProductCategoriesService } from './product-categories.service';
|
|
|
|
@Injectable()
|
|
export class ProductSubCategoriesService {
|
|
constructor(
|
|
@InjectRepository(ProductSubCategories)
|
|
private productSubCategoriesRepository: Repository<ProductSubCategories>,
|
|
private productCategoriesService: ProductCategoriesService,
|
|
) {}
|
|
|
|
async create(createSubCategoriesProductDto: CreateSubCategoriesProductDto) {
|
|
const check = await this.productSubCategoriesRepository.findOne({
|
|
code: createSubCategoriesProductDto.code,
|
|
});
|
|
|
|
if (check) {
|
|
throw new HttpException(
|
|
{
|
|
statusCode: HttpStatus.NOT_ACCEPTABLE,
|
|
error: 'Sub Category Already Exist',
|
|
},
|
|
HttpStatus.NOT_FOUND,
|
|
);
|
|
}
|
|
|
|
const categories = await this.productCategoriesService.findOne(
|
|
createSubCategoriesProductDto.categoryId,
|
|
);
|
|
|
|
const result = await this.productSubCategoriesRepository.insert({
|
|
name: createSubCategoriesProductDto.name,
|
|
code: createSubCategoriesProductDto.code,
|
|
category: categories,
|
|
});
|
|
|
|
return this.productSubCategoriesRepository.findOneOrFail(
|
|
result.identifiers[0].id,
|
|
);
|
|
}
|
|
|
|
async findAll(page, category: string) {
|
|
let filterCategories;
|
|
if (category) {
|
|
filterCategories = category.split(',').map((data) => data.trim());
|
|
}
|
|
|
|
const baseQuery = this.productSubCategoriesRepository
|
|
.createQueryBuilder('product_sub_categories')
|
|
.leftJoinAndSelect('product_sub_categories.category', 'category');
|
|
|
|
if (category && filterCategories.length > 0) {
|
|
baseQuery.where({
|
|
category: In(filterCategories),
|
|
});
|
|
}
|
|
|
|
const data = await baseQuery
|
|
.skip(page * 10)
|
|
.take(10)
|
|
.getMany();
|
|
|
|
const totalData = await baseQuery.getCount();
|
|
|
|
return {
|
|
data,
|
|
count: totalData,
|
|
};
|
|
}
|
|
|
|
findAllByCategories(page, category) {
|
|
return this.productSubCategoriesRepository.findAndCount({
|
|
skip: page * 10,
|
|
take: 10,
|
|
where: {
|
|
category: category,
|
|
},
|
|
relations: ['category'],
|
|
order: {
|
|
version: 'DESC',
|
|
},
|
|
});
|
|
}
|
|
|
|
async findOne(id: string) {
|
|
try {
|
|
return await this.productSubCategoriesRepository.findOneOrFail(id);
|
|
} catch (e) {
|
|
if (e instanceof EntityNotFoundError) {
|
|
throw new HttpException(
|
|
{
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Product Sub Categories not found',
|
|
},
|
|
HttpStatus.NOT_FOUND,
|
|
);
|
|
} else {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
|
|
async update(
|
|
id: string,
|
|
updateCategoriesProductDto: UpdateSubCategoriesProductDto,
|
|
) {
|
|
try {
|
|
await this.productSubCategoriesRepository.findOneOrFail(id);
|
|
} catch (e) {
|
|
if (e instanceof EntityNotFoundError) {
|
|
throw new HttpException(
|
|
{
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Product Sub Categories not found',
|
|
},
|
|
HttpStatus.NOT_FOUND,
|
|
);
|
|
} else {
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
const categories = await this.productCategoriesService.findOne(
|
|
updateCategoriesProductDto.categoryId,
|
|
);
|
|
|
|
const result = await this.productSubCategoriesRepository.update(id, {
|
|
name: updateCategoriesProductDto.name,
|
|
category: categories,
|
|
});
|
|
|
|
return this.productSubCategoriesRepository.findOneOrFail(id);
|
|
}
|
|
|
|
async remove(id: string) {
|
|
try {
|
|
await this.productSubCategoriesRepository.findOneOrFail(id);
|
|
} catch (e) {
|
|
if (e instanceof EntityNotFoundError) {
|
|
throw new HttpException(
|
|
{
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Product Sub Categories not found',
|
|
},
|
|
HttpStatus.NOT_FOUND,
|
|
);
|
|
} else {
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
await this.productSubCategoriesRepository.delete(id);
|
|
}
|
|
}
|