import { BadRequestException, Injectable, NotFoundException, Logger } from '@nestjs/common'; import { UpdateResult } from 'typeorm'; import { plainToClass } from 'class-transformer'; import { PageDto } from 'upsti-lib-common'; import { {{moduleName}}Repository } from './{{toLowerCase moduleName}}.repository'; import { {{moduleName}}Mapper } from './{{toLowerCase moduleName}}.mapper'; import { Create{{moduleName}}DTO } from './dtos/{{toLowerCase moduleName}}-create.dto'; import { Update{{moduleName}}DTO } from './dtos/{{toLowerCase moduleName}}-update.dto'; import { Delete{{moduleName}}DTO } from './dtos/{{toLowerCase moduleName}}-delete.dto'; import { Response{{moduleName}}DTO } from './dtos/{{toLowerCase moduleName}}-response.dto'; import { Search{{moduleName}}DTO } from './dtos/{{toLowerCase moduleName}}-search.dto'; @Injectable() export class {{moduleName}}Service { constructor( private readonly {{toLowerCase moduleName}}Repository: {{moduleName}}Repository, private readonly {{toLowerCase moduleName}}Mapper: {{moduleName}}Mapper, ) {} private logger = new Logger('{{moduleName}}Service'); async create(create{{moduleName}}Dto: Create{{moduleName}}DTO): Promise { try { const {{toLowerCase moduleName}} = await this.{{toLowerCase moduleName}}Mapper.createDTOEntity(create{{moduleName}}Dto); const dataSave = await this.{{toLowerCase moduleName}}Repository.save({{toLowerCase moduleName}}); return await this.{{toLowerCase moduleName}}Mapper.entityDTO(dataSave); } catch (error) { this.logger.error(error); throw new BadRequestException(error); } } async search(req: Search{{moduleName}}DTO): Promise> { try { const request = plainToClass(Search{{moduleName}}DTO, req); const dataPages = await this.{{toLowerCase moduleName}}Repository.search(request); return await this.{{toLowerCase moduleName}}Mapper.page2Dto(request, dataPages); } catch (error) { this.logger.error(error); throw new BadRequestException(error); } } async findOne(id: number): Promise { try { const {{toLowerCase moduleName}} = await this.{{toLowerCase moduleName}}Repository.findOneBy({ id }); if (!{{toLowerCase moduleName}}) { throw new NotFoundException('El registro no fue encontrado o no existe'); } return await this.{{toLowerCase moduleName}}Mapper.entityDTO({{toLowerCase moduleName}}); } catch (error) { this.logger.error(error); throw new BadRequestException(error); } } async update( id: number, {{toLowerCase moduleName}}Dto: Update{{moduleName}}DTO, ): Promise { try { const dataExisting = await this.{{toLowerCase moduleName}}Repository.findOneBy({ id, }); if (!dataExisting) { throw new NotFoundException('El registro no fue encontrado o no existe'); } const dataUpdate = await this.{{toLowerCase moduleName}}Mapper.updateDTOEntity( dataExisting, {{toLowerCase moduleName}}Dto, ); const dataSave = await this.{{toLowerCase moduleName}}Repository.save(dataUpdate); return await this.{{toLowerCase moduleName}}Mapper.entityDTO(dataSave); } catch (error) { this.logger.error(error); throw new BadRequestException(error); } } async delete{{moduleName}}s(ids: Delete{{moduleName}}DTO): Promise { try { return await this.{{toLowerCase moduleName}}Repository.logicalDeletes(ids); } catch (error) { this.logger.error(error); throw new BadRequestException(error); } } async delete{{moduleName}}(id: number): Promise { try { return await this.{{toLowerCase moduleName}}Repository.logicalDelete(id); } catch (error) { this.logger.error(error); throw new BadRequestException(error); } } }