From 43f5864a0eee1212ba8fd67655a0731d41d798a8 Mon Sep 17 00:00:00 2001 From: Henrique Melo Date: Thu, 26 Oct 2023 23:55:14 -0300 Subject: [PATCH 1/3] adiciona conversao da foto do usuario --- src/shared/helpers/buffer-to-image.spec.ts | 14 +++++++++++++- src/shared/helpers/buffer-to-image.ts | 4 ++++ src/usuario/usuario.controller.ts | 2 +- src/usuario/usuario.service.spec.ts | 10 ++++++++++ src/usuario/usuario.service.ts | 10 +++++++--- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/shared/helpers/buffer-to-image.spec.ts b/src/shared/helpers/buffer-to-image.spec.ts index 1609ced..28e4946 100644 --- a/src/shared/helpers/buffer-to-image.spec.ts +++ b/src/shared/helpers/buffer-to-image.spec.ts @@ -1,4 +1,9 @@ -import { bufferToBase64, isBase64, isBase64Image } from './buffer-to-image'; +import { + bufferToBase64, + getImageUri, + isBase64, + isBase64Image, +} from './buffer-to-image'; describe('Buffer to image', () => { describe('bufferToBase64', () => { @@ -10,6 +15,13 @@ describe('Buffer to image', () => { expect(image).toEqual(str); }); + it('should getImageUri', async () => { + const str = '/9j/4AAQSkZJRgABAQAAAQABAAD'; + const buff = Buffer.from(str, 'utf-8'); + const image = getImageUri(buff); + expect(image).toEqual('data:image/png;base64,' + str); + }); + it('should be bufferToBase64 a empty if null', async () => { const str = 'null'; const buff = Buffer.from(str, 'utf-8'); diff --git a/src/shared/helpers/buffer-to-image.ts b/src/shared/helpers/buffer-to-image.ts index 0174480..3a64718 100644 --- a/src/shared/helpers/buffer-to-image.ts +++ b/src/shared/helpers/buffer-to-image.ts @@ -4,6 +4,10 @@ export const bufferToBase64 = (buffer: Buffer): string => { return isBase64(base64) ? base64 : ''; }; +export const getImageUri = (value: Buffer | string): string => { + return `data:image/png;base64,${Buffer.from(value).toString()}`; +}; + export function isBase64(value: unknown): boolean { return typeof value === 'string' && isBase64Image(value); } diff --git a/src/usuario/usuario.controller.ts b/src/usuario/usuario.controller.ts index b9f1b2d..d98b1c0 100644 --- a/src/usuario/usuario.controller.ts +++ b/src/usuario/usuario.controller.ts @@ -44,7 +44,7 @@ export class UsuarioController { @Get(':id') async findOne(@Param() param: IdValidator): Promise { - return this._service.findOne(param.id); + return this._service.findOne(param.id, true); } @Patch(':id') diff --git a/src/usuario/usuario.service.spec.ts b/src/usuario/usuario.service.spec.ts index 02f3985..3bac8c8 100644 --- a/src/usuario/usuario.service.spec.ts +++ b/src/usuario/usuario.service.spec.ts @@ -102,6 +102,16 @@ describe('UsuarioService', () => { expect(found.id).toEqual(1); }); + it('should find Usuario with foto', async () => { + jest.spyOn(repository, 'findOneOrFail').mockReturnValue({ + id: 1, + foto: Buffer.from('/9j/4AAQSkZJRgABAQAAAQABAAD', 'utf-8'), + } as any); + + const found = await service.findOne(1, true); + expect(found.id).toEqual(1); + }); + it('should remove Usuario', async () => { jest.spyOn(repository, 'findOneOrFail').mockReturnValue({ id: 1 } as any); jest.spyOn(repository, 'remove').mockReturnValue({ id: 1 } as any); diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index fdeceec..f76a236 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -5,6 +5,7 @@ import bcrypt from 'bcrypt'; import { Repository } from 'typeorm'; import { Ordering } from '../shared/decorators/ordenate.decorator'; import { Pagination } from '../shared/decorators/paginate.decorator'; +import { getImageUri } from '../shared/helpers/buffer-to-image'; import { getWhereClauseNumber, getWhereClauseString, @@ -53,14 +54,17 @@ export class UsuarioService { .getOne(); } - async findOne(id: number) { - return this._repository.findOneOrFail({ where: { id } }); + async findOne(id: number, transformImage = false) { + const user = await this._repository.findOneOrFail({ where: { id } }); + if (transformImage) { + user.foto = getImageUri(user.foto) as unknown as Buffer; + } + return user; } async update(id: number, body: UpdateUsuarioDto): Promise { const found = await this.findOne(id); const merged = Object.assign(found, body); - // TODO caso a senha seja editada, também criptografar return this._repository.save(merged); } From af0f6851337d93980dde4981a4b6b92c66ebae9b Mon Sep 17 00:00:00 2001 From: Henrique Melo Date: Fri, 27 Oct 2023 00:07:39 -0300 Subject: [PATCH 2/3] fix --- src/usuario/usuario.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index f76a236..872568d 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -56,7 +56,7 @@ export class UsuarioService { async findOne(id: number, transformImage = false) { const user = await this._repository.findOneOrFail({ where: { id } }); - if (transformImage) { + if (transformImage && user.foto) { user.foto = getImageUri(user.foto) as unknown as Buffer; } return user; From 630cb4c2f0879cb0f46ea15e51e5d01c182a0728 Mon Sep 17 00:00:00 2001 From: Henrique Melo Date: Fri, 27 Oct 2023 00:12:33 -0300 Subject: [PATCH 3/3] altera sonar properties --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index 0932111..be40018 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -6,7 +6,7 @@ sonar.python.version=3 sonar.sources=./src sonar.inclusions=** -sonar.exclusions=**/main.ts,**/ormconfig.ts,**/*.module.ts,src/migration/*.ts,src/migrations.ts +sonar.exclusions=**/main.ts,**/ormconfig.ts,**/*.module.ts,src/migration/*.ts,src/migrations.ts,**/*.spec.ts sonar.javascript.lcov.reportPaths=./coverage/unit/lcov.info sonar.dynamicAnalysis=reuseReports sonar.core.codeCoveragePlugin=cobertura