Skip to content

Commit 9a8e78d

Browse files
committed
feat: use cases de processamento de documento WEB e PDF
1 parent f5dcd8b commit 9a8e78d

28 files changed

Lines changed: 242 additions & 28 deletions
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface IHttpService {
2+
get(url: string)
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface IPdfProcessing {
2+
parse(file: Buffer<ArrayBufferLike>)
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface IRxjs {
2+
lastValueFrom(axiosResponseUrl: any): Promise<any>
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface IWebProcessing {
2+
load(responseData: any)
3+
}

src/application/controllers/auth-controller.interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AcessToken } from '../services/acess-token.interface'
1+
import { AcessToken } from '@/application/services/acess-token.interface'
22

33
export interface IAuthController<T> {
44
login(data: T): Promise<AcessToken>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export class DocumentoConteudoInvalidoError extends Error {
2+
constructor() {
3+
super('Documento não contém conteúdo válido')
4+
this.name = 'DocumentoConteudoInvalidoException'
5+
}
6+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export class DocumentoPdfInvalidoError extends Error {
2+
constructor(tipoDocumento: string) {
3+
super(
4+
`O arquivo enviado não é um PDF válido. Tipo recebido: ${tipoDocumento}`,
5+
)
6+
this.name = 'DocumentoPdfInvalidoException'
7+
}
8+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export class DocumentoTituloInvalidoError extends Error {
2+
constructor() {
3+
super('Documento não contém título válido')
4+
this.name = 'DocumentoTituloInvalidoError'
5+
}
6+
}

src/application/services/jwt-service.interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { UserPayload } from '../controllers/user-payload.props'
1+
import { UserPayload } from '@/application/controllers/user-payload.props'
22

33
export interface IJwtService {
44
signAsync(payload: UserPayload): Promise<string>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { IPdfProcessing } from '@/application/common/utils/pdf-processing.interface'
2+
import { DocumentoConteudoInvalidoError } from '@/application/errors/documents/documento-conteudo-invalido.error'
3+
import { DocumentoPdfInvalidoError } from '@/application/errors/documents/documento-pdf-invalido.error'
4+
import { DocumentoTituloInvalidoError } from '@/application/errors/documents/documento-titulo-invalido.error'
5+
import { ExtractedDocumentProps } from '@/application/services/extracted-document.props'
6+
import { IUseCase } from '@/application/usecases/use-case.interface'
7+
8+
export class PdfProcessingUseCase implements IUseCase {
9+
constructor(private readonly pdfProcessing: IPdfProcessing) {}
10+
async execute(file: Express.Multer.File): Promise<ExtractedDocumentProps> {
11+
if (!file.mimetype || file.mimetype !== 'application/pdf') {
12+
throw new DocumentoPdfInvalidoError(file.mimetype)
13+
}
14+
15+
const data = await this.pdfProcessing.parse(file.buffer)
16+
const title = data.info.Title || 'Título não encontrado'
17+
const content = data.text
18+
19+
if (!content || content.trim() === '') {
20+
throw new DocumentoConteudoInvalidoError()
21+
}
22+
23+
if (!title || title.trim() === 'Título não encontrado') {
24+
throw new DocumentoTituloInvalidoError()
25+
}
26+
27+
return { title, content } as ExtractedDocumentProps
28+
}
29+
}

0 commit comments

Comments
 (0)