import { Injectable, Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { EntityNotFoundError, Repository } from 'typeorm'; import { Department } from './entities/department.entity'; import { DepartmentCreateDto } from './dto/department-create.dto'; import { DepartmentUpdateDto } from './dto/department-update.dto'; import { PaginateQuery, Paginated, paginate } from 'nestjs-paginate'; @Injectable() export class DepartmentService { constructor( private readonly logger: Logger, @InjectRepository(Department) private departmentsRepository: Repository, ) {} create(departmentCreateDto: DepartmentCreateDto): Promise { // Use Repository.create() will copy the values to destination object. const department = this.departmentsRepository.create(departmentCreateDto); return this.departmentsRepository.save(department); } findAll(query: PaginateQuery): Promise> { return paginate(query, this.departmentsRepository, { relations: { staffs: true }, sortableColumns: ['id', 'name'], // select: ['id', 'name', 'staffs.name'], // searchableColumns: ['name', 'department.name'], // filterableColumns: { // 'home.pillows.color': [FilterOperator.EQ], // }, }); // return this.departmentsRepository.find(); } findOne(id: number): Promise { return this.departmentsRepository.findOneOrFail({ where: { id } }); } async update( id: number, departmentUpdateDto: DepartmentUpdateDto, ): Promise { await this.isExist(id); await this.departmentsRepository.update({ id }, departmentUpdateDto); } async remove(id: number): Promise { await this.isExist(id); await this.departmentsRepository.delete(id); } // Helper function: Check if the entity exist. // If entity does not exsit, return the Promise.reject() private async isExist(id: number): Promise { const cnt = await this.departmentsRepository.countBy({ id }); if (cnt > 0) { return; } else { return Promise.reject( new EntityNotFoundError(Department, { where: { id } }), ); } } }